数据结构_括号匹配
任务书括号匹配汉诺塔

汉诺塔问题1.问题描述设有三个分别命名为x、y和z的塔座,在塔座x上插有n个直径各不相同,从小到大依次编号1、2、…、n的圆盘,现要求将x塔座上的n个圆盘移到塔座z上,并插在x、y和z中任一塔座;任何时候都不允许将较大的圆盘放在较小的圆盘之上。
2.设计要求⑴程序要求用户输入初始圆盘数。
⑵输出所有的移动过程。
3.数据结构本课程设计使用的数据结构是栈,利用顺序栈来实现。
4.分析与实现汉诺塔问题是印度的一个古老传说。
开天辟地的神勃拉玛在一庙里留下了三根金刚石棒,第一根上面套有64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒做为帮助,但每次只能搬一个,而且大的不能放在小的上面。
解答结果请自己进行计算,面对庞大的数字,看来众僧们耗尽毕生精力也不可能完成金片的移动。
后来,这个传说就演变为汉诺塔游戏:⑴有三根杆子x、y和z。
X杆上按从小到大依次放置若干大小不等的盘子;⑵每次只能移动一个盘子,大的不能放在小的上面;⑶把所有盘子从x杆全部移到z杆上,可惜借助中间y杆。
经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动盘子。
如三阶汉诺塔的移动:x→z,x→y,z→y,x→z,y→z,x→z。
在这里采用一种非递归的算法实现。
括号匹配⒈问题描述设某一算术表达式中包含圆括号、方括号或花括号三种类型的括号,编写一个算法判断其中的括号是否匹配。
⒉设计要求⑴程序对所输入的表达式能给出适当的提示信息,表达式中包含括号,括号分为圆括号、方括号或花括号三种类型。
⑵允许使用四则混合运算(+、—、*和/),以及包含变量的算术表达式。
⑶只验证表达式中的括号是否匹配(圆括号、方括号或花括号三种类型),并给出验证结果。
⒊数据结构本课程设计使用的数据结构是栈,利用顺序栈来实现。
⒋分析与实现在算术表达式中,通常包含数字符号、运算符号以及括号(圆括号、方括号或花括号三种类型)。
数据结构名词解释考研题库及答案

数据结构名词解释考研题库及答案数据结构是计算机科学中的重要概念,它是指一组数据的组织方式和操作方法。
在计算机科学的学习和研究中,数据结构是非常基础和核心的内容之一。
对于考研的学生来说,掌握数据结构的相关知识是必不可少的。
在考研题库中,有很多关于数据结构的名词解释题目,下面我将对其中一些常见的名词进行解释,并给出相应的答案。
1. 栈(Stack)栈是一种线性数据结构,它的特点是“后进先出”(Last In First Out,LIFO)。
栈有两个基本操作:入栈(Push)和出栈(Pop)。
入栈操作将元素放入栈的顶部,出栈操作将元素从栈的顶部移除。
2. 队列(Queue)队列也是一种线性数据结构,它的特点是“先进先出”(First In First Out,FIFO)。
队列有两个基本操作:入队(Enqueue)和出队(Dequeue)。
入队操作将元素放入队列的末尾,出队操作将元素从队列的头部移除。
3. 链表(Linked List)链表是一种动态数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。
链表有单向链表和双向链表两种形式。
链表的插入和删除操作比较高效,但是访问元素的效率较低。
4. 树(Tree)树是一种非线性数据结构,它由一组节点和连接它们的边组成。
树的一个节点称为根节点,每个节点可以有零个或多个子节点。
树的常见应用包括二叉树、二叉搜索树、平衡二叉树等。
5. 图(Graph)图是一种非线性数据结构,它由一组节点和连接它们的边组成。
图的节点之间可以有多个连接关系,这些连接关系称为边。
图可以分为有向图和无向图两种形式。
以上是一些常见的数据结构名词的解释,接下来我将给出一些相应的考研题目及答案。
1. 问题:栈的应用场景有哪些?答案:栈的应用场景包括函数调用、表达式求值、括号匹配等。
在函数调用中,每次调用函数时,系统会将返回地址和局部变量等信息保存在栈中。
在表达式求值中,可以利用栈来实现中缀表达式转后缀表达式的过程。
卡特兰数在数据结构中的应用

卡特兰数在数据结构中的应用卡特兰数是一种在组合数学中广泛应用的数列,它在数据结构中也有着重要的应用。
卡特兰数可以用来表示许多问题的解决方案数量,特别是那些涉及到组合和排列的问题。
在本文中,我们将介绍卡特兰数在数据结构中的一些常见应用。
一、括号匹配问题在许多编程语言中,括号匹配是一种常见的问题。
给定一个字符串,判断其中的括号是否匹配。
例如,对于字符串"(())",括号是匹配的;而对于字符串"(()",括号是不匹配的。
使用卡特兰数可以解决这个问题。
假设有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) × - -
北京理工大学数据结构编程练习答案

1.一元多项式相加(10分)成绩: 10 / 折扣: 0.8题目说明:编写一元多项式加法运算程序。
要求用线性链表存储一元多项式(参照课本)。
该程序有以下几个功能:1. 多项式求和输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc(提示:调用CreatePolyn(polynomial &P,int m)。
输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。
0. 退出输入:根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例):∙ 1多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数)∙0 ---操作终止,退出。
输出:对应一组输入,输出一次操作的结果(参见测试用例)。
∙ 1 多项式输出格式:以指数递增的顺序输出: <系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。
零多项式的输出格式为<0,0>∙0 无输出1.#include<iostream>#include<stdlib.h>using std::cin;using std::cout;using std::endl;struct date{int a;int b;struct date* pnext;};typedef struct date DATE;typedef struct date* PDATE;void output(PDATE p){int f=0;p=p->pnext;while(p!=NULL){if(p->a!=0){f=1;cout<<"<"<<p->a<<","<<p->b<<">";if(p->pnext==NULL)cout<<endl;elsecout<<",";}p=p->pnext;}if(f==0)cout<<"<0,0>"<<endl;}void add(PDATE a,PDATE b,PDATE c){PDATE p1,p2,p3;p1=a;p2=b;p3=c;if(p1!=NULL) p1=p1->pnext; //skip head if(p2!=NULL) p2=p2->pnext;while((p1!=NULL)&&(p2!=NULL)){if(p1->b>p2->b){p3->pnext=(PDATE)malloc(sizeof(DATE));p3=p3->pnext;p3->a=p2->a;p3->b=p2->b;p3->pnext=NULL;p2=p2->pnext;}else if(p1->b<p2->b){p3->pnext=(PDATE)malloc(sizeof(DATE));p3=p3->pnext;p3->a=p1->a;p3->b=p1->b;p3->pnext=NULL;p1=p1->pnext;}else{p3->pnext=(PDATE)malloc(sizeof(DATE));p3=p3->pnext;p3->a=p1->a+p2->a;p3->b=p1->b;p3->pnext=NULL;p1=p1->pnext;p2=p2->pnext;}}//end whileif(p1==NULL)p3->pnext=p2;if(p2==NULL)p3->pnext=p1;}int main(){int flag;int n;PDATE P[6]={NULL};PDATE p=NULL;for(int i=0;i<6;i++){P[i]=(PDATE)malloc(sizeof(DATE));P[i]->a=0;P[i]->b=0;P[i]->pnext=NULL;}cin>>flag;if(flag==1){for(int i=1;i<4;i++){p=P[i];cin>>n;while(n--!=0){p->pnext=(PDATE)malloc(sizeof(DATE));p=p->pnext;cin>>p->a>>p->b;p->pnext=NULL;}output(P[i]);}}add(P[1],P[2],P[4]);output(P[4]);add(P[4],P[3],P[5]);output(P[5]);}0 约瑟夫问题(10分)成绩: 10 / 折扣: 0.80 约瑟夫问题成绩10分折扣0.8(本题要求用循环链表实现)0 ,1, 2, 3题,只能选做三题.约瑟夫问题是一个经典的问题。
数据结构括号匹配算法

括号匹配算法主要用于检查一个字符串中的括号是否匹配。
这个算法利用栈的后进先出(LIFO)性质,对输入的字符串进行检查。
以下是括号匹配算法的基本步骤:
1. 初始化一个空栈。
2. 遍历输入的字符串,对于每个字符:
* 如果字符是左括号('('、'{'、'['),将其压入栈中。
* 如果字符是右括号(')'、'}'、']'),检查栈顶的元素是否与之匹配。
如果匹配,则将栈顶元素弹出;否则,表示括号不匹配,返回错误。
3. 检查栈是否为空。
如果栈为空,表示所有括号都已匹配,返回成功;否则,表示还有未匹配的括号,返回错误。
在实现这个算法时,需要使用一个栈来存储左括号。
在遍历字符串的过程中,每遇到一个左括号,就将其压入栈中。
每遇到一个右括号,就检查栈顶的元素是否与之匹配。
如果匹配,则将栈顶元素弹出;否则,表示括号不匹配。
以上是括号匹配算法的基本思想。
具体的实现方式可能会因编程语
言和数据结构的不同而有所差异。
数据结构(c语言版)课后习题答案完整版
数据结构(c语言版)课后习题答案完整版数据结构(C语言版)课后习题答案完整版一、数据结构概述数据结构是计算机科学中一个重要的概念,用来组织和存储数据,使之可以高效地访问和操作。
在C语言中,我们可以使用不同的数据结构来解决各种问题。
本文将提供完整版本的C语言数据结构的课后习题答案。
二、顺序表1. 顺序表的定义和基本操作顺序表是一种线性表,其中的元素在物理内存中连续地存储。
在C 语言中,我们可以通过定义结构体和使用指针来实现顺序表。
以下是顺序表的一些基本操作的答案:(1)初始化顺序表```ctypedef struct{int data[MAX_SIZE];int length;} SeqList;void InitList(SeqList *L){L->length = 0;}```(2)插入元素到顺序表中```cbool Insert(SeqList *L, int pos, int elem){if(L->length == MAX_SIZE){return false; // 顺序表已满}if(pos < 1 || pos > L->length + 1){return false; // 位置不合法}for(int i = L->length; i >= pos; i--){L->data[i] = L->data[i-1]; // 向后移动元素 }L->data[pos-1] = elem;L->length++;return true;}```(3)删除顺序表中的元素```cbool Delete(SeqList *L, int pos){if(pos < 1 || pos > L->length){return false; // 位置不合法}for(int i = pos; i < L->length; i++){L->data[i-1] = L->data[i]; // 向前移动元素 }L->length--;return true;}```(4)查找顺序表中的元素```cint Search(SeqList L, int elem){for(int i = 0; i < L.length; i++){if(L.data[i] == elem){return i + 1; // 找到元素,返回位置 }}return -1; // 未找到元素}```2. 顺序表习题解答(1)逆置顺序表```cvoid Reverse(SeqList *L){for(int i = 0; i < L->length / 2; i++){int temp = L->data[i];L->data[i] = L->data[L->length - 1 - i]; L->data[L->length - 1 - i] = temp;}}```(2)顺序表元素去重```cvoid RemoveDuplicates(SeqList *L){for(int i = 0; i < L->length; i++){for(int j = i + 1; j < L->length; j++){if(L->data[i] == L->data[j]){Delete(L, j + 1);j--;}}}}```三、链表1. 单链表单链表是一种常见的链式存储结构,每个节点包含数据和指向下一个节点的指针。
数据结构-栈的实现之括号匹配检测
数据结构-栈的实现之括号匹配检测假设表达式中只允许两种括号:()、{};正确表达顺序为:()或{}或({})或{({}{})}的形势;如{(}或(})或({)}的表达形势均不对。
算法的设计思想: 出现左括弧则进栈; 出现右括弧则⾸先检测栈是否为空, 若栈空则表明此右括弧多余,表达式不匹配。
否则和栈顶数据⽐较,若匹配则栈顶出栈。
否则表明表达式不匹配; 最后若栈空且没有做鱼右括弧则匹配正确,否则表明不匹配。
实现代码如下(Stack.h头⽂件为之前写的数据结构-栈的顺序结构中写的数组那个⽅法,⽤到了⾥⾯栈的结构和连个基本栈操作)1void Matching(char e[])2 {3 Stack S;4 InitStack(S);5 unsigned int i = 0, state = 1;6char z;7while((int)(i <= strlen(e)) && state && e[i] != '\0') //结束条件超出数组长度或state为0或字符串结束8 {9switch(e[i])10 {11case'(':12case'{':13 Push(S,e[i]); //遇到({则进栈14 i++;15break;16case')':17 GetTop(S,z);18if(!StackEmpty(S) && z == '(') //遇到)则判断栈顶是不是(,是的话出栈,不是则不匹配19 {20 Pop(S,z);21 i++;22 }23else24 state = 0;25break;26case'}':27 GetTop(S,z);28if(!StackEmpty(S) && z == '{')//遇到}则判断栈顶是不是{,是则出栈,不是则不匹配29 {30 Pop(S,z);31 i++;32 }33else34 state = 0;35break;36 }37 }38if(StackEmpty(S) && state) //空栈且state不为0则全部匹配39 printf("括号全部匹配");40else41 printf("括号不匹配");42 }主函数测试代码如下:1void main()2 {3char e[20];4 printf("请输⼊括号:");5 scanf("%s",e);6 Matching(e);7 }测试只要输⼊表达式格式正确,则匹配结果是正确的。
(完整word版)大学数据结构期末知识点重点总结(考试专用)
第一章概论1。
数据结构描述的是按照一定逻辑关系组织起来的待处理数据元素的表示及相关操作,涉及数据的逻辑结构、存储结构和运算2。
数据的逻辑结构是从具体问题抽象出来的数学模型,反映了事物的组成结构及事物之间的逻辑关系可以用一组数据(结点集合K)以及这些数据之间的一组二元关系(关系集合R)来表示:(K, R)结点集K是由有限个结点组成的集合,每一个结点代表一个数据或一组有明确结构的数据关系集R是定义在集合K上的一组关系,其中每个关系r(r∈R)都是K×K上的二元关系3.数据类型a。
基本数据类型整数类型(integer)、实数类型(real)、布尔类型(boolean)、字符类型(char)、指针类型(pointer)b。
复合数据类型复合类型是由基本数据类型组合而成的数据类型;复合数据类型本身,又可参与定义结构更为复杂的结点类型4.数据结构的分类:线性结构(一对一)、树型结构(一对多)、图结构(多对多)5。
四种基本存储映射方法:顺序、链接、索引、散列6。
算法的特性:通用性、有效性、确定性、有穷性7.算法分析:目的是从解决同一个问题的不同算法中选择比较适合的一种,或者对原始算法进行改造、加工、使其优化8.渐进算法分析a.大Ο分析法:上限,表明最坏情况b.Ω分析法:下限,表明最好情况c.Θ分析法:当上限和下限相同时,表明平均情况第二章线性表1.线性结构的基本特征a.集合中必存在唯一的一个“第一元素”b。
集合中必存在唯一的一个“最后元素"c.除最后元素之外,均有唯一的后继d。
除第一元素之外,均有唯一的前驱2.线性结构的基本特点:均匀性、有序性3。
顺序表a.主要特性:元素的类型相同;元素顺序地存储在连续存储空间中,每一个元素唯一的索引值;使用常数作为向量长度b。
线性表中任意元素的存储位置:Loc(ki)= Loc(k0)+ i * L(设每个元素需占用L个存储单元)c. 线性表的优缺点:优点:逻辑结构与存储结构一致;属于随机存取方式,即查找每个元素所花时间基本一样缺点:空间难以扩充d.检索:ASL=【Ο(1)】e。
数据结构实验题目
实验题目一一、单链表基本运算【问题描述】设计并实现线性表的单链表存储和运算。
【基本要求】实现单链表的插入、删除和遍历运算,每种操作用一个函数实现。
插入操作:将一个新元素插入表中指定序号的位置。
删除操作:将指定序号的元素从表中删除。
遍历操作:从表头按次序输入所有元素的值,若是空表,则输出信息“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。
此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。
【选作内容】用顺序存储结构实现该题目。
三、一元多项式相加、减运算器【问题描述】设计一个一元稀疏多项式简单计算器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与信息技术学院
程序设计课程上机实验报告
学号:姓名:班级:
实验时间:2014 年月日实验地点:开发环境:vc++6.0
课程名称:数据结构实验性质:□综合性实验□设计性实验□验证实验
实验内容:括号匹配检验题目来源:□教材□教师补充□自选题目
主要功能描述:
输入一串括号,检验括号是否匹配。
设计分析:
例如,考虑下列括号序列:
[ ( [ ] [ ] ) ]
1 2 3 4 5 6 7 8
当计算机接受了第一个括号后,它期待着与其匹配的第八个括号的出现,然而等来的却是第二个括号,此时第一个括号“[”只能暂时靠边,而迫切等待与第二个括号相匹配的、第七个括号“)”的出现,类似地,因等来的是第三个括号“[”,其期待匹配的程度较第二个括号更急迫,则第二个括号也只能靠边,让位于第三个括号,显然第二个括号的期待急迫性高于第一个括号;在接受了第四个括号之后,第三个括号的期待得到满足,消解之后,第二个括号的期待匹配就成为当前最急迫的任务了,……依此类推。
很显然,这样的一个处理过程和栈的特点非常吻合,因此,这个问题可以用栈来解决。
解决思路:
1.在算法中设置一个栈,每次读入一个括号;
2.若是右括号,则或者使置于栈顶的最急迫的期待得以消解,此时将栈顶的左括号弹出;或者是不合法的情况,此时将右括号压入;
3.若是左括号,则作为一个新的更急迫的期待压入栈中,自然使原有的在栈中的所有未消解的期待的急迫性都降低一级;
4.在算法的开始和结束时,栈应该为空。
Status MatchCheck(SqList exp)
2 /* 顺序表exp表示表达式;*/
3 /* 若exp中的括号配对,则返回TRUE,否则返回FALSE */
4 {
5 Stack s;
6 char e;
7
8 //逐个读入括号
9 for(int i=0;i<exp.length;i++)
10 {
11 if(exp.elem[i]=='('||exp.elem[i]=='{'||exp.elem[i]=='[')//若遇左括号,则直接入栈
12 {
13 Push(s,exp.elem[i]);
14 }
15 else if(exp.elem[i]==')')//若遇右圆括号,则尝试匹配栈顶括号
16 {
17 if(GetTop(s,e))
18 {
19 if(e=='(')//匹配成功,左圆括号出栈
20 {
21 Pop(s,e);
22 }
23 else//匹配不成功,右圆括号入栈
24 {
25 Push(s,exp.elem[i]);
26 }
27 }
28 else//栈为空,则将右括号入栈
29 {
30 Push(s,exp.elem[i]);
31 }
32 }
33 else if(exp.elem[i]=='}')//若遇右花括号,则尝试匹配栈顶括号
34 {
35 if(GetTop(s,e))
36 {
37 if(e=='{')//匹配成功,左花括号出栈
38 {
39 Pop(s,e);
40 }
41 else//匹配不成功,右花括号入栈
42 {
43 Push(s,exp.elem[i]);
44 }
45 }
46 else
47 {
48 Push(s,exp.elem[i]);
49 }
50 }
51 else if(exp.elem[i]==']')//若遇右方括号,则尝试匹配栈顶括号
52 {
53 if(GetTop(s,e))
54 {
55 if(e=='[')//匹配成功,左方括号出栈
56 {
57 Pop(s,e);
58 }
59 else//匹配不成功,右方括号入栈
60 {
61 Push(s,exp.elem[i]);
62 }
63 }
64 else
65 {
66 Push(s,exp.elem[i]);
67 }
68 }
69 }
70 if(StackEmpty(s))//当所有括号匹配成功时,栈应为空
71 {
72 return TRUE;
73 }
74 else
75 {
76 return FALSE;
77 }
78 }
典型测试数据输入:
({})
输出:
匹配成功!预期结果:
匹配成功!
程序及运行结果正误判断:□非常好□正确,还可改进□基本正确,还需改进□还有错误不足之处或设计经验小结:
通过这次实验,学会了如何做好一个操作性比较强的实验。
有清晰的设计思路,良好的设计方案。
任课教师评语:
教师签字:年月日注:每学期至少有一次设计性实验。
每学期结束请任课教师按时按量统一交到教学秘书处。