棧(stack)和佇列(queue)的定義與基本用法
阿新 • • 發佈:2019-02-18
棧和佇列
【定義和特點】
棧:棧(stack)又名堆疊,它是限定在表的一端進行插入和刪除操作的線性表(後進先出)。這一端被稱為棧頂,相對地,把另一端稱為棧底。不含元素的空表稱為空棧。
佇列:和棧相反,佇列(queue)是一種先進先出的線性表。它只允許在表的前端進行刪除操作,而在表的後端進行插入操作。允許插入的一端稱為隊尾(rear),允許刪除的一端稱為隊頭(front)。
向一個棧插入新元素又稱作入棧,從一個棧刪除元素又稱作出棧。在佇列中插入一個佇列元素稱為入隊,從佇列中刪除一個佇列元素稱為出隊。和線性表一樣,棧和佇列的儲存結構也包括順序和鏈式兩種。
【棧的使用】
標頭檔案:#include<stack>
宣告一個棧:stack <資料型別> 資料名 如:stack <int> a
基本用法:
a.push(); //向棧內壓入一個成員
a.pop(); //從棧頂彈出一個成員
a.empty(); //為空返回true,否則返回false
a.top(); //返回棧頂,但不刪除成員
a.size(); //返回棧的大小
【佇列的使用】
標頭檔案:#include<queue>
宣告一個佇列:queue <資料型別> 資料名 如:queue <int> q
基本用法:
q.push(); //在隊尾插入資料 q.pop(); //在隊首刪除資料 q.empty(); //為空返回true,否則返回false q.front(); //返回隊首元素 q.back(); //返回隊尾的元素 q.size(); //返回佇列的大小
【案例分析】
大數A+B
#include<iostream> #include<string> #include<stack> using namespace std; int main() { int t,i,num; string a,b; stack <int> stk; cin>>t; for(i=1;i<=t;i++) { if(i>1) cout<<endl; cin>>a>>b; int l1=a.size(),l2=b.size(); int j=0; while(l1>0||l2>0) { num=j; if(l1>0) { num+=a[l1-1]-'0'; l1--; } if(l2>0) { num+=b[l2-1]-'0'; l2--; } j=num/10; stk.push(num%10); } if(j) stk.push(j); cout<<"Case "<<i<<':'<<endl; cout<<a<<" + "<<b<<" = "; while(!stk.empty()) { cout<<stk.top(); stk.pop(); } cout<<endl; } return 0; }