#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
typedef struct SqStack //结点定义
{
int *base,*top;
int stacksize;
}SqStack,* stack;
// 构造一个空栈
int InitStack(SqStack &s)
{
s.base = (int *)malloc(100*sizeof(int));
if(!s.base) //创建失败 返回0 程序退出
exit(0);
s.top = s.base;
s.stacksize = 100;
return 1;
}
//销毁栈
int DestroyStack(SqStack *s) //已改
{
free(s);
cout<<endl<<"销毁栈.........."<<endl;
return 1;
}
//清空栈
int ClearStack(SqStack &s)
{
s.top = s.base;
return 1;
}
//判断是否为空栈
int StackEmpty(SqStack &s)
{
if(s.base==s.top)
return 0;
else
return 1;
}
//栈的实际长度
int StackLemgth(SqStack &s) //已改
{
return s.top-s.base;
}
//返回栈顶元素
int GetTop(SqStack &s)
{
if(s.base==s.top)
return 0;
return *(s.top-1);
}
//入栈
int Push(SqStack &s)
{
if(s.top-s.base>=s.stacksize)
{
s.base = (int *)realloc(s.base,110*sizeof(int));
if(!s.base)
exit(0);
s.top = s.base+s.stacksize;//指向原来的栈顶
s.stacksize+=10;
}
cout<<"请输入入栈元素个数:";
int a,e;
cin>>a;
cout<<"请输入入栈元素:";
for(int i =0;i<a;i++)
{
cin>>e;
*s.top++ = e;
}
cout<<"入栈完成........"<<endl;
return 1;
}
//出栈
int Pop(SqStack &s)
{
if(s.base==s.top)
return 0;
return *--s.top;
}
void menu()
{
cout<<"****************************"<<endl;
cout<<"* (已自动构造空栈S) ***"<<endl;
cout<<"* 1.入栈 2.出栈 ***"<<endl;
cout<<"* 3.查询栈的实际长度 ***"<<endl;
cout<<"* 4.查询栈顶元素 ***"<<endl;
cout<<"* 5.判断是否为空栈 ***"<<endl;
cout<<"* 6.清空栈 7.销毁栈 ***"<<endl;
cout<<"* 0.退出系统 ***"<<endl;
cout<<"****************************"<<endl;
}
int main()
{
SqStack e,s;
InitStack(s);
while(1)
{
menu(); //菜单函数
int x;
cout<<"请输入功能序号:"<<endl;
cin>>x;
switch (x)
{
case 1:Push(s);break;
case 2:cout<<"栈中元素为:"<<endl;while(int a=Pop(s))cout<<a<<" ";cout<<endl;break;
case 3:cout<<"栈的实际长度为:"<<StackLemgth(s)<<endl;break;
case 4:cout<<"栈顶元素为:"<<GetTop(s)<<endl;break;
case 5:cout<<"栈为:"<<StackEmpty(s)<<"(0为空)"<<endl;break;
case 6:ClearStack(s);cout<<endl<<endl<<"执行清空.........."<<endl;break;
case 7:DestroyStack(&s);break;
case 0:exit(0);
}
}
return 0;
}