顺序栈的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档