3栈的顺序结构的基本操作
#include
#include
using namespace std;
#define TRUE 1
#define FALSE 0
#define ok 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int SElemType;
#define STACK_INIT_SIZE 100//存储空间初始化分配量;
#define STACKINCREMENT 10//存储空间分配增量;
typedef struct{
SElemType *base;//在栈构造之前和销毁之后,base的值为NULL
SElemType *top;//栈顶指针
int stacksize;//当前已分配的存储空间,以元素为单位;
int StackLength;
}SqStack;
Status InitStack_Sq(SqStack &S){//初始化操作;
S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));//分配基本容量;
if(S.base==NULL) return ERROR;//设置栈顶指针和栈底指针相同,均指向栈底;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;//设置栈的当前容量为基本容量;
return ok;
}//InitStack_Sq;
Status Push_Sq(SqStack &S,SElemType e){//插入元素e为新的栈顶元素;
if(S.top-S.base>=S.stacksize)
{//栈满,追加存储空间;
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)exit (OVERFLOW);//分配失败;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top=e;
S.top++;
return ok;
}//Push_Sq;
Status Pop_Sq(SqStack &S,SElemType &e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回ok;否则返回ERROR;
if(S.top==S.base)return ERROR;
e=*(S.top-1);// e=*--s.top;
S.top--;
return ok;
}//Pop_Sq;
Status GetTop_Sq(SqStack S,SElemType &e){
//若栈不为空,则用e返回S的栈顶元素,并返回;否则返回ERROR;
if(S.top==S.base)return ERROR;//判空;
e=*(S.top-1);
return ok;
}//GetTop_Sq;
Status StackTraverse_Sq(SqStack S){//遍历;
int i;
if(S.top==S.base) return ERROR;
for(i=0;i<(S.top-S.base);i++)
cout<
return ok;
}//StackTraverse_Sq;
Status StackEmpty_Sq(SqStack S){//判空;
if(S.top==S.base) cout<<"是空栈!"<
else
cout<<"不是空栈!"<
return ok;
}//StackEmpty_Sq;
int main()
{
SqStack S;
SElemType e1,e2;
int a,b,n,i,k;
InitStack_Sq(S);
cout<<"输入初始化栈的元素个数: ";
cin>>n;
cout<<"输入初始化元素: ";
for(i=1;i<=n;i++){
cin>>a;
Push_Sq(S,a);
}
while(true){
cout<<"栈操作: 1.入栈;2.出栈;3.读取栈顶元素;4.遍历;5.判空;6.退出"<
cout<<"选择您需要进行的栈操作: ";
cin>>a;
if(a==1){
cout<<"输入入栈的元素:";
cin>>b;
Push_Sq(S,b);
cout<<"当前栈的元素为:"<
StackTraverse_Sq(S);
cout<
}
if(a==2){
k=Pop_Sq(S,e1);
if(!k)return ERROR;
else
cout<<"元素"<
}
if(a==3){
k=GetTop_Sq(S,e2);
if(!k)return ERROR;
else
cout<<"读取栈顶元素"<
}
if(a==4){
StackTraverse_Sq(S);
cout<
}
if(a==5){
StackEmpty_Sq(S);
}
if(a==6)break;
}
return 0;
}
本文来源:https://www.2haoxitong.net/k/doc/b14be32b59eef8c75fbfb365.html
文档为doc格式