数据结构-判别括号配对
卡特兰数在数据结构中的应用

卡特兰数在数据结构中的应用卡特兰数是一种在组合数学中广泛应用的数列,它在数据结构中也有着重要的应用。
卡特兰数可以用来表示许多问题的解决方案数量,特别是那些涉及到组合和排列的问题。
在本文中,我们将介绍卡特兰数在数据结构中的一些常见应用。
一、括号匹配问题在许多编程语言中,括号匹配是一种常见的问题。
给定一个字符串,判断其中的括号是否匹配。
例如,对于字符串"(())",括号是匹配的;而对于字符串"(()",括号是不匹配的。
使用卡特兰数可以解决这个问题。
假设有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个顶点,我们可以选择其中一个顶点作为剖分的起点,然后将剩余的顶点分成两个子多边形,分别递归计算其三角剖分数量。
3-1-数据结构——从概念到C++实现(第3版)-王红梅-清华大学出版社

打印缓冲区
【问题】 多个用户共享打印机,保证打印功能。 【想法】 先来先服务原则,设置打印缓冲区,先送到缓冲区的先打印。
数 据 结 构 ( 从 概 念 到 实 现 ) 清 华 大 学 出 版 社
如何保存等待打印的文件?
用队列保存
在实际问题的处理过程中,有些数据具有先到先处理的特点
随处可见的队列
数 据 结 构 ( 从 概 念 到 实 现 ) 清 华 大 学 出 版 社
华 大 学
出
版
社
华 大 学
出
版
社
第三章 v 栈和队列
3-1-2 队列的提出
银行排队问题
【问题】 银行个人储户的储蓄业务。 【想法】 先来先服务原则,模拟排队,储户叫号后排在队尾,窗口顺次叫号。
数 据 结 构 ( 从 概 念 到 实 现 )
清
华
如何保存正在等待的储户顺序?
大 学
出
版
社
用队列保存
在实际问题的处理过程中,有些数据具有先到先处理的特点
如何保存调用位置?
数
A
据 结
构
主
( 从
概
函 数
B
D
念 到 实 现
main
E
) 清
华ቤተ መጻሕፍቲ ባይዱ
C
大 学
出
版
社
用栈保存,返回最后进栈的位置
在实际问题的处理过程中,有些数据具有后到先处理的特点
Office的撤销机制
人生无法后悔,所以且行且珍惜! 计算机后悔很容易,所以大胆往前走!
数 据 结 构 ( 从 概 念 到 实 现 ) 清 华 大 学 出 版 社
(23)10 = (10111)2
实验03:堆栈应用括号匹配实验报告

}
while(!StackEmpty(IntegerStack))
{
Pop(IntegerStack,e);
if(radix <= 10)
cout<<e;
else
Tran(e);
}
cout<<".";
InitQueue(DecimalQueue);
i = 3;
while(i)
Q.front = Q.rear = 0;
return true;
}
bool EnQueue(SqQueue &Q,int e)
{
Q.base[Q.rear] = e;
Q.rear++;
return true;
}
bool DeQueue(SqQueue &Q,int &e)
{
if(Q.front == Q.rear)
2、算法
顺序扫描算术表达式
若算术表达式扫描完成,此时如果栈空,则正确返回(0);如果栈未空,说明左括号多于右括号,返回(-3)
从算术表达式中取出一个字符,如果是左括号(‘(‘或‘[‘或 ‘{‘),则让该括号进栈(PUSH)
如果是右括号(‘)‘或‘]‘或 ‘}‘):
2、如果栈为空,则说明右括号多于左括号,返回(-2)
}
bool Pop(SqStack &S,int &e)
{
if(S.top == S.base)
return false;
e = *--S.top;
return true;
}
bool StackEmpty(SqStack &S)
数据结构简答题和论述题

数据结构简答题和论述题1、试描述数据结构和抽象数据类型的概念与程序设计语⾔中数据类型概念的区别。
【解答】数据结构是指相互之间存在⼀定关系的数据元素的集合。
⽽抽象数据类型是指⼀个数据结构以及定义在该结构上的⼀组操作。
程序设计语⾔中的数据类型是⼀个值的集合和定义在这个值集上⼀组操作的总称。
抽象数据类型可以看成是对数据类型的⼀种抽象。
串:是零个或多个字符组成的有限序列。
串是⼀种特殊的线性表,它的每个结点仅由⼀个字符组成。
空串 :长度为零的串,它不包含任何字符。
空⽩串 :仅由⼀个或多个空格组成的串⼦串 :串中任意个连续字符组成的⼦序列称为该串的⼦串。
串变量和串常量通常在程序中使⽤的串可分为:串变量和串常量。
(1)串变量 :串变量和其它类型的变量⼀样,其取值是可以改变的。
(2)串常量 :串常量和整常数、实常数⼀样,在程序中只能被引⽤但不能改变其值。
即只能读不能写。
(1)树形图表⽰: 树形图表⽰是树结构的主要表⽰⽅法。
(2)树的其他表⽰法① 嵌套集合表⽰法:是⽤集合的包含关系来描述树结构。
② 凹⼊表表⽰法:类似于书的⽬录③ ⼴义表表⽰法:⽤⼴义表的形式表⽰的。
上图 (a)树的⼴义表表⽰法如下:(A(B(E,F(I,J)), C,D(G,H)))1.中序遍历的递归算法定义:若⼆叉树⾮空,则依次执⾏如下操作:(1)遍历左⼦树; (2)访问根结点; (3)遍历右⼦树。
2.先序遍历的递归算法定义:若⼆叉树⾮空,则依次执⾏如下操作:(1) 访问根结点; (2) 遍历左⼦树; (3) 遍历右⼦树。
3.后序遍历得递归算法定义:若⼆叉树⾮空,则依次执⾏如下操作:(1)遍历左⼦树; (2)遍历右⼦树; (3)访问根结点。
2、链表具有的特点是B 插⼊、删除不需要移动元素C 不必事先估计存储空间D 所需空间与线性表长度成正⽐顺序队列(1)队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。
(2) 顺序队列的表⽰①和顺序表⼀样顺序队列⽤⼀个向量空间存放当前队列中的元素。
数据结构算法——判断表达式中的括号是否匹配

数据结构算法——判断表达式中的括号是否匹配元旦三天假,闲着没事⼲,就想着复习⼀下学数据结构时的那些算法吧。
本来是想⽤C语⾔来写的,⽆奈啊,三四年没⽤C了,基本上忘光光,还是⽤C#来写吧,⽽且.Net基类库中已经有了栈、队列等的实现,直接拿来⽤⽤吧。
第⼀个算法是⽤来判断表达式中的括号(仅限⼩括号)是否匹配的。
(其实哥很想找个妹⼦出去约会啊,不想复习神马算法啊,可惜的是找不到妹⼦,哭死)对于表达式中的括号是否匹配,不能仅仅通过统计左括号'('出现的次数和右括号')'出现的次数是否相等来实现,“a*)b+c(”这样的表达式中的括号显然是不匹配的。
检验括号是否匹配最常见的⽅法是借助于栈这种数据结构,从左到右逐个字符扫描表达式,碰到左括号"("则压⼊栈中(push),碰到右括号")"则弹出栈顶元素(pop)如果栈为空,则匹配失败。
字符串扫描完成后,如果栈为空,则匹配成功,否则匹配失败。
代码如下:public static class AlgorithmAboutStack{///<summary>///此⽅法⽤于判断输⼊的表达式中的括号是否匹配,即左括号的个数与右括号是否相等///</summary>///<param name="expression">输⼊的表达式</param>///<returns></returns>public static bool IsBracketMatch(string expression){if (string.IsNullOrEmpty(expression)){throw new ArgumentException();}Stack<char> leftBrackets = new Stack<char>();foreach (char c in expression){if (c=='('){leftBrackets.Push(c);}if (c==')'){if (leftBrackets.Count==0){return false;}else{leftBrackets.Pop();}}}return leftBrackets.Count == 0;}}。
数据结构C语言版部分习题及答案[2]
![数据结构C语言版部分习题及答案[2]](https://img.taocdn.com/s3/m/e044a021e87101f69e319522.png)
第二章习题与解答一判断题1.线性表的逻辑顺序与存储顺序总是一致的。
2.顺序存储的线性表可以按序号随机存取。
3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。
4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。
5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
7.线性表的链式存储结构优于顺序存储结构。
8.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。
9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。
10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
二单选题 (请从下列A,B,C,D选项中选择一项)1.线性表是( ) 。
(A) 一个有限序列,可以为空;(B) 一个有限序列,不能为空;(C) 一个无限序列,可以为空;(D) 一个无序序列,不能为空。
2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。
插入一个元素时平均要移动表中的()个元素。
(A) n/2 (B) n+1/2 (C) n -1/2 (D) n3.线性表采用链式存储时,其地址( ) 。
(A) 必须是连续的;(B) 部分地址必须是连续的;(C) 一定是不连续的;(D) 连续与否均可以。
4.用链表表示线性表的优点是()。
(A)便于随机存取(B)花费的存储空间较顺序存储少(C)便于插入和删除(D)数据元素的物理顺序与逻辑顺序相同5.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。
(A)单链表(B)双链表(C)单循环链表(D)带头结点的双循环链表6.循环链表的主要优点是( )。
(A)不在需要头指针了(B)已知某个结点的位置后,能够容易找到他的直接前趋(C)在进行插入、删除运算时,能更好的保证链表不断开(D)从表中的任意结点出发都能扫描到整个链表7.下面关于线性表的叙述错误的是( )。
数据结构算法设计题及答案

数据结构算法设计题及答案1、对带表头结点的有序单链表,编写算法向单链表中插入元素x,使其保持有序。
答案:typedef datatype int;struct node //结点结构{ datatype data;node * next;};//注:也可以用自然语言描述void insertOrder(node *head, datatype x) //统计{ node *s;p=head;while (p->next ->data<x)p=p->next;s=( node *)malloc(sizeof(node)) ;s->data=x;s->next= p->next;p->next=s;}2、对带表头结点的单链表,编写算法求单链表的长度。
答案:typedef datatype int;struct node //结点结构{ datatype data;node * next;};//注:也可以用自然语言描述int Length(node *head) // 求单链表的长度{ int num=0;node *p=head->next;while (p){num++ ;p=p->next;}return num;}3、试写出单链表的插入与删除算法,并用C编写相应的程序。
答案:typedef datatype int;struct node //结点结构{ datatype data;node * next;};单链表的插入参考算法://在包含元素x的结点前插入新元素bvoid ins_linked_LList(node * head , datatype x, datatype b) { node *p, *q;p=new node ;//申请一个新结点p->d=b;//置新结点的数据域if (head==NULL)//原链表为空{ head=p; p->next=NULL; return;}if (head->d==x)//在第一个结点前插入{ p->next=head;head=p;return; }q=head;while ((q->next!=NULL)&&(((q->next)->d)!=x))q=q->next;//寻找包含元素x的前一个结点qp->next=q->next;q->next=p;//新结点p插入到结点q之后return;}单链表的删除参考算法:int del_linked_LList(node * head ,T x) //删除包含元素x的结点元素{ node *p, *q;if (head==NULL) return(0); //链表为空,无删除的元素if ((head->d)==x)//删除第一个结点{ p=head->next; delete head; head=p; return(1); }q=head;while ((q->next!=NULL)&&(((q->next)->d)!=x))q=q->next;//寻找包含元素x的前一个结点qif (q->next==NULL)return(0); //链表中无删除的元素p=q->next; q->next=p->next;//删除q的下一个结点pdelete p;//释放结点p的存储空间return(1);}4、对带表头结点的单链表,编写算法统计单链表中大于x的元素个数。
括号配对问题实验报告(3篇)

第1篇一、实验目的本研究旨在探讨括号配对问题(Balanced Parentheses Problem)的解决策略,分析不同背景知识、认知风格和问题解决经验对括号配对问题解决的影响,以期为相关教学和实践提供参考。
二、实验背景括号配对问题是一种典型的逻辑推理问题,主要考察个体对括号结构的理解和运用能力。
在计算机科学、数学、逻辑学等领域中,括号配对问题具有广泛的应用。
然而,由于括号配对问题的复杂性,许多人难以在短时间内解决此类问题。
因此,研究括号配对问题的解决策略具有重要的理论意义和实际应用价值。
三、实验方法1. 实验对象:选取60名大学生作为实验对象,随机分为三组,每组20人。
其中,A组为计算机科学专业学生,B组为数学专业学生,C组为非计算机及数学专业学生。
2. 实验材料:设计50道括号配对问题,分为易、中、难三个难度级别,每级各15道题。
3. 实验步骤:(1)对实验对象进行分组;(2)对实验对象进行括号配对问题解决能力测试,包括易、中、难三个难度级别的题目;(3)收集实验数据,分析不同背景知识、认知风格和问题解决经验对括号配对问题解决的影响。
四、实验结果与分析1. 不同背景知识对括号配对问题解决的影响A组学生在易、中、难三个难度级别的括号配对问题解决中均优于B组和C组。
这说明计算机科学专业学生在括号配对问题解决方面具有明显优势。
2. 认知风格对括号配对问题解决的影响在易、中、难三个难度级别的括号配对问题解决中,A组和B组学生的直觉型认知风格与逻辑型认知风格无明显差异。
然而,C组学生的直觉型认知风格在易、中、难三个难度级别的括号配对问题解决中均低于逻辑型认知风格。
3. 问题解决经验对括号配对问题解决的影响A组和B组学生在易、中、难三个难度级别的括号配对问题解决中均优于C组。
这说明问题解决经验在括号配对问题解决中具有重要作用。
五、结论与建议1. 结论(1)括号配对问题解决能力与个体背景知识、认知风格和问题解决经验密切相关;(2)计算机科学专业学生在括号配对问题解决方面具有明显优势;(3)问题解决经验在括号配对问题解决中具有重要作用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计题目判别括号配对学院计算机科学与技术学院专业计算机班级姓名指导教师20 年月日目录课程设计任务书 (3)1.设计题目 (4)2.问题描述 (4)3.实验目的 (4)4.实验分析 (4)4.1分析 (4)4.2括号不匹配的情况 (4)4.3括号匹配的情况 (4)4.4实验步骤 (5)5.设计 (5)5.1数据结构设计 (6)5.2主要算法设计 (8)5.3测试用例设计 (9)6.调试报告 (9)7.体会与总结 (9)附表:1.源程序 (11)2.运行结果 (15)评分表 (16)附件2:课程设计任务书学生姓名:专业班级:指导教师:工作单位:计算机科学系题目: 判别括号配对一个算术表达式含圆括号、中括号、花括号,且它们可任意嵌套使用。
写一程序,判断任一算术表达式中所含括号是否正确配对。
(1)表达式从键盘输入。
(2)利用栈求解此问题。
(3)测试用例自己设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:1、问题描述简述题目要解决的问题是什么。
2、设计存储结构设计、主要算法设计(用类C语言或用框图描述)、测试用例设计;3、调试报告调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。
4、经验和体会(包括对算法改进的设想)5、附源程序清单和运行结果。
源程序要加注释。
如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出,6、设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。
时间安排:1、第19周完成。
2、7月1 日14:00到计算中心检查程序、交课程设计报告、源程序(CD盘)。
指导教师签名:年月日系主任(或责任教师)签名:年月日1.设计题目判断括号配对的程序设计2.问题描述1、问题:一个算术表达式含圆括号、中括号、花括号,且它们可任意嵌套使用。
写一程序,判断任一算术表达式中所含括号是否正确配对。
2、要求:(1)表达式从键盘输入。
(2)利用栈求解此问题。
(3)测试用例自己设计。
3、说明:检验表达式中的括号匹配情况。
假设在一个算术表达式中,可以包含三种括号:圆括号"("和")",方括号"["和"]",以及花括号"{"和"}"。
并且这三种括号可以按任意的次序嵌套使用。
比如,.{..[......[...]...].}..(...)..。
现在需要设计一个算法,用来检验在输入的算术表达式中所使用括号的合法性。
3.实验目的1.掌握顺序栈的类型定义方法。
2.掌握栈先进后出运算原则在解决实际问题中的应用3.掌握使用栈的原理来解决表达式中的括号配对问题。
4.实验分析4.1分析:算术表达式中各种括号的使用规则为:出现左括号,必有相应的右括号与之匹配,并且每对括号之间可以嵌套,但不能出现交叉情况。
我们可以利用一个栈结构保存每个出现的左括号,当遇到右括号时,从栈中弹出左括号,检验匹配情况。
4.2括号不匹配的情况:在检验过程中,若遇到以下几种情况之一,就可以得出括号不匹配的结论。
(1)当遇到某一个右括号时,栈已空,说明到目前为止,右括号多于左括号;(2)从栈中弹出的左括号与当前检验的右括号类型不同,说明出现了括号交叉情况;(3)算术表达式输入完毕,但栈中还有没有匹配的左括号,说明左括号多于右括号。
4.3括号匹配的情况表达式中允许含有三种括号,括号对之间允许嵌套,本实验编写一个程序判断从键盘输入的任意表达式中括号是否配对,括号不配对包括以下几种情况:(1)左括号多余(2)右括号多余(3)左右括号不匹配,如左圆括号对着的是右方括号等。
4.4.实验步骤E1:创建一个顺序栈;E2:输入一串需要检验的括号到一个字符数组中;E3:判断数组中括号是否全部检验完了:E31:m=-1就退出循环;E32:m!=-1说明还有括号需要检验:E321:遇到左括号,入栈;E322:遇到右括号,判断当前栈顶元素:E3221:栈顶元素是与之匹配的左括号,出栈;E3222栈顶元素不是与之匹配的左括号,令判定符=-1,退出循环。
E4:判断括号是否匹配:E41:判断符= -1或者栈中还有元素,输出“括号不匹配”;E42:判断符= 0并且栈中没有元素了,输出“括号匹配”;5.设计5.1数据结构设计栈的抽象数据类型如下:#define STACK-INIT-SIZE 100; //存储空间初始分配量#define STACKINCREAMENT 10; //存储空间分配增量Type struct{SElemType *base;//在构造之前和销毁之后,base的值为NULL;SElemType *top; //栈顶指针Int stacksize; //当前分配的存储空间,以元素为单位}Sqstakck;基本操作的函数原型说明:Status InitStack(SqStack &S)操作结果:构造一个空栈SStatus DestroyStack (SqStack &S)初始条件:栈S已存在.操作结果:销毁栈S.Status ClearStack (SqStack &S)初始条件: 栈S已存在.操作结果:将S重置为空栈Status StackEmpty(SqStack S)初始条件: 栈S已存在.操作结果:若栈S为空栈,则返回TRUE,否则返回FALSE.Status StackLength(SqStack S)初始条件: 栈S已存在.操作结果:返回S 中数据元素个数.即栈的长度.Status GetTop (SqStack S ,SElement &e)初始条件: 栈S已存.操作结果:用e返回S的栈顶元素.并返回OK,否则返回ERROR.Status Push (SqStack &S,SElemType &e)初始条件: 栈S已存在.操作结果:插入元素e为新的栈顶元素Status Pop(SqStack &S, SElemType &e)初始条件: 栈S已存在.操作结果:则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR.. Status StackTraverse(SqStack S, Status(*visit)( ) );初始条件: 栈S已存在.操作结果:从栈底到栈顶依次对栈中每个元素调用函数visit()。
一旦visit()失败,则操作失败5.2主要算法设计:主要算法是栈类的定义,用不同的栈的函数实现算法,则需要有不同的类的定义。
如下,给出了栈的初始化,括号入栈,出栈以及判断括号配对的函数:(1)建立初始化链栈void creatstack(Stack &S){S.top=S.base=NULL;}(2)左括号入栈void push(Stack &S,char e){SqStack* Q;Q=(SqStack*)malloc(sizeof(SqStack));Q->next=S.top;S.top=Q;S.top->data=e;++Aj;}(3)括号出栈char Pop(Stack &S){char e;SqStack *q;e=S.top->data;q=S.top->next;free(S.top);S.top=q;return e;}(4)判断括号匹配首先输入表达式,括号入栈出栈。
当遇到左括号时,入栈。
而当遇到右括号时,查找与其配对的左括号,找到则出栈,并继续检测下一个右括号是否有与其配对的左括号,没有则括号不配对,结束。
构造check函数,int check( ){a=1,Aj=0;int w=0;char sh,ch,*st,*stt;printf("请输入算术表达式并以“=”结束输入:\n");scanf("%s",string);getchar();st=stt=string;ch=*st;sh=*++stt;while(ch!='='){if(w==0)if(ch==']'||ch=='}'||ch==')'){a=-1;Aj=1;}if((ch=='['||ch=='('||ch=='{')&&(sh=='=')){a=-1;Aj++;break;}if(a==-1)break;w++;if(ch=='['||ch=='('||ch=='{'||ch==']'||ch=='}'||ch==')')//判断是否满足入栈和出栈条件switch(ch){case '[': {push(S,ch);break;}case '{': {push(S,ch);break;}case '(': {push(S,ch);break;}//左括号入栈case ']':if(Pop(S)!='['){a=-1;Aj++;break;}else{ Aj++;break;}case ')':if( Pop(S)!='('){a=-1;Aj++;break;}else{Aj++;break;}case '}':if( Pop(S)!='{'){ a=-1;Aj++;break;}else{Aj++;break;}}//出栈并与字符ch匹配比较ch=*(++st);sh=*(++stt);if((S.base==S.top)&&(ch==']'||ch=='}'||ch==')')){ a=-1;Aj++;}if(a==-1)break;}if(S.base!=S.top)a=-1;return a;}5.3测试用例设计由于本次的程序主要是实现判别括号配对的功能,我们关注的是是否可以按照要求实现程序应该具有的功能.1.我们测试简单表达式是否符合要求.2.测试一些较复杂的的表达式等.3.测试多种括号嵌套的表达式。
4测试表达式(1)(1+2)/3=(2){[(1+2)*3-4]/5+6}*3=(3){[(1+23)/3-4]*6+8}/4}+{(2-5)*9}=(4)(1+2=(5)[1+2)/4=(6){[(1+2)/4+2}*4-3}/5*[3+8]=(7) {[(1+2)/4+2]*4-3}/5*[3+8]=其中(1)、(2)、(3)、(7)是括号匹配的表达式,(4)、(5)、(6)是括号不匹配的表达式。