線性表之順序棧
棧是限定僅在表尾(棧頂)進行插入刪除操作的線性表,FILO:先進后出
一、順序棧的頭文件:SeqStack.h
1 //順序棧頭文件 2 #include<iostream> 3 using namespace std; 4 //設置順序棧的大小 5 const int StackSize = 10; 6 template<class DataType> 7 //定義順序棧的模板類型 8 class SeqStack{ 9 public: 10 //無參構造器,初始化棧頂指針 11 SeqStack(){ top = -1; } 12 //析構函數為空 13 ~SeqStack(){} 14 //入棧操作,將元素入棧 15 void Push(DataType x); 16 //出棧操作,將棧頂元素彈出棧 17 DataType Pop(); 18 //取出棧頂元素,不刪除棧頂元素(即取出的元素還在棧內) 19 DataType GetTop(); 20 //判斷棧是否為空 21 int IsEmpty(); 22 private: 23 //存放站元素的指針 24 DataType data[StackSize]; 25 //棧頂指針:棧頂元素在數組中的下標 26 int top; 27 }; 28 29 30 31 //實現順序棧入棧操作 32 template<class DataType> 33 void SeqStack<DataType>::Push(DataType x) 34 { 35 //判斷當前順序棧是否已是滿棧 36 if (top == StackSize - 1) 37 { 38 throw "棧已滿"; 39 } 40 else 41 { 42 //如果當前順序棧不滿,則棧頂值棧向上移動一個單元 43 top++; 44 //給新的棧頂元素賦值 45 data[top] = x; 46 } 47 } 48 49 50 51 //實現順序棧出棧,彈出棧頂元素 52 template<class DataType> 53 DataType SeqStack<DataType>::Pop() 54 { 55 //先判斷是否是空棧 56 if (top == -1) 57 { 58 throw "棧是空棧"; 59 } 60 else 61 { 62 //若不是空棧,則取出棧頂元素,並刪除棧頂元素 63 DataType x = data[top]; 64 //棧頂指針向下移動一個單元素 65 top--; 66 //返回棧頂元素的值 67 return x; 68 } 69 } 70 71 72 73 //實現取出棧頂元素,但不刪除取出的元素 74 template<class DataType> 75 DataType SeqStack<DataType>::GetTop() 76 { 77 //先判斷是否是空棧 78 if (top == -1) 79 { 80 throw "棧是空棧"; 81 } 82 else 83 { 84 //若不是空棧,則取出棧頂元素的值,但不刪除棧頂元素 85 DataType x = data[top]; 86 //返回棧頂元素的值 87 return x; 88 } 89 } 90 91 92 93 //實現判斷順序棧是否是空棧:棧空返回 1,否則返回 0 94 template<class DataType> 95 int SeqStack<DataType>::IsEmpty() 96 { 97 98 if (top == -1) 99 { 100 return 1; 101 } 102 else 103 { 104 return 0; 105 } 106 }
二、測試順序棧的源文件:TestSeqStack.cpp
1 //測試順序棧 2 #include<iostream> 3 //引入順序棧頭文件 4 #include"SeqStack.h" 5 using namespace std; 6 int main() 7 { 8 //創建一個順序棧 9 SeqStack<int> seqStack = SeqStack<int>(); 10 //判斷是否是空棧 11 cout << "此時棧是否是空棧:" << seqStack.IsEmpty() << endl; 12 //入棧 13 seqStack.Push(1); 14 cout << "1 入棧了" << endl; 15 //判斷是否是空棧 16 cout << "此時棧是否是空棧:" << seqStack.IsEmpty() << endl; 17 //取出棧頂元素 18 cout << "棧頂元素是:" << seqStack.GetTop() << endl; 19 //出棧 20 seqStack.Push(3); 21 cout << "3 入棧了" << endl; 22 //取出棧頂元素 23 cout << "棧頂元素是:" << seqStack.GetTop() << endl; 24 //出棧 25 seqStack.Push(7); 26 cout << "7 入棧了" << endl; 27 //取出棧頂元素 28 cout << "棧頂元素是:" << seqStack.GetTop() << endl; 29 //出棧 30 seqStack.Push(5); 31 cout << "5 入棧了" << endl; 32 //取出棧頂元素 33 cout << "棧頂元素是:" << seqStack.GetTop() << endl; 34 //出棧 35 cout << "棧頂元素" << seqStack.Pop() << "出棧了" << endl; 36 //取出棧頂元素 37 cout << "棧頂元素是:" << seqStack.GetTop() << endl; 38 //出棧 39 return 0; 40 }
三、運行示例結果: