资源描述:
《栈与队列操作的实现完整版-数据结构版》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include"stdio.h"#include"stdlib.h"#include"string.h"typedefintStatus;//定义函数类型为int型#defineOK1//定义OK为1#defineERROR0//定义ERROR为0/**********************************************************************************************************栈的顺序式存储**********************************/ty
2、pedefcharSElemType[20];//定义SElemType类型为char型数组#defineSTACK_INIT_SIZE100//栈的存储空间初始分配量#defineSTACKINCREMENT10//栈的存储空间分配增量typedefstruct{SElemType*base;//在栈构造之前和销毁之后,base的值为NULLSElemType*top;//栈顶指针intstacksize;//当前已分配的储存空间,以元素为单位}SqStack;StatusInitStack(SqStack&S){//构造一个空战S.base=
3、(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base){printf("储存分配失败!");exit(ERROR);}S.top=S.base;S.stacksize=STACK_INIT_SIZE;printf("t建栈成功!");returnOK;}//InitStackStatusStackLength(SqStackS){//返回S的元素个数returnS.top-S.base;}//StackLengthStatusStackTravers
4、e(SqStackS){//若栈不为空,输出栈中的所有元素if(S.top==S.base){printf("栈目前为空!");returnERROR;}printf("栈中目前的数据如下所示:");printf("ttop->");while(S.top!=S.base){S.top--;if(S.top==S.base){printf("t%-7s%s","base->",*S.top);}else{printf("t%7s%s","",*S.top);}}returnOK;}//StackTraverseS
5、tatusPush(SqStack&S,SElemTypee){//插入元素e为新的栈顶元素charstr[10];//中间变量while(strcmp(str,"n")!=0){//用作连续入栈if(S.top-S.base>=S.stacksize){//栈满,追加储存空间S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base){printf("储存分配失败!");exit(ERROR);}S.top=S.
6、base+S.stacksize;//改变栈顶S.stacksize+=STACKINCREMENT;//当前已分配的储存空间增加}printf("请输入元素:");scanf("%s",e);strcpy(*S.top++,e);//将新的元素赋给栈顶,栈顶上移printf("入栈成功");printf("继续入栈/退出:y/n:");while(1){//选择是否继续入栈,若否,则入栈结束scanf("%s",str);if(strcmp(str,"y")==0
7、
8、strcmp(str,"n")==0){break;}else{pri
9、ntf("选择错误,请重新选择:");}}}returnOK;}//PushStatusPop(SqStack&S,SElemType&e){//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORif(S.top==S.base){printf("It'sEmpty!");returnERROR;}strcpy(e,*--S.top);printf("出栈成功");printf("出栈元素为:%s",e);returnOK;}//PopStatusClearStack(SqStack&S){//把S置为
10、空栈,让栈顶和栈底相等,当前已分配的储存空间等于初始储存空间S.top=S.base;S.stacksize=STACK_INIT_SI