#pragma once template struct SqStack // 顺序栈 { DT* base; // 栈首址 int top; // 栈顶指针 int stacksize; // 栈容量 }; //基本操作的实现 //【算法3.1】 // 初始化栈 template void InitStack(SqStack
& S, int m) { S.base = new DT[m]; // 申请栈空间 if (S.base == NULL) // 申请失败,退出 { cout << "未创建成功!"; exit(1); } S.top = -1; // 设置空栈属性 S.stacksize = m; } //【算法3.2】 // 销毁栈 template void DestroyStack(SqStack
& S) { delete[] S.base; // 释放栈空间 S.top = -1; S.stacksize = 0; // 设置栈属性 } //【算法3.3】 // 入栈 template bool Push(SqStack
& S, DT e) { if (S.top == S.stacksize - 1) // 栈满,不能入栈 return false; // 返回false S.top++; S.base[S.top] = e; return true; // 入栈成功,返回true } //【算法3.4】 // 出栈 template bool Pop(SqStack
& S, DT& e) { if (S.top == -1) // 栈空 return false; // 返回false e = S.base[S.top]; // 取栈顶元素 S.top--; // 栈顶指针下移 return true; // 出栈成功,返回true } //【算法3.5】 // 获取栈顶元素 template bool GetTop(SqStack
S, DT& e) { if (S.top == -1) // 栈空 return false; // 返回false e = S.base[S.top]; // 栈非空,取栈顶元素 return true; // 返回true } //测栈空 template bool StackEmpty(SqStack
S) { if (S.top == -1) // 空栈,返回true return true; else // 空栈,返回false return false; } //显示栈内容 template void DispStack(SqStack
S) { int i = S.top; while (i >= 0) { cout << S.base[i--] << "\t"; } cout << endl; } template void ClearStack(SqStack
& S) { S.top = -1; } template int StackFull(SqStack
S) { if (S.top == S.stacksize - 1) return 1; else return 0; }