数据结构课程设计---括号匹配

目录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 10typedef 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<n;i++){ if((a[i]=='(')||(a[i]=='[')||(a[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;}}// 扫描字符串,左括号进栈,右括号出栈if(StackEmpty(S)==1&&(b==0)&&(d==0))cout<<" 左右括号配对正确"<<endl;// 栈为空时,括号匹配else cout<<" 左右括号不匹配且左括号与右括号个数差为"<<S.top-S.base-d-b<<" 个"<<endl;// 正数表示左括号比右括号多,负数则相反2.3 测试用例及测试结果1)表达式不含除括号外其他字符,配对正确的情况:2)表达式不含除括号外其他字符且左括号少于右括号的情况:4)表达式含任意字符且左右括号个数相同但配对不成功的情况:5)表达式仅含括号且括号个数相同单不匹配的情况:6)表达式仅含括号且左括号对于右括号的情况:3 调试报告1. 本次课程设计,主要的调试过程在于对于判别函数的调试,但是除此之外,由于编译过程中发现了一些错误,对于栈的一些基本操作,以及main 函数,也进行了调试,其中遇到的主要问题如下:(1)大小写出错解决办法:将所有小写s 改为大写S 即可(2)在写“判断栈是否为空”的操作时,将函数的类型标示符写错,导致了如下错误:解决办法:将“void”改为i“nt ”后,能够正常运行中,当用cin 进行输入时出错:解决办法:将char a 改为char a[20] 后编译不出现错误(4)除了以上错误之外,还有一些小错误,编号如下:Error C 2146、error C 2143 、error C 2109 等等,一般再仔细检查后,能够检出错误。

2. 以下,对主要程序进行调试,过程如下:(1) 第一次成型的主体部分代码如下:void CharIsCorrect(char a[]){SqStack S; char e; int n,c;InitStack(S);//建立一个空栈n=strlen(a);// 求表达式长度int m=0;for(int i=0;i<=n;i++){if((a[i]=='(')||(a[i]=='[')||(a[i]=='{'))Push(S,a[i]);else{c=StackEmpty(S);if ((c==1)&&((a[i]==')')||(a[i]==']')||(a[i]=='}')))// 栈为空且当前扫描的字符为右括号时,右括号多于左括号++m;else{e=GetTop(S);while(((a[i]==')')&&(e=='('))||((a[i]==']')&&(e=='['))||((a[i]=='}')&&(e=='{')))// 括号匹配时满足的条件e=Pop(S);}}}// 扫描字符串,左括号进栈,右括号出栈if(!m==0)cout<<" 左右括号不匹配且左括号比右括号少"<<endl;// 栈不为空时,左括号多于右括号else{if(StackEmpty(S)==1)cout<<" 左右括号匹配正确"<<endl;// 栈为空时,括号匹配else cout<<" 左右括号不匹配且左括号比右括号多"<<endl;} 运行结果不正确,结果如下用能够成功配对的两对括号进行测试,测试结果应为“左右括号配对成功”,但测试结果实际为“左右括号不匹配且左括号比右括号少”,测试结果不正确:找到导致错误的原因是while ,while 执行了两次,使栈为空。

将while 改为if 后,问题得到解决。

同时为了提高程序的有效性,在出栈时也设了计数器,同时用左括号与右括号的个数差来表示左右括号的多少,正负数区别左右括号总数谁多谁少(正数左括号多,负数右括号多)。

(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<n;i++){if((a[i]=='(')||(a[i]=='[')||(a[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 ++d;}}// 扫描字符串,左括号进栈,右括号出栈if(StackEmpty(S)==1&&(b==0)&&(d==0))cout<<" 左右括号配对正确"<<endl;// 栈为空时,括号匹配else cout<<" 左右括号不匹配且左括号与右括号个数差为"<<S.top-S.base-d-b<<" 个"<<endl;//正数表示左括号比右括号多,负数则相反此时,对仅含有括号的表达式进行测试时,未发现任何问题,但在测试含有字母数字等不仅仅只有括号的表达式时,出现错误测试结果如下:输入含有字母的表达式,正确的测试结果为“左右括号不匹配且左括号与右括号个数差为-2”,但实际测试结果如下,测试结果不正确:这是由于在不匹配的情况下,将所有的字符一概视为右括号所致,因此最后一个else 分支处应加上if 限制条件,在仅出现不匹配的右括号时,计数器的值才发生改变,因此将代码做如下修改:(3) 第三次修改: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<n;i++){ if((a[i]=='(')||(a[i]=='[')||(a[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;}}// 扫描字符串,左括号进栈,右括号出栈if(StackEmpty(S)==1&&(b==0)&&(d==0))cout<<" 左右括号配对正确"<<endl;// 栈为空时,括号匹配else cout<<" 左右括号不匹配且左括号与右括号个数差为"<<S.top-S.base-d-b<<" 个"<<endl;// 正数表示左括号比右括号多,负数则相反}再次进行测试,测试结果均正确,结果如下:1)表达式仅含括号且配对正确:2)表达式仅含括号且左括号少于又括号:3)表达式含字母和括号且左括号少于右括号:4)表达式含任意字符且左右括号个数相同但不匹配:5)表达式仅含括号且括号个数相同但不匹配:6)表达式仅含括号且左括号比右括号多:至此,调试成功,所编写的代码符合题目要求!4.对设计和编码的讨论和分析4.1 设计对于从键盘输入的表达式,其括号配对情况有以下四种:a. 表达式括号配对成功b. 表达式括号配对不成功但左右括号个数相等c. 表达式括号配对不成功且左括号比右括号的个数多d. 表达式括号配对不成功且左括号个数比右括号少因此,对于一个表达式,要判别其括号配对情况,必会得到这四种中的某一种结果,根据每种结果不同于其他结果的特点,分离出该种表达式,从而给出相应的配对结果。

合集下载

卡特兰数在数据结构中的应用

卡特兰数在数据结构中的应用

卡特兰数在数据结构中的应用卡特兰数是一种在组合数学中广泛应用的数列,它在数据结构中也有着重要的应用。

卡特兰数可以用来表示许多问题的解决方案数量,特别是那些涉及到组合和排列的问题。

在本文中,我们将介绍卡特兰数在数据结构中的一些常见应用。

一、括号匹配问题在许多编程语言中,括号匹配是一种常见的问题。

给定一个字符串,判断其中的括号是否匹配。

例如,对于字符串"(())",括号是匹配的;而对于字符串"(()",括号是不匹配的。

使用卡特兰数可以解决这个问题。

假设有n对括号,我们可以将问题转化为在一个n*n的网格中,从左下角走到右上角的路径数量。

其中,每一步可以向上一格或向右一格,并且不能超过对角线。

通过计算卡特兰数C(n),我们可以得到括号匹配的解决方案数量。

例如,对于2对括号,即n=2,卡特兰数C(2)=2,表示存在两种括号匹配的方式,即"(())"和"()()"。

二、二叉搜索树的种类数量在二叉搜索树(Binary Search Tree)中,左子树的节点值都小于根节点的值,右子树的节点值都大于根节点的值。

给定n个节点,求不同的二叉搜索树的种类数量。

使用卡特兰数可以解决这个问题。

假设有n个节点,我们可以选择其中一个节点作为根节点,然后将剩余的节点分成左子树和右子树。

左子树可以有0到n-1个节点,右子树则有n-1到0个节点,因此可以使用递归的方式计算左子树和右子树的种类数量。

通过计算卡特兰数C(n),我们可以得到二叉搜索树的种类数量。

例如,对于3个节点,即n=3,卡特兰数C(3)=5,表示存在5种不同的二叉搜索树。

三、凸多边形的三角剖分数量在计算几何中,凸多边形是指所有内角都小于180度的多边形。

给定一个凸多边形,求其可以进行的三角剖分数量。

使用卡特兰数可以解决这个问题。

假设有n个顶点,我们可以选择其中一个顶点作为剖分的起点,然后将剩余的顶点分成两个子多边形,分别递归计算其三角剖分数量。

数据结构 括号排序

数据结构 括号排序

2
pos = 1
1
pos = 0
( [
0
A×[ (B-C) + (D-E) ] / (F + G) × - -
2
pos = 1
1
pos = 0
( [
0
A×[ (B-C) + (D-E) ] / (F + G) × - -
2 1
pos = 0
0
pos = 1
[
A×[ (B-C) + (D-E) ] / (F + G) × - -
借助于数组顺序处理表达式 中的每个括号,遇到左括号依 次存入数组,遇到右括号,则 与数组最上部的左括号匹配, 如果发现括号匹配错误,则终 止检测过程。如果匹配成功, 则将顶部的左括号移走。继续 往下…,一直到最后一个括号
2 1 0
pos = 1
A×[ (B-C) + (D-E) ] / (F + G) × - -
2 1 0 pos = 1 pos = 0
2 1 0
[
A×[ (B-C) + (D-E) ] / (F + G) × - -
2
pos = 1
1
pos = 0
( [
0
A×[ (B-C) + (D-E) ] / (F + G) × - -
2
pos = 1
1
pos = 0
( [
0
A×[ (B-C) + (D-E) ] / (F + G) × - -
2 1
pos = 0
0
(
pos = 1
A×[ (B-C) + (D-E) ] / (F + G) × - -

数据结构括号匹配算法

数据结构括号匹配算法

括号匹配算法主要用于检查一个字符串中的括号是否匹配。

这个算法利用栈的后进先出(LIFO)性质,对输入的字符串进行检查。

以下是括号匹配算法的基本步骤:
1. 初始化一个空栈。

2. 遍历输入的字符串,对于每个字符:
* 如果字符是左括号('('、'{'、'['),将其压入栈中。

* 如果字符是右括号(')'、'}'、']'),检查栈顶的元素是否与之匹配。

如果匹配,则将栈顶元素弹出;否则,表示括号不匹配,返回错误。

3. 检查栈是否为空。

如果栈为空,表示所有括号都已匹配,返回成功;否则,表示还有未匹配的括号,返回错误。

在实现这个算法时,需要使用一个栈来存储左括号。

在遍历字符串的过程中,每遇到一个左括号,就将其压入栈中。

每遇到一个右括号,就检查栈顶的元素是否与之匹配。

如果匹配,则将栈顶元素弹出;否则,表示括号不匹配。

以上是括号匹配算法的基本思想。

具体的实现方式可能会因编程语
言和数据结构的不同而有所差异。

《数据结构》课程设计

《数据结构》课程设计

《数据结构》课程设计一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中基础的数据组织、管理和处理方法,培养其运用数据结构解决实际问题的能力。

课程目标如下:1. 知识目标:(1)理解基本数据结构的概念、原理和应用,如线性表、栈、队列、树、图等;(2)掌握常见算法的设计和分析方法,如排序、查找、递归、贪心、分治等;(3)了解数据结构在实际应用中的使用,如操作系统、数据库、编译器等。

2. 技能目标:(1)能够运用所学数据结构解决实际问题,具备良好的编程实践能力;(2)掌握算法分析方法,能够评价算法优劣,进行算法优化;(3)能够运用数据结构进行问题建模,提高问题解决效率。

3. 情感态度价值观目标:(1)激发学生对计算机科学的兴趣,培养其探索精神和创新意识;(2)培养学生团队合作意识,学会与他人共同解决问题;(3)增强学生的责任感和使命感,使其认识到数据结构在信息技术发展中的重要性。

本课程针对高中年级学生,结合学科特点和教学要求,将目标分解为具体的学习成果,为后续教学设计和评估提供依据。

课程注重理论与实践相结合,旨在提高学生的知识水平、技能素养和情感态度价值观。

二、教学内容《数据结构》教学内容依据课程目标进行选择和组织,确保科学性和系统性。

主要包括以下部分:1. 线性表:- 线性表的定义、特点和基本操作;- 顺序存储结构、链式存储结构及其应用;- 线性表的相关算法,如插入、删除、查找等。

2. 栈和队列:- 栈和队列的定义、特点及基本操作;- 栈和队列的存储结构及其应用;- 栈和队列相关算法,如进制转换、括号匹配等。

3. 树和二叉树:- 树的定义、基本术语和性质;- 二叉树的定义、性质、存储结构及遍历算法;- 线索二叉树、哈夫曼树及其应用。

4. 图:- 图的定义、基本术语和存储结构;- 图的遍历算法,如深度优先搜索、广度优先搜索;- 最短路径、最小生成树等算法。

5. 排序和查找:- 常见排序算法,如冒泡、选择、插入、快速等;- 常见查找算法,如顺序、二分、哈希等。

《数据结构课程设计》指导书

《数据结构课程设计》指导书

《数据结构》课程设计指导书沈阳理工大学.信息学院2013.11.1一.目的与意义软件设计能力对计算机专业的学生是很重要。

通过数据结构的学习,使学生对软件编程能力有一定的提高。

数据结构课程设计是锻炼学生在进一步掌握模块化、结构化程序设计的方法的同时,培养学生运用已学知识分析问题、解决问题及编写实用程序的能力,通过对线性化、层次化、网络化数据结构的了解进一步掌握自然数据的结构方式及组织方式,让学生深入体会存储在计算机中的数据及程序中如何运用数据实现编程。

主要目的如下:1.通过本课程设计使学生对面向对象的设计过程有初的认识,并对面向对象的高能语言的学习打下基础,2.通过不同类型的程序设计使学生进一步掌握数据的几种不同的组织和存储方式,为高级编程做准备,3.为专业课的深入学习和毕业设计打基础二.任务和要求分析每一组题目,按要求完成相应的题目:1.题目参照附录中《数据结构课程设计》题目选题。

2. 要求:1)对相应的题目进行算法设计2)编写源代码3)上机调试4)显示调试结果5)写出实验总结3.课程设计说明书设计完成后,将自己选定的题目按上述要求完成课程设计说明书。

课程设计说明书内容包含:题目、要求、初步设计(可以是流程图、功能模块图)、详细设计、程序代码、测试数据、运行结果、遇到的问题及总结几部分。

三.进度安排设计总学时为2周第一周:查阅资料、小组讨论、进行模块划分写出分析报告,画N-S结构化框图,编写程序清单,上机调试.第二周周四、五:验收(计算机机房),并将课程设计报告交上来.四.考核标准与成绩评定方式成绩评定有如下几项参考:1.初步设计内容的考核:是否有查阅资料能力?是否有设计思想?2.程序编码能力调试能力的考核:程序是否清晰、易读?在技算计上是否可独立完成程序的调试,是否熟练?3.说明书质量的考核:设计结构是否合理?叙述是否正确?方案是否可行?4.答辩:设计结果的调试能力,对自己设计是否熟练?5.出勤率极平时表现的考核:出勤超过2次不到者成绩为不及格。

数据结构实验题目

数据结构实验题目

实验题目一一、单链表基本运算【问题描述】设计并实现线性表的单链表存储和运算。

【基本要求】实现单链表的插入、删除和遍历运算,每种操作用一个函数实现。

插入操作:将一个新元素插入表中指定序号的位置。

删除操作:将指定序号的元素从表中删除。

遍历操作:从表头按次序输入所有元素的值,若是空表,则输出信息“empty list!”。

【实现提示】程序运行时,首先在main函数中创建空的、带头结点的单链表。

然后多次调用实现插入操作的函数(每次都将元素在序号1位置上插入),将元素依次插入表中,最后调用实现遍历操作的函数输出所有元素。

之后再多次调用实现删除操作的函数将表还原为空表(每次都删除第1个元素,每删除一个元素后,将表中剩余元素都输出一次)。

【测试数据】输入数据:1 2 3 4 5 0(为0时结束,0不存入链表)第一次输出:5 4 3 2 1第二次输出:4 3 2 1第三次输出:3 2 1第四次输出:2 1第五次输出:1第六次输出:empty list!二、约瑟夫环问题【问题描述】编号为1,2,...,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。

现在给定一个随机数m>0,从编号为1的人开始,按顺时针方向1开始顺序报数,报到m时停止。

报m的人出圈,同时留下他的密码作为新的m值,从他在顺时针方向上的下一个人开始,重新从1开始报数,如此下去,直至所有的人全部出列为止。

【基本要求】利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。

【测试数据】M的初始值为20;n等于7,7个人的密码依次为:3,1,7,2,4,8,4。

输出为:6,1,4,7,2,3,5【实现提示】程序运行时,首先要求用户指定初始报数上限值,然后读取各人的密码。

可设n≤30。

此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。

【选作内容】用顺序存储结构实现该题目。

三、一元多项式相加、减运算器【问题描述】设计一个一元稀疏多项式简单计算器。

《数据结构》学习指导

《数据结构》学习指导说明:本指导以《数据结构》(C语言版)(严蔚敏等编著,清华大学出版社1997年出版,国家级优秀教材特等奖)和《数据结构题集》(严蔚敏等编著,清华大学出版社1999年出版)为教学主要参考书。

一、绪论1、学习目的:明确数据结构课程在本专业知识结构中的地位,作用。

课程的特点,教学的要求,方法。

明确数据结构所研究的问题以及有关基本概念。

初步掌握抽象数据类型的表示与实现,初步明确算法分析的作用与分析的重点,初步掌握算法分析的方法。

2、学习重点:数据的逻辑结构、存储结构及其算法,数据结构的有关概念,抽象数据类型及其表示与实现,算法,算法设计的要求,算法的时间复杂度和算法的空间复杂度。

3、学习难点:数据结构的有关概念,抽象数据类型的表示与实现;算法的时间复杂度分析。

4、课程内容与基本要求(一) 数据结构的引入(1) 三个世界:现实世界,信息世界,机器世界。

数据结构要解决的就是实现从现实世界到信息世界,再由信息世界到机器世界的转换,从而实现用计算机来解决问题的目的。

(2) 非数值问题(结合三个世界讲):控制,管理,数据处理(3) 数值问题:数值计算(4)数据结构:从学科角度讲,数据结构是一门研究非数值计算的程序设计问题中计算机操作对象以及他们之间的关系和操作等等的学科。

(二) 课程的地位,性质,作用。

(1) 地位: 计算机专业的核心课程之一。

(2) 性质: 算法理论基础和软件设计的技术基础课。

(3) 作用: 程序设计的基础,编译程序,操作系统,数据库系统及软件系统和应用程序的基础(三) 数据结构的产生和发展(四) 课程的特点,学习的要求教材:《数据结构》(C语言版)严蔚敏等编著北京清华大学出版社1997年参考书:《数据结构》许卓群等编著北京高等教育出版社1987年数据结构实用教程》(C/C++描述)徐孝凯北京清华大学出版社1999年《数据结构题集》严蔚敏等编著北京清华大学出版社1999年《数据结构导学》苏光奎等编著北京清华大学出版社20XX年《数据结构》(C语言篇)-习题与解析李春葆编著北京清华大学出版社20XX年《数据结构》实验指导书唐开山自编讲义20XX年(五) 基本概念和术语数据数据元素数据对象(4)数据结构:按某种逻辑关系组织起来的一批数据,按一定的存储表示方式把它存储到计算机的存储器中,并在这些数据上定义了一个运算的集合,叫做一个数据结构。

C语言实验二、括号匹配

实验二、括号匹配一、问题描述假设一个输入字符串中包含圆括号、方括号和花括号三种类型的括号,以及其它一些任意字符。

编写程序,判别串中的括号是否正确匹配,即必须满足以下条件1.各种左、右括号的个数要一致;2.要符合正确的嵌套规则。

基本方法:在算法中设置一个栈,每读入一个括号,若是右括号,则或者使置于栈顶的最后进入的左括号消解,或者是不合法的情况;若是左括号,则压入栈中,同时在算法的开始和结束时,栈都应该为空,否则不合法。

二、基本要求输入一个算术表达式,利用栈存储结构来存入左括号,然后判断表达式中的括号是否匹配。

三、测试数据(1)([3+2]+(7*9))(2)[([3/2 ]-[5*6])](3)[7+8-(8-9])(4)(2+](3*9)))四、实现提示1、算法思路(1)对于栈的操作包括初始化initstack、判断栈是否满sfull、判断栈是否空sempty、入栈push和出栈pop操作。

该函数被主函数调用。

(2)在主函数中输入一个算术表达式,依次取出该算术表达式的某个字符,如果是左括号则入栈,如果是右括号则出栈,并判断右括号与出栈的元素是否匹配。

当算术表达式取完后,再判断栈是否为空,如果不空,则说明括号不匹配。

2、数据结构typedef struct stk//定义的栈结构{char *s; //栈中存放元素int top;//栈顶指针}stack;3、基本操作void initstack(stack *st) /* 栈s1和s2的初始化操作,st为指向s1或s2的指针 */int sfull(stack st) /* 判断栈s1和s2是否满的操作 */int sempty(stack st) /* 判断栈s1和s2是否空的操作 */int push(stack st,char e) /* 入栈操作,e为栈中结点类型 */int pop(stack *st,char *e) /*出栈操作,e为指向栈中结点的指针类型 */5、主程序main(){int i=0;char e;stack s1;//存放左括号的栈char str[100];//存放算术表达式的值initstack(&s1);printf("请输入表达式\n");gets(str);//输入算术表达式while(i<strlen(str)){if (str[i]=='('||str[i]=='['||str[i]=='{'){……}else if (str[i]==')'||str[i]==']'||str[i]=='}'){……else i++;}……}5、输出结果测试数据(1)([3+2]+(7*9))括号匹配(2)[([3/2 ]-[5*6])]括号匹配(3)[7+8-(8-9])第10个元素左右括号不匹配(4)(2+](3*9)))第4个元素左右括号不匹配。

数据结构课程设计报告课案

广西科技大学鹿山学院课程设计2015-2016 学年第2 学期课程名称:数据结构课程设计设计名称:数据结构课程设计系别:电气与计算机工程系专业班级:计软141班姓名:邓康言学号:20141409指导教师:俸学文评阅成绩:评阅人:二〇一六年三月三十日电气与计算机工程系实践教学管理中心目录一、任务书 (2)2.1.存储结构与基本运算的算法 (2)2.3.学生管理系统 (2)2.6.数据库管理系统 (3)3.2括号的匹配 (8)3.5马踏棋盘 (9)4.2 看病排队候诊问题 (10)4.4 停车场管理 (11)5.2 KMP算法 (13)5.4 大型整数计算 (13)7.2 线索二叉树的创建及遍历 (14)7.4电文的编码的译码 (15)7.5家族关系查询系统 (16)二、课程设计总结 (18)三、参考文献 (18)一、任务书2.1.存储结构与基本运算的算法任务:用C语言描述顺序表和线性表2.3.学生管理系统任务:要求以学生成绩管理业务为背景,设计一个“学生管理系统”。

主要对学生资料的录入、浏览、插入、和删除等基本功能的实现算法思路:管理学生的成绩适合用单链表,方便插入和删除学生记录实现动态管理。

(1)定义单链表的结构体模块(2)单链表的建立模块(3)单链表的结点插入模块(4)单链表的结点删除模块(5)单链表的结点数据输出模块(6)主函数模块运行结果:算法心得:本程序为每一个处理功能都写了相应的函数模块。

从而使得学生管理系统具有实用性。

2.6.数据库管理系统任务:设计一个数据库管理系统,用户可以自行定义和创建数据库,能够对数据库实现插入、浏览、浏览定位、条件定位、按条件修改、按条件排序、删除和全部删除等功能实现。

并能保存数据库信息到指定文件以及打开并使用已存在的数据库文件,但数据库结构定义后不允许修改。

算法思路:由于数据库是通用的,因此先定义一个通用数据库。

用户这个库结构上可以应用所需的多个字段类型,创建自己的数据库。

数据结构括号匹配实验报告

括号的匹配1. 需求和规格说明(1)实现括号的是否匹配的判定。

(2)实现匹配错误的提示。

(3)实现栈内容的动态显示。

2.设计2.1.设计思想(1)对于括号匹配的判定,首先输入字符串到缓冲区。

逐个字符读取字串,遇到的是左括号则入栈,若是右括号,则出栈。

出栈的左括号如果和右括号匹配,则一对括号匹配成功;否则,这对括号匹配失败,并给出错误提示。

(2)分析括号匹配错误出现的情况,主要有三种:左括号数大于右括号数,左括号与右括号不匹配,右括号数大于左括号数。

根据栈的存储情况就能判定出这三种情况,并且实时的将信息放映到可视化控件上。

(3)对于匹配过程和栈内容的动态显示,可以用listbox 控件实时的显示和更新。

窗口上有两个listbox 控件,第一个动态显示push 和pop 动作以及提示错误信息;第二个listbox 则动态模拟栈内的存储情况。

2.2.设计表示(1)存储结构Node 节点template <class element>class Node{public:element ele;Node *pre; // 前驱指针Node *next; //后继指针Node(){pre=NULL; next=NULL;}Node(element e){ele=e;pre=NULL;next=NULL;}Node * MakeNode(element e)//传入参数返回一个节点指实现参数的封装针,{Node<element> *temp=new Node(e); return temp;}};MyListStack 链栈template <class element> class MyListStack{public:Node<element> *base;Node<element> *top;int index;MyListStack() //初始化链表{base=new Node<element>(); top=base;index=0;}void push(element n) //push{Node<element> *temp=new Node<element>(n); top->next=temp;temp->pre=top;top=temp; index++;}void pop(element & out) //pop{ out=top->ele; top=top->pre; delete top->next; top->next=NULL; index--;}BOOL isEmpty(); //返回栈是否为空{if(index) return FALSE;else return TRUE;}virtual ~MyListStack() //析构链栈,释放空间{Node<element> *p=base; Node<element> *q=p->next;while(p->next!=NULL){ delete p; p=q; q=p->next;} delete p;}};(2)涉及的操作void CKuohaopipeiDlg::OnButtonClear() // 清空窗口控件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档