#include<iostream>
#include<stdlib.h>
#define ERROR 0
#define OK 1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
using namespace std;
typedef struct{
int *base;
int *top;
int size;
}sqs;
int Destroy(sqs S)
{
if (!S.base) return ERROR; //若栈未建立
free (S.base);// 回收栈空间
S.base = S.top = NULL ;
S.size = 0 ;
cout<<"成功销毁"<<endl;
return OK ;
}
int Clear(sqs S)
{
if (!S.base) return ERROR; //若栈未建立
S.top=S.base;
}
int Empty(sqs S)
{
if(!S.base) return ERROR; //若栈未建立
if(S.top=S.base)
cout<<"栈为空"<<endl;
else
cout<<"栈不为空"<<endl;
}
int Len(sqs S)
{
if(!S.base) return ERROR; //若栈未建立
int len=0;
int *p;
if(!S.base) return ERROR; //若栈未建立
p=--S.top;
while(p!=(S.base-1))
{
p--;
len++;
}
cout<<"栈的长度为:"<<len<<endl;
}
int head(sqs S)
{
if(!S.base) return ERROR; //若栈未建立
return *--S.top;
}
int cha(sqs S,int n)
{
if(!S.base) return ERROR; //若栈未建立
if(S.top-S.base>=S.size)//当前储存空间已满,需要分配新的空间
{
S.base=(int*)realloc(S.base,(S.size+STACKINCREMENT)*sizeof (int));
if(!S.base)
cout<<"存储空间分配失败"<<endl;
else
{
S.top=S.base+S.size;
S.size+=STACKINCREMENT;
}
}
*S.top++=n;
}
int Del(sqs S)
{
int e;
if(!S.base) return ERROR; //若栈未建立
e=*--S.top;
cout<<e<<endl;
}
int shuchu(sqs S)
{
int *p;
p=--S.top;
while(p!=(S.base-1))
{
cout<<*p--<<" ";
}
cout<<endl;
}
sqs CreatS(sqs S)
{
int n;
S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S.base) exit(0);
S.top=S.base;
S.size=STACK_INIT_SIZE;
cout<<"请输入你要的元素个数"<<endl;
cin>>n;
cout<<"请输入"<<n<<"个元素"<<endl;
for(int i=0;i<n;i++)
{
cin>>*S.top++;
}
return S;
}
int show()
{
cout<<"1----销毁栈"<<endl;
cout<<"2----将栈置空"<<endl;
cout<<"3----判断栈是否为空栈"<<endl;
cout<<"4----求栈的长度"<<endl;
cout<<"5----求栈顶元素"<<endl;
cout<<"6----插入元素,并使其成为栈顶元素"<<endl;
cout<<"7----删除栈顶元素,并返回其值"<<endl;
cout<<"8----输出栈内元素"<<endl;
cout<<"9----初始化创建并输入栈元素"<<endl;
cout<<"10---退出,输出一个负数!"<<endl;
}
int main()
{
show();
sqs S;
int n;
while(1)
{
cout<<"请输入您想要进行的操作"<<endl;
cin>>n;
if(n==1)
Destroy(S);
if(n==2)
Clear(S);
if(n==3)
Empty(S);
if(n==4)
Len(S);
if(n==6)
{
int e;
cout<<"请输入你要插入的栈顶元素值"<<endl;
cin>>e;
cha(S,e);
}
if(n==5)
head(S);
if(n==7)
Del(S);
if(n==8)
shuchu(S);
if(n==9)
S=CreatS(S);
}
}