1. 程式人生 > >棧(stack)和佇列(queue)的定義與基本用法

棧(stack)和佇列(queue)的定義與基本用法

棧和佇列

定義和特點

棧:棧(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;
}