#include <iostream>
using namespace std;
const int MAXSIZE = 100;
struct People
{
int id;
string name;
int age;
};
/*实现顺序栈的构造,析构,入栈,出栈,
取栈顶元素,判断栈空,菜单*/
template <class Element>
class SeqStack
{
public:
SeqStack();
~SeqStack() {};
void push(Element x);
Element pop();
Element getTop();
bool ifEmpty();
void menu();
private:
Element SStack[MAXSIZE];
int top;
};
template <class Element>
SeqStack<Element>::SeqStack()
{
top = -1;
}
template <class Element>
void SeqStack<Element>::push(Element x)
{
if (top == MAXSIZE - 1) throw"上溢";
SStack[++top] = x;
}
template <class Element>
Element SeqStack<Element>::pop()
{
if (top == -1)throw "下溢";
Element x = SStack[top--];
return x;
}
template <class Element>
Element SeqStack<Element>::getTop()
{
if (top == -1)throw "栈为空";
return SStack[top];
}
template <class Element>
bool SeqStack<Element>::ifEmpty()
{
if (top == -1)return 1;
else return 0;
}
template <class Element>
void SeqStack<Element>::menu()
{
int choice=0;
int pId = 0;
string pName;
int pAge = 0;
int pos = 0;
People p1 = { pId, pName, pAge };
Element x;
/*实现顺序栈的构造,析构,入栈,出栈,
取栈顶元素,判断栈空,菜单*/
cout <<"-----菜单-----"<< endl;
cout <<"1.取栈顶元素\t2.判断是否为空"<< endl;
cout <<"3.入栈\t4.出栈"<< endl;
cout <<"请输入你要实现的操作:";
cin >> choice;
cout << endl;
switch (choice)
{
case 1:
x = getTop();
cout<<"栈顶元素为:"<<x.id<<" "<<x.name<<" "<<x.age<<endl;
break;
case 2:
if (ifEmpty())
{
cout << "此栈为空" << endl;
}
else
{
cout << "此栈非空" << endl;
}
break;
case 3:
pId=0;
pAge=0;
pos=0;
cout << "请输入你要入栈的人物的id:";
cin >> pId;
cout << endl;
cout << "请输入你要入栈的人物的name:";
cin >> pName;
cout << endl;
cout << "请输入你要入栈的人物的age:";
cin >> pAge;
cout << endl;
p1={ pId, pName, pAge };
push(p1);
cout << endl;
break;
case 4:
x = pop();
cout << "出栈元素为:" << x.id << " " <<x.name << " " << x.age << endl;
break;
default:
cout << "你输入的数字有误,请重新输入" << endl;
break;
}
}
int main()
{
SeqStack<People> s1;
while (1)
{
s1.menu();
}
return 0;
}