線性表之順序棧C++實現


線性表之順序棧

棧是限定僅在表尾(棧頂)進行插入刪除操作的線性表,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 }

 

 三、運行示例結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM