顺序栈的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编写一个程序,实现顺序栈的各种基本运算,并在基础上完成以下功能:
1)初始化顺序栈;
2)判断顺序栈是否为空;
3)依次进栈元素1,2,3,4,5;
4)判断顺序栈是否为空;
5)输出栈长度;
6)输出从栈顶到栈底的元素;
7)读出栈顶元素;
8)删除栈顶元素;
9)输出从栈顶到栈底的元素;
10)判断顺序栈是否为空;
11)释放栈。
代码如下:
#include
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define Null 0
#define MaxSize 50
typedef char SElemType;
typedef int Status;
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)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestroyStack(SqStack &S){
free(S.base);
S.base=Null;
S.top=Null;
S.stacksize=Null;
return OK;
}
Status StackEmpty(SqStack S){
if(S.top==S.base)return TRUE;
else return FALSE;
}
int StackLength(SqStack S){
return S.top-S.base;
}
Status GetTop(SqStack S,SElemType &e){
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return OK;
}
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)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e){
if(S.top==S.base)return ERROR;
e=*--S.top;
return OK;
}
int StackTraverse(SqStack S,Status(*visit)(SElemType)){ while(S.top>S.base)
visit(*S.base++);
printf("\n");
return OK;
}
int visit(SElemType e){
printf("%d ",e);
return OK;
}
int main(){
SqStack S;
SElemType e;
printf("构造一个空栈\n");
InitStack(S);
printf("栈是否为空:");
if(StackEmpty(S)){
printf("该栈为空\n");
}
else{
printf("该栈不为空\n");
}
printf("依次插入元素1,2,3,4\n");
Push(S,1);
Push(S,2);
Push(S,3);
Push(S,4);
printf("现在的栈为:");
StackTraverse(S,visit);
printf("栈的长度是%d\n", StackLength(S));
GetTop(S,e);
printf("现在的栈顶元素为e=%d\n",e);
Pop(S,e);
printf("弹出的栈顶元素 e=%d\n",e);
printf("插入元素5\n");
Push(S,5);
printf("现在的栈顶元素为:");
printf("栈的长度是%d\n", StackLength(S));
printf("现在的栈为:");
StackTraverse(S,visit);
printf("释放栈");
DestroyStack(S);
printf("\n");
return OK;
}