C++棧的實現

來源:互聯網
上載者:User

2009-04-15 11:40
順序棧(seqential stack)就是用順序儲存方式儲存的棧。在下面順序棧的類定義中是用數組儲存的。用stacka[maxsize]儲存,maxsize是最大允許存放元素的個數。變數top表示棧頂部元素的位置,初始值為-1,表示棧空.
      我們首先給出順序棧的抽象資料類型的描述,然後給出順序棧的類定義與實現。下面是順序棧的抽象資料類型的描述。
      ADT seqstack is
       Data 
           棧頂表示,存放棧元素組和棧元素個數的最大數
         seqstack
              輸入:棧元素個數的最大數
        ~seqstack
              刪除儲存棧元素的數組
       Push
              輸入:要進棧的項item
              前置條件:棧末滿
              動作:把item壓入棧頂
              輸出:無
              後置條件:棧頂增加了一個新元素,棧頂指示加1
       Pop
              輸入:無
              前置條件:棧非空
              動作:彈出棧頂元素
              輸出:返回棧頂元素的值
              後置條件:刪除棧頂元素,棧頂指示減1
Gettop
              輸入:無
              前置條件:棧非空
              動作:取棧頂元素值
              輸出:返回棧頂資料元素
              後置條件:無
       Empty
              輸入:無
              前置條件:無
              動作:檢查棧頂指示是否等於-1
              輸出:棧空時返回1,否則返回0
              後置條件:無
       Full
              輸入:無
              前置條件:無
              動作:檢查棧頂指示是否等於maxsize-1
              輸出:棧滿時返回1,否則返回0
              後置條件:無
       Clear
              輸入:無
              前置條件:無
              動作:清空棧
              輸出:無
              後置條件:棧頂指示為-1
End ADT seqstack
//////////////////////////////////////////////////////
/*
**=======================================
**SeqStack.h           順序棧模板類的定義及實現
**=======================================
*/
#include <iostream.h>
#include <stdlib.h>
/////////////////////////////////////////////////////////////////////////////////////

#define MAXSIZE   0xFFFF
template<class type>
class SeqStack 
{
int   top;     //棧頂指示
type *stacka;    //數組名
int   maxsize;    //棧最大可容納元素個數
public:
SeqStack();
SeqStack(int size);
SeqStack(type data[],int size);
virtual ~SeqStack()
{
   delete []stacka;
}
void Push(const type &item);    //元素item壓棧
type Pop();        //資料元素出棧,返回之
type GetTop();       //讀棧頂資料元素並返回

int   Empty()const
{
   return top==-1;
}           //判斷棧是否為空白
int   Full()const
{
   return top==maxsize-1;
}           //判斷棧是否為滿
void Clear()
{
   top=-1;
}           //清空棧
};

template<class type>
SeqStack<type>::SeqStack():
top(-1),maxsize(MAXSIZE)
{
stacka=new type[maxsize];
if(stacka==NULL){
   cerr<<"動態儲存裝置分配失敗!"<<endl;
   exit(1);
}
}
template<class type>
SeqStack<type>::SeqStack(int size):
top(-1),maxsize(size)
{
stacka=new type[maxsize];    //建立儲存棧的數組
if(stacka==NULL){      //分配不成功
   cerr<<"動態儲存裝置分配失敗!"<<endl;
   exit(1);
}
}
template<class type>
SeqStack<type>::SeqStack(type data[],int size):
top(-1),maxsize(size)
{
stacka=new type[maxsize];    //建立儲存棧的數組
if(stacka==NULL){      //分配不成功
   cerr<<"動態儲存裝置分配失敗!"<<endl;
   exit(1);
}
for(int i=0;i<maxsize;i++){
   stacka[i]=data[i];
}

top+=maxsize;
}

template<class type>
void SeqStack<type>::Push(const type& item)
{
//若棧已滿,出錯處理;否則把元素item壓棧
if(Full()){         
   cerr<<"棧已滿,不能壓棧!"<<endl;
   exit(1);
}
//這裡我們採用指標先移動,然後再對元素進行操作的方式
top++;   

stacka[top]=item;
}

template<class type>
type SeqStack<type>::Pop()
{
if(Empty()){
   cerr<<"棧已空!"<<endl;
   exit(1);
}
//棧不空,取棧頂元素
type data=stacka[top];
top--;
//返回棧頂元素
return data;
}

template<class type>
type SeqStack<type>::GetTop()
{
//若棧不空,返回棧頂元素的值
if(Empty()){
   cerr<<"棧空!"<<endl;
   exit(1);
}
//返回棧頂元素的值
return stacka[top];
}
//////////////////////////////////////////////////////////////////////
/*
**=======================================
**main.h           主程式
**=======================================
*/

#include "SeqStack.h"
int main()
{
int data[10]={1,2,3,4,5,6,7,8,9,10};
SeqStack<int> stack(data,10);
while(!stack.Empty()){
   cout<<stack.Pop()<<" ";
}
cout<<endl;
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////
輸出結果:
10 9 8 7 6 5 4 3 2 1
Press any key to continue

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.