[数据结构] 链式栈

 数据结构的练习与巩固
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1
//栈的数据结构类型 2 template <class T> 3 class Stack() 4 { 5 Stack() {}; 6 virtual void Push(T& x) = 0; //进栈 7 virtual bool Pop(T& x) = 0; //出栈 8 virtual bool getTop(T& x)const = 0; //取得栈顶 9 virtual bool IsEmpty()const = 0; //判断栈是否空 10 virtual bool IsFull()const = 0; //判断栈是否满 11 virtual int getSize()const = 0; //获取栈长度 12 };
 1 //顺序栈
 2 const int stackIncrement = 20;             //栈的长度增加单位
 3 template <class T>
 4 class SeqStack :public Stack<T>
 5 {
 6 private:
 7     T* elements;
 8     int top;
 9     int maxSize;
10     void overflowProcess();                //栈溢出处理
11 
12 public:
13     SeqStack(int size = 50);               //栈的初始化
14     ~SeqStack() { delete[]elements; }      //栈的删除
15     void Push(const T& x);                 //进栈
16     bool Pop(T& x);                        //出栈
17     bool getTop(T& x);                     //获取栈顶
18     bool IsEmpty()const { return top == -1; }          //是否栈空
19     bool IsFull()const { return top == maxSize - 1; }  //是否栈满
20     int getSize()const { return top + 1; }             //获取栈长
21     void makeEmpty() { top == -1; }                    //置空栈
22 };
23 
24 template <class T>
25 void SeqStack<T>::overflowProcess()
26 {
27     T* newArray = new T[maxSize + stackIncrement];  //创建长度增加的数组
28     if (newArray == NULL)                           //如果创建了空数组
29           { cerr << "创建失败" << endl;     exit(1); }
30     for (int i = 0; i <= top; i++)                  //逐项赋值给新数组
31         newArray[i] = element[i]; 
32     maxSize += stackIncrement;                      //将maxSize数值更新
33     delete[]elements;                               //删除原有栈
34     elements = newArray;                            //让elements指向新数组的首项
35 };
36 
37 template <class T>
38 void SeqStack<T>::Push(const T& x)
39 {
40     if (IsFull() == true)overflowProcess();         //如果栈长度不够,则进行栈溢出操作
41     elements[++top] = x;                            //将值赋给新栈空间
42 };
43 
44 template <class T>
45 bool SeqStack<T>::Pop(T& x)
46 {
47     if (IsEmpty() == true)return false;             //如果栈空,则不进行操作
48     x = elements[top--];                            //将值取出
49     return true;
50 };
51 
52 template <class T>
53 bool SeqStack<T>::getTop(T& x)
54 {
55     if (IsEmpty() == true)return false;             //如果栈空,则不进行操作
56     x = elements[top];                              //将值取出
57     return true;
58 };
原文地址:https://www.cnblogs.com/nagishiro/p/13154127.html