顺序栈(C++)
#include "iostream.h"
#include "malloc.h"
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int Status;
typedef int SElemType;
//顺序栈的定义
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//---------------以下为基本操作
//构造一个栈
Status InitStack(SqStack &S)
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof( SElemType ));
if(!S.base)
{
cout<<"存储空间分配失败!"<<endl;
return 0;
}
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 1;
}
//初始化一个栈
Status Input(SqStack &S,int n)
{
int i;
if(n>0)
{
cout<<"请输入第"<<1<<"个元素的值"<<endl;
cin>>*S.base;
S.top++;
for( i=2;i<=n;i++)
{
cout<<"请输入第"<<i<<"个元素的值"<<endl;
cin>>*S.top;
S.top++;
}
return 1;
}
else
{
cout<<"输入数据不合法!"<<endl;
return 0;
}
}
//查看栈顶元素
Status GetTop(SqStack S,SElemType &e)
{
if(S.top==S.base)
{
cout<<"目前为空栈,无栈顶元素!"<<endl;
return 0;
}
e=*(S.top-1);
cout<<"当前栈顶元素为"<<e<<endl;
return 1;
}
//向栈顶插入一个元素
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
{
cout<<"执行插入操作分配存储空间时失败!"<<endl;
return 0;
}
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
//删除栈顶元素
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)
{
cout<<"目前为空栈,无法执行删除栈顶元素的操作!"<<endl;
return 0;
}
e=*--S.top;
return 1;
}
//--------------主函数
void main()
{
cout<<"\n--------------------顺序栈-----------------"<<endl;
SqStack stc;
InitStack(stc);
int num;
cout<<"请输入初始时欲在栈中放入的元素的个数"<<endl;
cin>>num;
cout<<endl;
Input(stc,num);
SElemType value;
cout<<endl;
GetTop(stc,value);
cout<<"请输入欲插入元素的值"<<endl;
cin>>value;
cout<<endl;
Push(stc,value);
cout<<"插入的元素的值为"<<value<<endl;GetTop(stc,value);
cout<<endl;
Pop(stc,value);
cout<<"刚刚删除的栈顶元素的值为"<<value<<endl;GetTop(stc,value);
}