数据结构课程设计---括号匹配
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1.1 题目....................................................
2...............
1.2 问题....................................................
2...............
2 设计...................................................... 2 ...............
2.1 存储结构设计............................................ 2 .............
4 对设计和编码的讨论和分析................................. 2..1.
4.1 设计................................................... 2..1..
4.2 对编码的讨论........................................... 2..1.
5 总结和体会.............................................. 2..3 ........... 附录一 ................................................... 2..4 .............
本科生课程设计成绩评定表.......................................... 错...误... !未定义书签
1 问题描述 ....................................................................................................
2 .............
1.3 要求......................................................................................................... 2 ..............
2.2 主要算法设计........................................................................................... 3 ...........
2.3 测试用例及测试结果............................................................................... 6 .........
3 调试报告 .................................................................................................... 9 .............
数据结构课程设计
——判别括号配对
1 问题描述
1.1 题目:
判别括号配对
1.2 问题:
一个算术表达式含圆括号、中括号、花括号,且它们可任意嵌套使用。写一程序,判断任一算术表达式中所含括号是否正确配对。
1.3 要求:
(1)表达式从键盘输入。
(2)利用栈求解此问题。
(3)测试用例自己设计。
2 设计
2.1 存储结构设计
题目要求利用栈来求解此问题,因此选择顺序栈作为存储结构,具体表示如下:
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{ char *base; char *top;
int stacksize;
}SqStack;
2.2 主要算法设计
2.2.1 算法思想
(1)文字描述
从键盘输入一个表达式;
逐个扫描表达式中的字符;
当遇到左括号时,将左括号入栈;
继续扫描,将此后遇到的第一个右括号与栈顶元素比较,若匹配,则栈顶元素出栈;否则,继续扫描;当整个表达式扫描完以后,判断栈内是否还有元素,若有,则括号不匹配;若栈为空,则括号配对成功;
在括号配对不成功的情况下,利用栈顶栈底元素的差值,可以对左右括号数进行比较
(2)流程图表示
2.2.2 算法
void CharIsCorrect(char a[]){
SqStack S;
char e;
int n,c;
InitStack(S);//建立一个空栈
n=strlen(a);// 求表达式长度
int d=0,b=0;
for(int i=0;i Push(S,a[i]); else{ c=StackEmpty(S); if ((c==1)&&((a[i]==')')||(a[i]==']')||(a[i]=='}')))// 栈为空且当前扫描的字符为右括号时,右括号多于左括号 ++b; else{ e=GetTop(S); if (((a[i]==')')&&(e=='('))||((a[i]==']')&&(e=='['))||((a[i]=='}')&&(e=='{')))// 括号匹配时满足的条件 e=Pop(S); else if ((a[i]==')')||(a[i]==']')||(a[i]=='}')) ++d; }