当前位置:文档之家› 顺序栈的实现

顺序栈的实现

编写一个程序,实现顺序栈的各种基本运算,并在基础上完成以下功能:
1)初始化顺序栈;
2)判断顺序栈是否为空;
3)依次进栈元素1,2,3,4,5;
4)判断顺序栈是否为空;
5)输出栈长度;
6)输出从栈顶到栈底的元素;
7)读出栈顶元素;
8)删除栈顶元素;
9)输出从栈顶到栈底的元素;
10)判断顺序栈是否为空;
11)释放栈。

代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#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;
}。

相关主题