基于类模板
#include<iostream>
using namespace std;
template<class T, int MaxSize>
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();//控制菜单
};
template<class T, int MaxSize>
SeqStack<T, MaxSize>::SeqStack() {
top = -1;
}
template<class T, int MaxSize>
void SeqStack<T, MaxSize>::Push(T x) {
if (top == MaxSize - 1) {
cerr << "上溢";
exit(1);
}
top++;
data[top] = x;
}
template<class T, int MaxSize>
T SeqStack<T, MaxSize>::Pop() {
T x;
if (top == -1) {
cerr << "下溢";
exit(1);
}
x = data[top];
top--;
return x;
}
template<class T, int MaxSize>
T SeqStack<T, MaxSize>::Top() {
if (top == -1) {
cerr << "下溢";
exit(1);
}
return data[top];
}
template<class T, int MaxSize>
bool SeqStack<T, MaxSize>::Empty() {
return top == -1;
}
template<class T, int MaxSize>
void SeqStack<T, MaxSize>::PrintSeqStack() {
if (top == -1) {
cout << "顺序栈为空";
}
for (int i = 0; i <= top; i++) {
cout << data[i] << " ";
}
}
template<class T, int MaxSize>
void SeqStack<T, MaxSize>::ShowMenu() {
cout << "-------------菜单------------" << endl;
cout << "| 1.入栈 |" << endl;
cout << "| 2.出栈 |" << endl;
cout << "| 3.取栈顶元素 |" << endl;
cout << "| 4.判断栈是否为空 |" << endl;
cout << "| 5.遍历顺序栈 |" << endl;
cout << "| 6.退出菜单 |" << endl;
cout << "-----------------------------" << endl;
}
template<class T, int MaxSize>
void SeqStack<T, MaxSize>::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<int, 10> s1;
s1.ShowMenu();
s1.ProcessMenu();
return 0;
}