栈和队列及其应用(实验三)_第1页
栈和队列及其应用(实验三)_第2页
栈和队列及其应用(实验三)_第3页
栈和队列及其应用(实验三)_第4页
栈和队列及其应用(实验三)_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三栈和队列及其应用实验目的及要求掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们;本实验训练的要点是“栈”的观点及其典型用法;掌握问题求解的状态表示及其递归算法,以及由递归程序到非递归程序的转化方法。实验内容编程实现栈在两种存储结构中的根本操作〔栈的初始化、判栈空、入栈、出栈等〕;应用栈的根本操作,实现数制转换〔任意进制〕;编程实现队列在两种存储结构中的根本操作〔队列的初始化、判队列空、入队列、出队列〕;利用栈实现任一个表达式中的语法检查〔括号的匹配〕。利用栈实现表达式的求值。实验主要流程、根本操作或核心代码、算法片段〔该局部如不够填写,请另加附页〕编程实现栈在两种存储结构中的根本操作〔栈的初始化、判栈空、入栈、出栈等〕;程序代码局部:顺序存储头文件:#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineINFEASTALE-1#defineOVERFLOW-2功能函数:typedefintStatus;typedefintSElemType;typedefstruct{ SElemType*base; SElemType*top;intstacklength;}Sqstack;StatusInit(Sqstack&S);StatusDestroy(Sqstack&S);StatusClear(Sqstack&S);StatusEmpty(SqstackS);intLength(SqstackS);StatusGetTop(SqstackS,SElemType&e);StatusPush(Sqstack&S,SElemTypee);StatusPop(Sqstack&S,SElemType&e);#include"stdio.h"#include"stdlib.h"#include"1.h"StatusInit(Sqstack&S){S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacklength=STACK_INIT_SIZE;returnOK;}StatusDestroy(Sqstack&S){S.base=NULL; returnOK;}StatusClear(Sqstack&S){S.base=S.top; returnOK;}StatusEmpty(SqstackS){if(S.base==S.top){returnTRUE;}elsereturnFALSE;}intLength(SqstackS){returnS.top-S.base;}StatusGetTop(SqstackS,SElemType&e){if(S.base==S.top)returnERROR;e=*(S.top-1);returnOK;}StatusPush(Sqstack&S,SElemTypee){if(S.top-S.base>=STACK_INIT_SIZE){S.base=(SElemType*)realloc(S.base,(S.stacklength+STACKINCREMENT)*sizeof(SElemType)); if(!S.base)exit(OVERFLOW); S.top=S.base+S.stacklength; S.stacklength+=STACKINCREMENT;}*S.top++=e;returnOK;}StatusPop(Sqstack&S,SElemType&e){if(S.base==S.top)exit(ERROR);e=*--S.top;returnOK;}主函数:#include"stdio.h"#include"stdlib.h"#include"1.h"intmain(){printf("是否创立空栈?\n");printf("1、创立\n2、退出\n");inta;//选择scanf("%d",&a);if(a==2)exit(ERROR);SqstackS;Init(S);intlength;printf("请确定元素个数\n");scanf("%d",&length);printf("请输入具体元素〔空格隔开〕\n");intd;//用于循环for(d=0;d<length;d++){scanf("%d",S.top); S.top++;}intb;//选择功能do{printf("请选择以下功能:\n");printf("1、销毁栈\n");printf("2、置空栈\n");printf("3、判空\n");printf("4、栈的长度\n");printf("5、取栈顶元素\n");printf("6、插入新的栈顶元素\n");printf("7、删除栈顶元素\n");printf("0、结束程序\n");scanf("%d",&b); switch(b) { case1: { Destroy(S); printf("栈已销毁"); } break; case2: { Clear(S); printf("栈已清空\n"); } break; case3: { inta;//承载返回值 a=Empty(S); if(a==1) { printf("此栈为空\n"); } elseprintf("此栈不为空\n"); } break; case4: { printf("此时栈的长度为:%d\n",Length(S)); } break; case5: { SElemTypee; GetTop(S,e); printf("此时的栈顶元素为:%d\n",e); } break; case6: { inte; printf("请输入新的栈顶元素\n"); scanf("%d",&e); Push(S,e); SElemType*p; p=S.base; printf("此时栈中元素有:\n"); while(p!=S.top) { printf("%d",*p); p++; } printf("\n"); } break; case7: { SElemTypee; Pop(S,e); SElemType*p; p=S.base; printf("被删除的栈顶元素为:%d\n",e); printf("此时栈中元素为:\n");while(p!=S.top) { printf("%d",*p); p++; } printf("\n"); } break; case0:printf("程序结束!\n");break; default:printf("输入错误\n"); }}while(b!=0&&b!=1);if(b==1){printf("假设需进行其他功能,那么要重启程序,新建空栈\n");}return0;}链式存储头文件:#defineOK1#defineERROR0#defineTRUE1#defineFALSE0typedefintStatus;typedefintSElemType;typedefstructLNode{SElemTypedata;structLNode*next;}LNode,*LinkList;StatusInit(LinkList&SL,intnum1);StatusPush(LinkList&SL,inte,int&num1);StatusPop(LinkList&SL,int&e,int&num1);StatusGet(LinkListSL);StatusClear(LinkList&SL,int&num1);voidEmply(LinkListSL);功能函数:#include"stdio.h"#include"1.h"#include"stdlib.h"StatusInit(LinkList&SL,intnum1){printf("请输入相应个数的各个具体元素〔空格隔开〕\n");SL=(LinkList)malloc(sizeof(LNode));scanf("%d",&SL->data);SL->next=NULL;for(inti=0;i<num1-1;i++){LinkLists=NULL; s=(LinkList)malloc(sizeof(LNode));scanf("%d",&s->data);s->next=SL;SL=s;}returnOK;}StatusGet(LinkListSL){returnSL->data;}StatusClear(LinkList&SL,int&num1){if(SL==NULL)printf("该栈本就为空\n");returnERROR;while(!SL){LinkListp=SL; if(p->next!=NULL){SL=p->next;free(p); } else { free(SL); }}if(SL==NULL){ num1=0;printf("该栈已清空\n");}else{printf("清空功能没有正常完成!\n");}returnOK;}voidEmply(LinkListSL){if(SL==NULL){printf("该栈为空\n");}else{printf("该栈不为空\n");}}StatusPush(LinkList&SL,inte,int&num1){LinkLists=NULL;s=(LinkList)malloc(sizeof(LNode));s->data=e;s->next=SL;SL=s;num1++;returnOK;}StatusPop(LinkList&SL,int&e,int&num1){e=SL->data;LinkLists;s=SL;SL=SL->next;free(s);num1--;returnOK;}主函数:#include"stdio.h"#include"stdlib.h"#include"1.h"intmain(){printf("是否建立链栈?\n");printf("1、建立\n");printf("2、不建立并退出程序\n");inta;//选择建立scanf("%d",&a);switch(a){case1: { LinkListSL=NULL; intnum;//用户确定的元素个数 printf("请确定元素个数\n"); scanf("%d",&num); Init(SL,num); printf("此时的链栈中元素为(从栈顶到栈底):\n"); LinkListb=SL; for(inti=0;i<num;i++) { printf("%d",b->data); b=b->next; } printf("\n"); printf("请选择以下功能:\n");intx;//用于选择功能 do { printf("1、入栈\n");printf("2、出栈\n"); printf("3、查看栈顶元素\n"); printf("4、清空栈\n"); printf("5、判空\n"); printf("6、查看栈的长度\n"); printf("0、结束程序\n"); scanf("%d",&x); switch(x) { case1: { printf("请输入新的栈顶元素\n"); intdata;//用户输入的新的栈顶元素 scanf("%d",&data); Push(SL,data,num);printf("此时的链栈中元素为(从栈顶到栈底):\n"); LinkListb=SL; for(inti=0;i<num;i++) { printf("%d",b->data); b=b->next; } printf("\n"); } break;case2: { inte;//用于承载栈顶元素 Pop(SL,e,num); printf("出栈的元素为:%d\n",e);printf("此时栈中的元素有(从栈顶到栈底):\n"); LinkListb=SL; for(inti=0;i<num;i++) { printf("%d",b->data); b=b->next; } printf("\n"); } break; case3: { printf("此时的栈顶元素为:%d\n",Get(SL)); } break; case4: { Clear(SL,num); } break; case5: { Emply(SL); } break; case6: { printf("此时栈长为:%d\n",num); } break; case0:printf("程序结束!\n"); break; default:printf("程序输入错误!\n"); } }while(x!=0); } break;case2: printf("程序结束!\n"); break;default:printf("输入错误!\n");}return0;}运行结果:〔2〕 应用栈的根本操作,实现数制转换〔任意进制〕;程序代码局部:头文件:#defineOK1#defineERROR0#define TRUE1#defineFAULSE0#defineOVERFL-1#defineFEASIBLE-2#defineINIT100#defineINCR10typedefintStatus;typedefintSElemType;typedefstruct{ SElemType*top; SElemType*base; intstacksize;}Stack;voidInit(Stack&S);voidPush(Stack&S,SElemType&e);StatusPop(Stack&S,SElemType&e);StatusEmpty(StackS);voidd_to_other(inta,intd);voidother_to_d(inta,intc);intother_to_d2(inta,intc);voidother_to_other(inta,intc,intd);voidxiaoshu_d_to_other(doublep,intd);voidd_to_other2(inta,intd);功能函数:#include"stdio.h"#include"stdlib.h"#include"1.h"//创立栈voidInit(Stack&S){S.base=(SElemType*)malloc(INIT*sizeof(SElemType));if(!S.base)exit(OVERFL);S.top=S.base;S.stacksize=INIT;}//入栈voidPush(Stack&S,SElemType&e){if(S.top-S.base>=S.stacksize){S.base=(SElemType*)realloc(S.base,(INCR+INIT)*sizeof(SElemType));if(!S.base)exit(OVERFL); S.top=S.base+S.stacksize; S.stacksize+=INCR;}*S.top++=e;}StatusPop(Stack&S,SElemType&e){if(S.base==S.top)returnERROR;e=*--S.top;returnOK;}//判空StatusEmpty(StackS){if(S.base==S.top){returnOK;}elsereturnERROR;}//十进制整数转换成其他进制voidd_to_other(inta,intd)//用户输入的十进制数的整数局部和目的进制{ StackS;Init(S); intm;while(a) { m=a%d;Push(S,m);a=a/d; } inte; printf("该数对应的%d进制为:\n",d); while(!Empty(S)) { Pop(S,e); if(e>9) { printf("%c",e-10+'A'); } else { printf("%d",e); } } printf("\n");}//其他进制数转换为十进制voidother_to_d(inta,intc)//用户输入的其他进制数和该数的进制{intb;intn,d=0,e=0;//余数其他进制数各个位对应的十进制其他进制数的第几位几位转换成十进制的和while(a){b=a%10; d++; if(b==1&&d>1) { n=1; for(inti=d;i>1;i--) { n=c*n; } e=e+n; } elseif(b==1&&d==1) { n=1; e=e+n; } elseif(b==0) { a=a/10; continue; } a=a/10;}printf("该数对应的十进制数为:\n");printf("%d\n",e);}//其他进制数转换为十进制(只用于其他功能函数内)intother_to_d2(inta,intc)//用户输入的其他进制数和该数的进制{intb;intn,d=0,e=0;//余数其他进制数各个位对应的十进制其他进制数的第几位几位转换成十进制的和while(a){b=a%10; d++; if(b==1&&d>1) { n=1; for(inti=d;i>1;i--) { n=c*n; } e=e+n; } elseif(b==1&&d==1) { n=1; e=e+n; } elseif(b==0) { a=a/10; continue; } a=a/10;}returne;}//其他进制转换为其他进制voidother_to_other(inta,intc,intd)//用户输入的数原数进制目的进制{intg;//承载该数转化后的十进制数g=other_to_d2(a,c);d_to_other(g,d);}//十进制整数转换成其他进制(只用于含小数局部的十进制整数)voidd_to_other2(inta,intd)//用户输入的十进制数的整数局部和目的进制{ StackS;Init(S); intm;while(a) { m=((int)a)%d;Push(S,m);a=a/d; } SElemTypee; printf("该数对应的%d进制为:\n",d); while(!Empty(S)) { Pop(S,e); if(e>9) { printf("%c",e-10+'A'); } else { printf("%d",e); } }}//小数局部:十进制转换成其他进制voidxiaoshu_d_to_other(doublep,intd)//小数局部和目的进制{ inta[20];//用于存放已经转化了的位 inti=0;while(p) {a[i]=(int)floor(p*d); p=p*d-(double)a[i]; i++; if(i>=20) { printf("该小数可能不能转化为有限的%d进制的数\n",d); exit(ERROR); } }StackQ;Init(Q); SElemTypee; while(i) { Push(Q,a[i-1]); i--; } while(!Empty(Q)) { Pop(Q,e); if(e>9) { printf("%c",e-10+'A'); } else { printf("%d",e); } } printf("\n");}主函数:#include"stdio.h"#include"1.h"#include"stdlib.h"intmain(){intk;do{printf("请选择一下操作\n"); printf("1、数制转换\n"); printf("2、结束程序\n"); scanf("%d",&k); if(k==1) {intc=0,d=0;//用户选择原数进制、目的数进制printf("请输入是几进制变为几进制(空格隔开)\n");scanf("%d%d",&c,&d);if(c==10) {printf("确定输入的数据的性质\n"); printf("1、整数\n"); printf("2、含有小数局部\n"); inth; scanf("%d",&h); switch(h) { case1: { printf("请输入源十进制整数\n"); inta; scanf("%d",&a); d_to_other(a,d); break; } case2: { doublea=0,p=0;//用户输入一个数〔非负〕、该数小数局部、 inti=0;//整数局部 printf("请输入十进制实数\n");scanf("%lf",&a); i=(int)a; p=a-i;d_to_other2(i,d); printf("."); xiaoshu_d_to_other(p,d); break; } default:printf("输入错误\n"); } }if(d==10) { inta; printf("请输入%d进制数:\n",c); scanf("%d",&a); other_to_d(a,c); }if(c!=10&&d!=10) {inta; printf("请输入%d进制数:\n",c); scanf("%d",&a); other_to_other(a,c,d); } } else { printf("程序结束!\n"); }}while(k!=2);return0;}运行结果:〔3〕编程实现队列在两种存储结构中的根本操作〔队列的初始化、判队列空、入队列、出队列〕;程序代码:顺序存储头文件:#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineOVERFLOW-1#defineINFEASIBLE-2#defineMAX4typedefintStatus;typedefintQElemType;typedefstruct{QElemType*base; intfront; intrear;}SqQueue;StatusInit(SqQueue&Q);StatusENQueue(SqQueue&Q,QElemTypee);StatusOUTQueue(SqQueue&Q,QElemType&e);StatusClearQueue(SqQueue&Q);StatusEmpty(SqQueueQ);功能函数:#include"stdio.h"#include"stdlib.h"#include"1.h"StatusInit(SqQueue&Q){Q.base=(QElemType*)malloc(sizeof(QElemType)*MAX);if(!Q.base)exit(OVERFLOW);Q.front=Q.rear=0;returnOK;}StatusENQueue(SqQueue&Q,QElemTypee){if((Q.rear+1)%MAX==Q.front){returnERROR;}Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAX;returnOK;}StatusOUTQueue(SqQueue&Q,QElemType&e){if(Q.rear==Q.front)returnERROR;e=Q.base[Q.front];Q.front=(Q.front+1)%MAX;returnOK;}StatusClearQueue(SqQueue&Q){while(Q.rear!=Q.front){Q.front=(Q.front+1)%MAX;}returnOK;}StatusEmpty(SqQueueQ){if(Q.front!=Q.rear)returnERROR;returnOK;}主函数:#include"stdio.h"#include"1.h"intmain(){printf("是否创立队列?\n");printf("1、创立\n");printf("2、结束程序\n");inta;scanf("%d",&a);if(a==2){return0;}else{SqQueueQ; if(Init(Q)==OK) { printf("队列初始化完毕,最大容量为%d\n",MAX-1); } else { printf("队列初始化失败,程序结束\n"); returnERROR; } intb; do { printf("选择以下操作\n"); printf("1、入队\n");printf("2、出队\n"); printf("3、清空队\n"); printf("4、判空队\n"); printf("0、结束程序\n"); scanf("%d",&b); switch(b) { case1: { printf("请输入要插入的元素个数\n"); intnum; scanf("%d",&num); printf("请输入要插入的元素:\n"); QElemTypee; intresult; for(inti=0;i<num;i++) { scanf("%d",&e); result=ENQueue(Q,e); if(result==ERROR) { printf("队列已满,第%d个元素无法再存入\n",i+1); } } inta=Q.front,b=Q.rear;printf("此时,队列中的元素分别为:\n"); while(a!=b) { printf("%d",Q.base[a]); a=(a+1)%MAX; } printf("\n"); printf("\n"); printf("\n"); printf("\n"); break; } case2: { QElemTypee; intresult; result=OUTQueue(Q,e); if(result==ERROR) { printf("此队列为空,当前没有元素\n"); } else { printf("此时头元素为:%d\n",e); }inta=Q.front,b=Q.rear;printf("此时,队列中的元素分别为:\n"); while(a!=b) { printf("%d",Q.base[a]); a=(a+1)%MAX; } printf("\n"); printf("\n"); printf("\n"); printf("\n"); break; } case3: { intresult; result=ClearQueue(Q); if(result==OK) { printf("队列已清空\n"); } else { printf("队列清空失败\n"); } printf("\n"); printf("\n"); printf("\n"); break; } case4: { intresult; result=Empty(Q); if(result==OK) { printf("此队列为空\n"); } else { printf("此队列不为空\n"); } printf("\n"); printf("\n"); printf("\n"); break; } case0: printf("程序结束!\n"); break;default:printf("输入错误!\n"); } }while(b!=0);}}链式存储头文件:#defineOK1#defineERROR0#defineOVERFLOW-1typedefintStatus;typedefintQElemType;typedefstructQNode{structQNode*next;QElemTypedata;}QNode,*Queue;typedefstruct{Queuefront;Queuerear;}LinkQueue;StatusInit(LinkQueue&Q);voidENQueue(LinkQueue&Q,QElemTypee);StatusDEQueue(LinkQueue&Q,QElemType&e);StatusClear(LinkQueue&Q);StatusEmpty(LinkQueueQ);功能函数:#include"stdio.h"#include"stdlib.h"#include"1.h"StatusInit(LinkQueue&Q){Q.front=Q.rear=(Queue)malloc(sizeof(QNode));if(!Q.front)exit(OVERFLOW);Q.front->next=NULL;returnOK;}voidENQueue(LinkQueue&Q,QElemTypee){Queues;Queuep=Q.rear;s=(Queue)malloc(sizeof(QNode));if(!s){ printf("分配存储空间失败\n"); exit(OVERFLOW);}s->data=e;s->next=NULL;Q.rear->next=s;Q.rear=s;p->next=s;}StatusDEQueue(LinkQueue&Q,QElemType&e){if(Q.front==Q.rear){returnERROR;}e=Q.front->next->data;Queues=Q.front->next;Q.front->next=s->next;free(s);returnOK;}StatusClear(LinkQueue&Q){Queues;while(Q.front->next!=Q.rear){s=Q.front->next;Q.front->next=s->next; free(s);}s=Q.rear;free(s);Q.rear=Q.front;Q.front->next=NULL;returnOK;}StatusEmpty(LinkQueueQ){if(Q.front==Q.rear&&Q.front->next==NULL){returnOK;}else{returnERROR;}}主函数:#include"stdio.h"#include"stdlib.h"#include"1.h"intmain(){printf("是否建立队列\n");printf("1、建立\n");printf("2、不建立并结束程序\n");inta;scanf("%d",&a);if(a==1){ intnum; LinkQueueQ; if(Init(Q)==1) { printf("队列初始化成功\n"); } else { printf("队列初始化失败,程序结束\n"); exit(1); } printf("请选择一下功能\n"); intb; do { printf("1、入队列\n"); printf("2、出队列\n"); printf("3、清空队列\n"); printf("4、队列判空\n"); printf("0、结束程序\n"); scanf("%d",&b); switch(b) { case1: { printf("请确定入队元素个数\n"); scanf("%d",&num);printf("请输入具体元素\n"); inte; for(inti=0;i<num;i++) {scanf("%d",&e); ENQueue(Q,e); }printf("此时的队列中元素分别为:\n"); Queuep=Q.front->next; for(intj=0;j<num;j++) { printf("%d",p->data); p=p->next; } printf("\n");printf("\n"); break; } case2: { QElemTypee; intresult; result=DEQueue(Q,e); if(result==OK) { printf("队列中头元素为:%d\n",e); num--;printf("此时的队列中元素分别为:\n"); Queuep=Q.front->next; for(intj=0;j<num;j++) { printf("%d",p->data); p=p->next; } printf("\n");printf("\n"); } else { printf("此时的队列为空,没有元素能取出\n"); returnERROR; } printf("\n");printf("\n"); break; } case3: { if(Clear(Q)==OK) { printf("队列已清空\n"); } else { printf("队列清空失败\n"); } printf("\n");printf("\n"); break; } case4: { if(Empty(Q)==OK) { printf("该队列为空\n"); } else { printf("该队列不为空\n"); } printf("\n");printf("\n"); break; } case0: printf("程序结束\n"); break; default:printf("输入错误\n"); } }while(b!=0);}elseif(a==2){printf("程序结束\n"); return0;}else{printf("输入错误\n"); exit(1);}return0;}运行结果:〔4〕利用栈实现任一个表达式中的语法检查〔括号的匹配〕。程序代码:头文件:#defineOK1#defineERROR0#defineOVERFLOW-1#definesize20typedefintStatus;typedefcharSElemType;typedefstruct{SElemType*base;SElemType*top;intStacksize;}SqStack;StatusInit(SqStack&s);StatusENStack(SqStack&s,SElemTypee);StatusDEStack(SqStack&s,SElemType&e);功能函数:#include"stdio.h"#include"stdlib.h"#include"1.h"StatusInit(SqStack&s){s.base=(SElemType*)malloc(sizeof(SElemType)*size);if(!s.base)exit(OVERFLOW);s.top=s.base;returnOK;}StatusENStack(SqStack&s,SElemTypee){if((s.top-s.base)>=size){SElemType*newbase; newbase=(SElemType*)realloc(s.base,sizeof(SElemType)*(s.Stacksize+size)); if(!newbase)exit(OVERFLOW); s.base=newbase; s.Stacksize+=size;}*s.top++=e;returnOK;}StatusDEStack(SqStack&s,SElemType&e){if(s.base==s.top){returnERROR;}e=*--s.top;returnOK;}主函数:#include"stdio.h"#include"stdlib.h"#include"1.h"intmain(){SqStacks;s.Stacksize=size;if(Init(s)==OK){printf("已经成功初始化一个空栈\n");}else{printf("栈的初始化失败\n"); exit(ERROR);}printf("请输入要检测的表达式〔各个符号间用空格隔开,以#表示输入完成〕\n");SElemTypea[size];for(inti=0;i<size;i++){scanf("%c",&a[i]); if(a[i]=='#') { break; } if(a[i]=='('||a[i]=='['||a[i]=='{') { ENStack(s,a[i]); } if(a[i]==')'||a[i]==']'||a[i]=='}') { SElemTypee; DEStack(s,e); if(a[i]==')') { if(e!='(') { printf("该表达式括号匹配不正确\n"); returnERROR; } } if(a[i]==']') { if(e!='[') { printf("该表达式括号匹配不正确\n"); returnERROR; } } if(a[i]=='}') { if(e!='{') { printf("该表达式括号匹配不正确\n"); returnERROR; } } }}printf("该表达式括号匹配正确\n");returnOK;}运行结果:〔5〕利用栈实现表达式的求值。未完成头文件:#defineOK1#defineERROR0#defineOVERFLOW-1#definesize20typedefintStatus;typedefcharSElemType;typedefstruct{SElemType*base;SElemType*top;intstacksize;}SqStack;StatusInit(SqStack&S);StatusENStack(SqStack&S,SElemTypee);StatusDEd_Stack(SqStack&S,SElemType*&e);StatusDEs_Stack(SqStack&S,SElemType&e);SElemTypeGetStack(SqStackS,SElemType&e);SElemTypecmp(SElemTypee1,SElemTypee2);功能函数:#include"stdio.h"#include"stdlib.h"#include"1.h"//栈的初始化StatusInit(SqStack&S){S.base=(SElemType*)malloc(sizeof(SElemType)*size);if(!S.base){ printf("存储空间分配失败\n"); exit(OVERFLOW);}S.top=S.base;S.stacksize=size;returnOK;}//入栈StatusENStack(SqStack&S,SElemTypee){if(S.top-S.base+1>=S.stacksize){SElemType*newbase; newbase=(SElemType*)realloc(S.base,sizeof(SElemType)*(S.stacksize+size)); if(!newbase) { printf("新增存储空间失败\n"); exit(OVERFLOW); } S.base=newbase; S.top=S.base+S.stacksize-1; S.stacksize+=size;}*S.top++=e;returnOK;}//数值出栈StatusDEd_Stack(SqStack&S,SElemType*&e){if(S.base==S.top){printf("此时栈为空\n"); returnERROR;}e=--S.top;returnOK;}//算符出栈StatusDEs_Stack(SqStack&S,SElemType&e){if(S.base==S.top){printf("此时栈为空\n"); returnERROR;}e=*--S.top;returnOK;}//查看栈顶元素SElemTypeGetStack(SqStackS,SElemType&e){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论