..数据结构实验报告——实验5学号:姓名:得分:______________一、实验目的1、复习栈的逻辑结构、存储结构及基本操作;2、掌握顺序栈、链栈。二、实验内容1、(必做题)假设栈中数据元素类型是字符型,请采用顺序栈实现栈的以下基本操作:(1)StatusInitStack(&S)//构造空栈S;(2)StatusPush(&S,e)//元素e入栈S;(3)StatusPop(&S,&e)//栈S出栈,元素为e。2、(必做题)请实现:对于一个可能包括括号{}、[]、()的表达式,判定其中括号是否匹配。三、算法描述(采用自然语言描述)1.构建空栈s,输入元素,将元素依次入栈,遍历打印栈中元素,输出栈顶元素,打印被输出的元素,遍历打印栈中元素。2.构建空栈,输入表达式,使用函数count判断表达式中括号是否匹配,如果匹配输出匹配正确,不匹配则输出匹配错误。四、详细设计1...2.五、程序代码开始构建空栈s结束输入表达式输出匹配正确开始构建空栈s将元素依次入栈输出栈顶元素结束输入元素遍历打印栈中元素使用函数count判断表达式中括号是否匹配输出匹配错误遍历打印栈中元素打印被输出的元素..(给出必要注释)1.#includestdio.h#includestdlib.h#defineMaxSize100typedefstructnode*SqStack;typedefcharElemType;structnode//栈的数据结构{inttop;ElemTypedata[MaxSize];};voidStatusInitStack(SqStack*L)//构造空栈S{(*L)=(SqStack*)malloc(sizeof(SqStack));(*L)-top=-1;}voidStatusPush(SqStackL,ElemTypee)//元素e入栈S{if(L-top==MaxSize-1){printf(栈满\n);}else{L-top++;L-data[L-top]=e;}}voidStatusPop(SqStackL,ElemType*e)//栈S出栈,元素为e{if(L-top==-1){..printf(栈空\n);}else{*e=L-data[L-top];L-top--;}}voidPrint(SqStackL)//遍历输出{inti=0;for(i=0;i=L-top;i++){printf(%c,L-data[i]);}printf(\n);}intmain(){SqStacks;ElemTypee;ElemType*y;y=&e;StatusInitStack(&s);printf(输入入栈数据:);scanf(%c,&e);while(e!='\n'){StatusPush(s,e);scanf(%c,&e);}printf(\n目前栈中元素为:\n);Print(s);StatusPop(s,y);printf(\n出栈元素是:%c\n,*y);printf(\n栈顶元素出栈后,栈为:\n);Print(s);..}2.#includestdio.h#includemalloc.h#includestring.h#defineSTACK_INIT_SIZE10#defineSTACK_GROW_SIZE5#defineELEMTYPEchartypedefstruct/*建立一个栈的首结点*/{ELEMTYPE*base;ELEMTYPE*top;intstacksize;}SpStack;intInitStack(SpStack*s)/*建立空的栈并返回首地址*/{s-base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE)));if(!s-base)return0;s-top=s-base;s-stacksize=STACK_INIT_SIZE;return1;}intStackEmpty(SpStack*s)/*判断栈是否为空*/{if(s-top==s-base)return1;elsereturn0;}intPush(SpStack*s,ELEMTYPEe)/*往栈顶插入元素即进栈*/{if(s-top-s-base=s-stacksize)/*判断是否栈满*/{s-base=((ELEMTYPE*)realloc(s-base,(s-stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE)));if(!s-base)return0;..s-stacksize+=STACK_GROW_SIZE;s-top=s-base+s-stacksize;}*s-top++=e;return1;}intPop(SpStack*s,ELEMTYPE*e)/*让栈顶元素依次输出即出栈*/{if(StackEmpty(s))return0;*e=*(--s-top);return1;}intCount(SpStack*s){ELEMTYPEe[STACK_INIT_SIZE*2];ELEMTYPEe1;inti;InitStack(s);gets(e);if('\n'==e[strlen(e)-1])e[strlen(e)-1]=0;for(i=0;e[i]!='\0';i++){switch(e[i]){case'(':case'[':case'{':Push(s,e[i]);break;case')':case']':case'}':if(StackEmpty(s)){printf(匹配错误\n);return0;}elsePop(s,&e1);break;..}}if(StackEmpty(s)){printf(匹配正确\n);return1;}else{printf(匹配错误\n);return0;}}intmain(){SpStacks;printf(请输入一个可能包括括号{}、[]、()的表达式\n);Count(&s);free(s.base);return0;}六、测试和结果(给出测试用例,并给出测试结果)1.2...七、用户手册(告诉用户如何使用程序,使用注意事项等)1.第二个程序输入时需注意表达式不得长于10个单位;2.第一个程序输入时需注意表达式不得长于100个单位;单纯的课本内容,并不能满足学生的需要,通过补充,达到内容的完善教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。