文档详情

数据结构实验五.doc

发布:2019-09-05约2.82千字共5页下载文档
文本预览下载声明
PAGE 1 数据结构实验报告——实验5 实验目的 复习栈的逻辑结构、存储结构及基本操作; 掌握顺序栈、链栈。 二、实验内容 请实现:对于一个可能包括括号{}、[]、()的表达式,判定其中括号是否匹配。 三、算法描述 (采用自然语言描述) 从键盘输入一个字符串表达式,遇到’{‘ 、’[‘ 或者 ‘(‘ 入栈,遇到’}‘ 、’]‘ 或者 ‘)‘ 出栈,如果最后盏空,证明匹配,否则不匹配。 四、详细设计 (画出程序流程图) 开始 开始 输入表达式 输入表达式 是否是左括号 是否是左括号 N N Y Y 出栈 出栈 入栈 入栈 N表达式是否结束 N 表达式是否结束 Y Y 结束 结束 N五、程序代码 N (给出必要注释) #includestdio.h #includemalloc.h #includestring.h #define STACK_INIT_SIZE 10 #define STACK_GROW_SIZE 5 #define ELEMTYPE char #define OK 1 #define ERROR 0 typedef struct { ELEMTYPE *base; ELEMTYPE *top; int stacksize; }SpStack; int InitStack(SpStack *s) { s-base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE))); if (!s-base) return ERROR; s-top=s-base; s-stacksize=STACK_INIT_SIZE; return OK; } int StackEmpty(SpStack *s) { if (s-top==s-base) return OK; else return ERROR; } int Push(SpStack *s,ELEMTYPE e) { if (s-top-s-base=s-stacksize) { s-base=((ELEMTYPE*)realloc(s-base,(s-stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE))); if (!s-base) return ERROR; s-stacksize+=STACK_GROW_SIZE; s-top=s-base+s-stacksize; } *s-top++=e; return OK; } int Pop(SpStack *s,ELEMTYPE *e) { if (StackEmpty(s)) return ERROR; *e=*(--s-top); return OK; } int Comp(ELEMTYPE a,ELEMTYPE b) { if ((a==(b!=))||(a==[b!=])||(a=={b!=})) return ERROR; else return OK; } int Count(SpStack *s) { ELEMTYPE e[STACK_INIT_SIZE*2]; ELEMTYPE e1; int i; InitStack(s); fgets(e,STACK_INIT_SIZE*2,stdin); if (\n==e[strlen(e)-1]) e[strlen(e)-1]=0; printf(%s\n,e); for (i=0;e[i]!=\0;i++) { switch (e[i]) { case (: case [: case {: Push(s,e[i]); break; case ): case ]: case }: if (StackEmpty(s)) {
显示全部
相似文档