📄 excise3.cpp
字号:
//*****************************************************************************************
//程序作者:王国顺
//学 号:040630418
//题 目:调试顺序结构栈的基本操作(书本P44)
//*****************************************************************************************
//函数结果状态代码
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct {
int *base;
int *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestroyStack(SqStack &S)
{
free(S.base);
S.base=NULL;
return OK;
}
Status ClearStack(SqStack &S)
{
S.top=S.base;
return OK;
}
Status StackEmpty(SqStack S)
{
if(S.top==S.base)
return TRUE;
else
return FALSE;
}
int StackLength(SqStack S)
{
if(!S.base) return ERROR;
S.stacksize=S.top-S.base;
return S.stacksize;
}
Status GetTop(SqStack S,int &e)
{
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return e;
}
Status Push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,int &e)
{
if(S.top==S.base) return ERROR;
e=*--S.top;
return e;
}
void main()
{
int i,j,e,*p;
SqStack S;
InitStack(S);
if(S.base)
cout<<"创建栈成功!"<<endl;
cout<<"下面将插入元素!"<<endl;
cout<<"请输入你要插入的元素的个数:";
cin>>i;
for(j=0;j<i;j++)
{
cout<<"请输入第"<<j+1<<"个数:";
cin>>e;
Push(S,e);
cout<<endl;
}
cout<<"栈的长度是:"<<StackLength(S)<<endl;
cout<<"下面将输出你输入后的栈!"<<endl;
p=S.top;
j=i;
while(p!=S.base&&j!=0)
{
p--;
cout<<"第"<<j<<"个元素是:"<<*p<<endl;
j--;
}
cout<<"请输入你想要删除的元素个数:";
cin>>i;
while(i>StackLength(S))
{
cout<<"你的输入有误,请重新输入!"<<endl;
cout<<"请输入你想要删除的元素个数:";
cin>>i;
}
for(j=0;j<i;j++)
cout<<"你删除的第"<<j+1<<"个元素是:"<<Pop(S,e)<<endl;
if(!StackEmpty(S))
{
cout<<"修改后的栈顶元素是:"<<GetTop(S,e)<<endl;
cout<<"下面将从栈顶到栈底输出修改后的栈!"<<endl;
p=S.top;
j=1;
while(p!=S.base)
{
p--;
cout<<"第"<<j<<"个元素是:"<<*p<<endl;
j++;
}
}
cout<<"下面将清空栈!"<<endl;
ClearStack(S);
if(StackEmpty(S))
cout<<"清空栈成功!"<<endl;
else
cout<<"你的操作有误,栈未被清空!"<<endl;
cout<<"下面将销毁栈!"<<endl;
DestroyStack(S);
if(!S.base)
cout<<"销毁栈成功!"<<endl;
else
cout<<"你的操作有误,栈未被销毁!"<<endl;
cout<<"程序结束!"<<endl;
}
/*程序结果
创建栈成功!
下面将插入元素!
请输入你要插入的元素的个数:5
请输入第1个数:1
请输入第2个数:2
请输入第3个数:3
请输入第4个数:4
请输入第5个数:5
栈的长度是:5
下面将输出你输入后的栈!
第5个元素是:5
第4个元素是:4
第3个元素是:3
第2个元素是:2
第1个元素是:1
请输入你想要删除的元素个数:2
你删除的第1个元素是:5
你删除的第2个元素是:4
修改后的栈顶元素是:3
下面将从栈顶到栈底输出修改后的栈!
第1个元素是:3
第2个元素是:2
第3个元素是:1
下面将清空栈!
清空栈成功!
下面将销毁栈!
销毁栈成功!
程序结束!
Press any key to continue*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -