#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string.h>
using namespace std;
#define OK 0
#define ERROR 1
const int MAXSIZE = 100;
typedef string SElemType;
typedef int status;
typedef struct SqStack
{
SElemType* base;
SElemType* top;
int StackSize;
};
status InitStack(SqStack
status Push(SqStack&S, SElemType
status Pop(SqStack& S, SElemType
status DestroyStack(SqStack
status ClearStack(SqStack
status StackEmpty(SqStack
status StackLength(SqStack
status GetTop(SqStack& S, SElemType
int main()
{
SqStack S;
int a;
SElemType e;
InitStack(S);
cout << "1.压栈" << "\n"
<< "2.弹栈" << "\n"
<< "3.长度" << "\n"
<< "4.清空" << "\n"
<< "5.销毁" << "\n"
<< "6.判空" << "\n"
<< "7.取栈顶" << "\n"
<< "8.退出" << endl;
while (1)
{
cout << "请选择:" << endl;
cin >> a;
switch (a)
{
case 1:
cout << "请输入学生名字:" << endl;
cin >> e;
Push(S, e);
break;
case 2:
Pop(S, e);
cout << "弹出为:" << e << endl;
break;
case 3:
StackLength(S);
break;
case 4:
ClearStack(S);
break;
case 5:
DestroyStack(S);
break;
case 6:
StackEmpty(S);
break;
case 7:
GetTop(S,e);
break;
case 8:
break;
}
if (a == 8)break;
}
return 0;
}
status InitStack(SqStack& S)
{
S.base = new SElemType[MAXSIZE];
if (!S.base)exit(OVERFLOW);
S.top = S.base;
S.StackSize = MAXSIZE;
cout << "初始化成功!" << endl;
return OK;
}
status StackEmpty(SqStack& S)
{
if (S.top == S.base)cout << "栈为空" << endl;
else cout << "栈不为空" << endl;
return OK;
}
status StackLength(SqStack& S)
{
cout << "栈的长度为:"<< S.top-S.base << endl;
return S.top - S.base;
}
status ClearStack(SqStack& S)
{
if (S.base)S.top = S.base;
S.StackSize = 0;
cout << "清除顺序栈成功!" << endl;
return OK;
}
status DestroyStack(SqStack& S)
{
if (S.base) {
delete S.base;
S.StackSize = 0;
S.base = S.top = NULL;
}
cout << "销毁顺序栈成功!" << endl;
return OK;
}
status Push(SqStack& S, SElemType& e)
{
if (S.top - S.base == MAXSIZE)
{
cout << "栈已满!" << endl;
return ERROR;
}
*S.top = e;
S.top++;
return OK;
}
status Pop(SqStack& S, SElemType& e)
{
if (S.top == S.base)return ERROR;
--S.top;
e = *S.top;
return OK;
}
status GetTop(SqStack& S, SElemType& e)
{
if (S.top == S.base)return ERROR;
--S.top;
e = *(S.top);
++S.top;
cout << "栈顶元素为:" << e << endl;
return OK;
}