数据结构括号匹配检验 1、数据结构与算法课程设计报告题目:括号匹配检验 四算法思想 利用栈来判断括号是否匹配时,遇到左括号就进栈,遇到右括号则左括号出栈,代表这对括号匹配,如果右括号进栈时,栈为空,则说明缺少左括号,若表达式扫描完栈为空,则说明表达式的括号匹配,否则说明表达式缺少左括号。五算法设计· 程序流程图开始给定判断的表达式检验函数左括号右括号入栈找栈顶素是否与它配配对删除栈顶,继续不配对,则不匹配栈空匹配栈不空不匹配结束· 算法用到的抽象数据类型定义:1ADT Stack 数据对象:D=ai|aiElemSet,i=1,2,n, n0 数据关系:R1=<ai-1,ai>|ai- 2、1,aiD,i=2, ,n 约定an端为栈顶,a1端为栈底。 基本操作:(1) InitStack(&S);操作结果:构造一个空栈S。(2) StackEmpty(S);初始条件:栈S已存在。操作结果:若栈S为空栈,则返回TURE,否则FALUSE。(3) StackFull(S);初始条件:栈S已存在。操作结果:若栈S为满,则返回TURE,否则FALUSE.(4) GetTop(S,&e);初始条件:栈S已存在且非空。操作结果:用e返回S的栈顶素。(5) Push(&S,e);初始条件:栈S已存在。操作结果:插入素e为新的栈顶素。(6) Pop(&S,& 3、amp;e);初始条件:栈S已存在且非空。操作结果:删除S的栈顶素,并用e返回其值。ADT Stack · 算法中函数编号及功能要求:1. voidInitStack(SeqStack*S):初始化,构造一个空栈S2. IsEmpty(SeqStack *S):判断栈S为空栈时返回值为真,反之为假3. IsFull(SeqStack *S):判断栈S为满栈时返回值为真,反之为假4. Push(SeqStack *S,StackElementType x):插入素x为新的栈顶素5. Pop(SeqStack *S,StackElementType *x):将栈S的栈顶素弹出,放 4、到x所指的存储空间中6. GetTop(SeqStack *S,StackElementType *x):将栈S的栈顶素弹出,放到x所指的存储空间中,但栈顶指针保持不变7. Match(char ch,char str):进行括号的匹配8. BracketMatch(char *str): str中为输入的字符串,利用堆栈技术来检查该字符串中的括号是否匹配· 函数之间的调用关系(子程序编号见上): 主函数调用函数8 函数8调用函数1、2、4、5、6、7 六C语言实现的程序清单 /*括号匹配的检验*/#define TRUE 1#define FALSE 0#define Stack 5、_Size 50#define StackElementType char#include “stdio.h”/*顺序栈*/typedef structStackElementType elemStack_Size; /*用来存放栈中素的一维数组*/int top; /*用来存放栈顶素的下标,top为-1表示空栈*/SeqStack;/*初始化*/void InitStack(SeqStack *S)/*构造一个空栈S*/ S->top = -1;/*判栈空*/int IsEmpty(SeqStack *S) /*判断栈S为空栈时返回值为真,反之为假*/retur 6、n(S->top=-1?TRUE:FALSE);/*判栈满*/int IsFull(SeqStack *S)/*判断栈S为满栈时返回值为真,反之为假*/return(S->top=Stack_Size-1?TRUE:FALSE);int Push(SeqStack *S,StackElementType x)if(S->top=Stack_Size-1) return(FALSE); /*栈已满*/S->top+;S->elemS->top = x;return(TRUE);int Pop(SeqStack *S,StackElementType *x) / 7、* 将栈S的栈顶素弹出,放到x所指的存储空间中 */if(S->top = -1) /*栈为空*/return(FALSE);else *x = S->elemS->top;S->top-; /* 修改栈顶指针 */ return(TRUE);/*取栈顶素。*/int GetTop(SeqStack *S,StackElementType *x) /* 将栈S的栈顶素弹出,放到x所指的存储空间中,但栈顶指针保持不变 */if(S->top = -1) /*栈为空*/return(FALSE);else *x = S->elemS->top; re 8、turn(TRUE);/*进行匹配*/int Match(char ch,char str)if(ch='(‘ && str=’)’)return TRUE;else if(ch=” && str=”)return TRUE;else if(ch=” && str=”)return TRUE;else return FALSE;void BracketMatch(char *str) /* str中为输入的字符串,利用堆栈技术来检查该字符串中的 9、括号是否匹配*/SeqStack S; int i; char ch;InitStack(&S);for(i=0; stri!=’0′ i+) /*对字符串中的字符逐一扫描*/ switch(stri) case ‘(‘:case ”:case ”:Push(&S,stri); break; case ‘)’: case ”: case ”:if(IsEmpty(&S) printf(“n右括号多余!n”); return; elseGetTop(&S,&ch);if(Match(ch,stri) /*用Match判断两个括号是否匹配*/Pop(&S,&ch); /*已匹配的左括号出栈*/ else printf(“n对应的左右括号不同类!n”); return; /*switch*/*for*/if(IsEmpty(&S)printf(“n括号匹配!n”);elseprintf(“n左括号多余!n”);void main()char str10
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/40142.html