C++ 順序棧類實現
阿新 • • 發佈:2019-01-29
//還不是很完善,應該在壓棧時若棧滿了自動擴大棧
#include<iostream> using namespace std; #define MAXSIZE 100 typedef int ELETYPE; class Stack { private: ELETYPE *base;//棧底 int top;//棧頂 int stacksize;//棧空間 public: Stack(); ~Stack(); bool IsEmpty();//是否為空棧 bool ClearStack();//清空棧 int StackLength();//棧長度 bool PushStack(ELETYPE a);//壓棧 bool PopStack(ELETYPE &a);//出棧 bool TopStack(ELETYPE &a);//返回棧頂元素 bool IsFull();//棧是否滿了 }; bool Stack::TopStack(ELETYPE &a) { if(-1==top) return false; a=base[top]; } bool Stack::IsFull() { //if(stacksize-1==top) // return true; //return false; return top==stacksize-1;//這種寫法更為簡潔 } bool Stack::PopStack(ELETYPE &a) { if(-1==top) return false; a=base[top--]; return true; } bool Stack::PushStack(ELETYPE a) { if(top==stacksize-1) return false; base[++top]=a; return true; } int Stack::StackLength() { return top+1; } bool Stack::ClearStack() { top=-1;//這樣是有問題的 return true; } bool Stack::IsEmpty()//空棧返回true,否則返回false { if(-1==top) return true; return false; } Stack::Stack() { top=-1;//陣列第一個元素下標為0,所以用-1來表示空棧 stacksize=MAXSIZE; base=new ELETYPE[MAXSIZE]; } Stack::~Stack() { delete []base;//解構函式不會自動回收new的空間,所以在解構函式裡手動delete new的空間 } void main() { Stack sta; for(int i=0;i<10000;++i) { if(!sta.PushStack(i)) break; } int a; for(;sta.StackLength()!=0;) { sta.PopStack(a); cout<<a<<" "; } }