基于类模板
#includeusing namespace std; template class SeqStack { T data[MaxSize];//存放栈顶元素的数组 int top;// public: SeqStack();//构造函数 void Push(T x);//入栈 T Pop();//出栈 T Top();//取栈顶元素 bool Empty();//判断栈是否为空 void PrintSeqStack();//遍历 void ShowMenu();//菜单 void ProcessMenu();//控制菜单 };
templateSeqStack ::SeqStack() { top = -1; }
templatevoid SeqStack ::Push(T x) { if (top == MaxSize - 1) { cerr << "上溢"; exit(1); } top++; data[top] = x; }
templateT SeqStack ::Pop() { T x; if (top == -1) { cerr << "下溢"; exit(1); } x = data[top]; top--; return x; }
templateT SeqStack ::Top() { if (top == -1) { cerr << "下溢"; exit(1); } return data[top]; }
templatebool SeqStack ::Empty() { return top == -1; }
templatevoid SeqStack ::PrintSeqStack() { if (top == -1) { cout << "顺序栈为空"; } for (int i = 0; i <= top; i++) { cout << data[i] << " "; } }
templatevoid SeqStack ::ShowMenu() { cout << "-------------菜单------------" << endl; cout << "| 1.入栈 |" << endl; cout << "| 2.出栈 |" << endl; cout << "| 3.取栈顶元素 |" << endl; cout << "| 4.判断栈是否为空 |" << endl; cout << "| 5.遍历顺序栈 |" << endl; cout << "| 6.退出菜单 |" << endl; cout << "-----------------------------" << endl; }
templatevoid SeqStack ::ProcessMenu() { while (1) { cout << endl; cout << "请输入你选择的菜单功能:"; int menuchioce; cin >> menuchioce; switch (menuchioce) { case 1: T x; cout << "输入数值:"; cin >> x; Push(x); cout << "已入栈"; break; case 2: cout << Pop() << " 已出栈"; break; case 3: cout << Top(); break; case 4: if (Empty() == 0) cout << "不为空栈"; else cout << "空栈"; break; case 5: cout << "当前顺序栈的元素:"; PrintSeqStack(); break; case 6: cout << "成功退出菜单!"; exit(0);//正常运行导致退出程序 break; } } }
int main() {
SeqStack s1;
s1.ShowMenu();
s1.ProcessMenu();
return 0;
}



