数据结构中的计算表达式

合集下载

数据结构在现实生活中的应用

数据结构在现实生活中的应用

数据结构在现实生活中的应用数据结构在现实生活中的应用⒈序言本文档旨在介绍数据结构在现实生活中的应用。

数据结构是计算机科学中非常重要的概念之一,它提供了存储和组织数据的方式和方法。

虽然数据结构通常与计算机程序相关联,但它们也在我们的日常生活中起到重要作用。

⒉数组(Array)的应用⑴数据存储:数组被广泛用于存储和管理数据。

例如,我们可以使用数组来存储学生的成绩、员工的工资等信息。

⑵图像处理:图像可以由像素数组组成。

通过操作数组中的元素,我们可以对图像进行处理,例如修改亮度、调整对比度等。

⑶数学模型:数组可以用于表示和处理数学模型。

例如,我们可以使用数组来存储和计算矩阵。

⒊链表(Linked List)的应用⑴链表结构:链表结构在许多现实生活中的情况下很有用。

例如,我们可以使用链表来表示地铁线路,每个节点表示一个站点,节点之间的表示站点之间的连接。

⑵数据处理:链表可以用于处理大量的数据。

它们允许动态的插入和删除操作,这在某些情况下是很有用的。

例如,在社交网络中,我们可以使用链表来存储和管理用户之间的关系。

⒋栈(Stack)和队列(Queue)的应用⑴符号匹配:使用栈可以判断括号是否匹配。

在编译器和解释器中,栈被广泛用于处理符号匹配问题。

⑵计算表达式:栈可以用于计算中缀表达式和后缀表达式。

它们还可以用于实现逆波兰表达式和算术表达式的求值。

⑶进程调度:队列可以用于进程调度。

操作系统使用队列来管理进程,并按照一定的策略对它们进行分配和执行。

⒌树(Tree)的应用⑴文件系统:文件系统通常使用树的结构来组织和管理文件和目录。

每个节点表示一个文件或目录,节点之间的表示它们之间的层次关系。

⑵数据搜索:二叉搜索树是一种常用的数据结构,用于高效地搜索和插入数据。

它们广泛用于数据库和搜索引擎中。

⑶组织结构:树可以用于表示组织结构。

例如,一家公司的组织架构可以被表示为一个树,根节点表示公司,子节点表示部门和员工。

⒍图(Graph)的应用⑴网络路由:图可以用于网络路由算法。

数据结构——精选推荐

数据结构——精选推荐

数据结构《数据结构》教学⼤纲哈尔滨师范⼤学信息科学系《数据结构》⼀、课程设置的有关说明1.课程性质:是必修课、选修课<数据结构>是信息与计算科学专业的必修的核⼼课程。

是学习计算机和本专业后续课程的基础,也是今后⼯作中必备的和最常⽤的知识。

2.课程定义:(简要描述、该课程在学习中的地位、作⽤及发展状况)它主要内容是讨论现实世界中数据(既事物的抽象描述)的各种逻辑结构,以及进⾏各种⾮数值运算的算法。

⽬的是使学⽣掌握数据组织、存储和处理的常⽤⽅法,为以后进⾏软件开发和学习后续专业课打下基础。

3.设置本课程的⽬的和基本要求:本课程是为继续学学习计算机软件和进⾏软件开发打下坚实的基础。

为此,本课程在选材和内容组织等⽅⾯⼒求做到:科学性、新颖性和实⽤性相结合,⼒图在阐明基本原理和⽅法的同时,也能反映某些最新研究成果,使学⽣牢固地掌握本学科的基本知识。

4.教学内容简介数据的逻辑结构分为线性结构、树(层次)结构和图形结构、链接结构、索引结构和散列结构中的⼀种或多种的组合。

对数据进⾏的⾮数值运算主要包括插⼊、删除、查找、和输出等。

需要特别指出:数据的存储结构既适⽤于内存,也适⽤于外存,不仅要学会对内存数据操作的算法,⽽且要学会对外存数据(⽂件)操作的算法,这样才能解决实际软件开发的问题,达到学以致⽤的⽬的。

⼆、具体教学内容第⼀章绪论(4学时)教学⽬的和教学基本要求:要求了解什么是数据结构,及其相关的术语。

了解学习本课程所必须的C++知识。

掌握如何进⾏算法评价,包括正确性、健壮性、可读性、简单性、时间复杂性和空间复杂性等。

内容提要:第⼀节常⽤术语基本教学内容:对数据结构中⼀些常⽤的名词和术语给以确定的含义。

包括数据、数据元素、数据记录、关键字、关键项、数据处理、数据结构、线性结构、树形结构、图形结构、数据类型、抽象数据类型、数据对象和算法。

重点是关键字、线性结构、树形结构和图形结构,难点是数据结构的⼏种形式。

数据结构第三章习题答案解析

数据结构第三章习题答案解析

第三章习题1.按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么?⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。

(即写出以“S”表示进栈、以“X”表示出栈的栈操作序列)。

2.设队列中有A、B、C、D、E这5个元素,其中队首元素为A。

如果对这个队列重复执行下列4步操作:(1)输出队首元素;(2)把队首元素值插入到队尾;(3)删除队首元素;(4)再次删除队首元素。

直到队列成为空队列为止,得到输出序列:(1)A、C、E、C、C (2) A、C、E(3) A、C、E、C、C、C (4) A、C、E、C3.给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?4.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:A-B*C/D+E↑F5.试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1& 序列2’模式的字符序列。

其中序列1和序列2中都不含字符’&’,且序列2是序列1的逆序列。

例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。

6.假设表达式由单字母变量和双目四则运算算符构成。

试写一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰式。

7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。

8.要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。

9.简述以下算法的功能(其中栈和队列的元素类型均为int):(1)void proc_1(Stack S){ int i, n, A[255];n=0;while(!EmptyStack(S)){n++; Pop(&S, &A[n]);}for(i=1; i<=n; i++)Push(&S, A[i]);}(2)void proc_2(Stack S, int e){ Stack T; int d;InitStack(&T);while(!EmptyStack(S)){ Pop(&S, &d);if (d!=e) Push( &T, d);}while(!EmptyStack(T)){ Pop(&T, &d);Push( &S, d);}}(3)void proc_3(Queue *Q){ Stack S; int d;InitStack(&S);while(!EmptyQueue(*Q)){DeleteQueue(Q, &d);Push( &S, d);}while(!EmptyStack(S)){ Pop(&S, &d);EnterQueue(Q,d)}}实习题1.回文判断。

波兰表达式和逆波兰表达式

波兰表达式和逆波兰表达式

波兰表达式和逆波兰表达式波兰表达式和逆波兰表达式是两种不同的数学表达式表示方法,它们都是数学领域中常用的算术表达式形式。

这两种表达式形式在计算机科学领域中也非常重要,尤其在编译器设计和计算机科学理论中有着广泛的运用。

一、波兰表达式(Polish Notation)波兰表达式是由波兰数学家扬·奥尔加罗夫斯基(JanŁukasiewicz)在1920年引入的一种新型数学表达式方式。

波兰表达式的特点是将操作符写在其对应的操作数之前,这样的表达方式也被称为前缀表达式。

例如,将传统的中缀表达式"3 + 4"转换成波兰表达式的形式,变为"+ 3 4"。

在波兰表达式中,操作符出现在对应的操作数之前。

波兰表达式的特点使得它具有一些优势。

首先,波兰表达式没有括号,因为操作符的位置明确,减少了解析表达式的复杂性;其次,波兰表达式可以直接用栈进行计算,简化了表达式的求值过程。

二、逆波兰表达式(Reverse Polish Notation)逆波兰表达式是由澳大利亚科学家查利斯·哈米脱(Charles Hamblin)在1957年引入的一种表达式形式。

逆波兰表达式的特点是将操作符写在对应的操作数之后,这种表达方式也被称为后缀表达式。

例如,将传统的中缀表达式"3 + 4"转换成逆波兰表达式的形式,变为"3 4 +"。

在逆波兰表达式中,操作符出现在对应的操作数之后。

逆波兰表达式相较于波兰表达式也有一些优势。

首先,逆波兰表达式同样没有括号,减少了解析表达式的复杂性;其次,逆波兰表达式的计算过程更加直观,可以通过简单的遍历来按照操作符进行计算。

三、波兰表达式和逆波兰表达式的应用波兰表达式和逆波兰表达式在计算机科学领域中有广泛的应用。

1.编译器设计:波兰表达式和逆波兰表达式是编译器设计中的重要概念。

编译器在解析和计算表达式时,可以通过将中缀表达式转换为波兰表达式或逆波兰表达式来简化计算过程。

数据类型 运算符和表达式

数据类型 运算符和表达式
数据类型 运算符和表达式
c语言基础知识
本章主要内容
2
本章介绍C语言的基础,包括: – 数据类型 – 运算符和表达式
均是程序设计的基本知识 为什么讨论这些知识?
通常程序要对数据进行操作处理: – 处理的对象是数据 – 通过运算符和表达式进行操作
2022/9/25
例如:
3
【例2.1】计算圆的面积,半径为 5 cm。 程序如下:
例如: 100 010 0x38
-8 024 0x10
0 0100 0X10
+123 073 0XFF
0x0a
2022/9/25
1. 整型常量
17
整型常量的类型: – 根据值大小默认类型。 – 整型常量后面加l或L,则认为是long int型 例如:123L、0L、432l、0x100l
注意:
十六进制常量中可以使用大写字母A~F, 也可以使用小写字母a~f。
2022/9/25
算术运算
33
算术运算符的优先级
( ) + - ++ -- * / %
同级
同级
+同级
单目 高
双目 低
没有乘方运算符,要计算a3要写作 a*a*a 的连乘, 或用标准库函数 pow(a, 3)
“/”的运算对象可为各种类型数据,但是当进行两 个整型数据相除时,运算结果也是整型数据
一般而言,小数部分位数多,数据表示的有效数字多, 精度就高;而指数部分位数多,则表示的数据范围更大。
有效数字的意义?
2022/9/25
3 字符型数据
14
字符型数据char,分配 1 Byte
字符型数据是指字母、数字、各种符号等 用ASCII值表示的字符

计算24点 数据结构

计算24点 数据结构

目录课程设计任务书 -------------------------1 =课程设计任务书学生姓名:赵旭林专业班级:计算机科学与技术0801 指导教师:杨克工作单位:计算机科学系题目: 计算24点初始条件:有2、3、4、5、6、7、8、9、10、J、Q、K、A共13张牌,编一程序,判断对任意给定的4张牌,能否在进行加、减、乘、除运算后,其运算结果等于24。

其中J按11计算,Q按12计算,K按13计算,A按1计算。

(1)能接受用户输入的4张牌点,并进行24点判断,并输出判定结果。

(2)若能得到结果24,要求输出至少一个可得到该结果的计算表达式。

例如,对给定的2,7,J,Q,按下述方法计算可得到结果24:(J-7)*(Q/2) 或 Q*(J-2-7)(3)若不能得到24点,亦应输出提示。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:1. 问题描述简述题目要解决的问题是什么。

2. 设计存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计;3. 调试报告调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。

4. 经验和体会(包括对算法改进的设想)5. 附源程序清单和运行结果。

源程序要加注释。

如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出。

说明:1. 设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。

2. 凡拷贝往届任务书或课程设计充数者,成绩一律无效,以0分记。

时间安排:1、第18周完成。

2、7月2日8:30时到实验中心检查程序、交课程设计报告、源程序(U盘)。

指导教师签名: 2010年月日系主任(或责任教师)签名: 2010年月日数据结构课程设计正文--计算24点1.问题描述在A、2、3、4、5、6、7、8、9、10、J、Q、K中任意选择4个数,通过这4个数进行任意+ 、- 、*、 /的运算(这四个数可以任意排列),而且可以添加需要的“()”来进行先后运算。

数据计算公式

数据计算公式数据计算公式是指用来计算数值结果的数学表达式或者算法。

它们在各个领域的数据分析和科学研究中起着重要的作用。

本文将详细介绍数据计算公式的标准格式、常见的数据计算公式以及如何使用这些公式进行数据计算。

一、数据计算公式的标准格式数据计算公式通常由数学符号、运算符、变量和常数组成。

以下是数据计算公式的标准格式:1. 数学符号:数据计算公式中常用的数学符号包括加号(+)、减号(-)、乘号(*)、除号(/)、等号(=)等。

这些符号用于表示不同的数学运算。

2. 运算符:数据计算公式中的运算符用于表示不同的数学运算。

常见的运算符包括加法运算符(+)、减法运算符(-)、乘法运算符(*)、除法运算符(/)、幂运算符(^)等。

3. 变量:数据计算公式中的变量是用来表示待计算的数值或者数据。

变量可以是单个数值,也可以是数据集合。

变量通常用字母表示,例如x、y、z等。

4. 常数:数据计算公式中的常数是指在计算过程中保持不变的数值。

常数可以是整数、小数或者其他数值。

常见的常数包括π(圆周率)、e(自然对数的底数)等。

二、常见的数据计算公式1. 加法公式:加法公式用于计算两个数值的和。

其标准格式为:C = A + B,其中A和B为待相加的数值,C为它们的和。

2. 减法公式:减法公式用于计算两个数值的差。

其标准格式为:C = A - B,其中A为被减数,B为减数,C为它们的差。

3. 乘法公式:乘法公式用于计算两个数值的积。

其标准格式为:C = A * B,其中A和B为待相乘的数值,C为它们的积。

4. 除法公式:除法公式用于计算两个数值的商。

其标准格式为:C = A / B,其中A为被除数,B为除数,C为它们的商。

5. 平均值公式:平均值公式用于计算一组数值的平均值。

其标准格式为:C = (A1 + A2 + ... + An) / n,其中A1到An为待计算平均值的数值,n为数值的个数,C为它们的平均值。

6. 百分比公式:百分比公式用于计算一个数值相对于另一个数值的百分比。

计算机基础的所有计算公式

计算机基础的所有计算公式在计算机科学领域,有许多基础的计算公式,这些公式在程序设计、算法分析和数据处理等方面都有着重要的作用。

本文将介绍一些常见的计算机基础公式,包括时间复杂度、空间复杂度、数据结构等方面的公式。

一、时间复杂度公式。

时间复杂度是衡量算法执行效率的重要指标,通常用大O表示。

常见的时间复杂度公式包括:1. 常数时间复杂度,O(1)。

常数时间复杂度表示算法的执行时间与输入规模无关,即算法的执行时间是一个常数。

例如,对一个数组进行索引操作的时间复杂度就是O(1)。

2. 线性时间复杂度,O(n)。

线性时间复杂度表示算法的执行时间与输入规模成正比。

例如,对一个长度为n的数组进行遍历操作的时间复杂度就是O(n)。

3. 对数时间复杂度,O(log n)。

对数时间复杂度表示算法的执行时间与输入规模的对数成正比。

例如,二分查找算法的时间复杂度就是O(log n)。

4. 平方时间复杂度,O(n^2)。

平方时间复杂度表示算法的执行时间与输入规模的平方成正比。

例如,对一个长度为n的数组进行双重循环操作的时间复杂度就是O(n^2)。

5. 指数时间复杂度,O(2^n)。

指数时间复杂度表示算法的执行时间与输入规模的指数成正比。

例如,求解斐波那契数列的递归算法的时间复杂度就是O(2^n)。

二、空间复杂度公式。

空间复杂度是衡量算法所需内存空间的指标,通常也用大O表示。

常见的空间复杂度公式包括:1. 常数空间复杂度,O(1)。

常数空间复杂度表示算法所需的内存空间与输入规模无关,即算法所需的内存空间是一个常数。

例如,交换两个变量的值不需要额外的内存空间,其空间复杂度就是O(1)。

2. 线性空间复杂度,O(n)。

线性空间复杂度表示算法所需的内存空间与输入规模成正比。

例如,对一个长度为n的数组进行遍历操作并存储结果的空间复杂度就是O(n)。

3. 对数空间复杂度,O(log n)。

对数空间复杂度表示算法所需的内存空间与输入规模的对数成正比。

数据结构后缀表达式转换过程

数据结构后缀表达式转换过程在计算机科学中,数据结构是非常重要的一部分,而表达式的转换则是其中一个常见且关键的操作。

今天,咱们就来深入探讨一下后缀表达式的转换过程。

先来说说啥是后缀表达式。

简单来讲,后缀表达式就是把运算符放在操作数的后面。

比如说,对于常见的中缀表达式“2 +3”,它的后缀表达式就是“2 3 +”。

那为啥要研究后缀表达式的转换呢?这是因为后缀表达式在计算机计算时更方便、更高效。

那后缀表达式是怎么从常见的中缀表达式转换过来的呢?这就得提到一个重要的工具——栈。

咱们来一步步看这个转换过程。

假设咱们有一个中缀表达式,比如“3 +4 2 1”。

第一步,咱们要把这个中缀表达式中的数字和运算符一个一个地读进来。

当读到数字的时候,直接输出。

比如说,一开始读到 3,那就直接把 3 输出。

当读到运算符的时候,这就得和栈打交道了。

如果栈为空,那就把这个运算符直接入栈。

要是栈不为空,那就得比较当前运算符和栈顶运算符的优先级。

如果当前运算符的优先级高于栈顶运算符,那就把当前运算符入栈;要是当前运算符的优先级低于或者等于栈顶运算符,那就把栈顶运算符出栈并输出,然后再继续比较当前运算符和新的栈顶运算符,直到当前运算符的优先级高于栈顶运算符或者栈为空,再把当前运算符入栈。

比如说,读到“+”的时候,栈为空,那就把“+”入栈。

接着读到“”,因为“”的优先级高于“+”,所以把“”入栈。

再读到“”,因为“”的优先级低于“”,所以把“”出栈并输出,然后再比较“”和“+”,因为“”的优先级高于“+”,所以把“”入栈。

当整个中缀表达式都读完之后,把栈中剩下的运算符依次出栈并输出。

按照这个步骤,咱们就能把“3 +4 2 1”这个中缀表达式转换为后缀表达式“3 4 2 +1 ”。

在实际的编程中,实现这个转换过程可能会用到一些数据结构和算法的知识。

比如说,用数组或者链表来实现栈,用循环和条件判断来处理表达式的读取和转换。

再举个例子,“(2 +3) 4 5”。

《数据结构(C语言描述)》-马秋菊-源代码和习题参考答案

习题配套第一章2.C、A、B、B、A、A、D3.D={A,B,C,E,F,G,H,I,J};R={<A,B>,<A,C>,<A,E>,<B,F>,<B,G>,<E,H>,<E,I>,<E,J>,<H,I>,<I,J>}题1-3图4.顺序、链式、索引、哈希。

*5.解:100n2>2n n至少要多大6.O(n)、O(n)、O(n)、O(n)、(5)当n>m,O(n),当m>n,O(m)7.n!2100>lgn>n1/2>n3/2>(3/2)n>2n>n lgn>n n第二章1.×、√、×、√、√2.AAD4.顺序表void Delete_SeqListx(SeqList *L,ElemType x)/*删除表中值为x元素*/{inti,j;for(i=1;i<=L->length;i++){if(L->elem[i]==x){for(j=i;j<=L->length-1;j++)L->elem[j]=L->elem[j+1];L->length--;}/*向上移动*/}O(n2)链表void del_link(LinkList H,int x)/*删除数据域为x的结点*/ {LNode *p,*q;p=H;q=H->next;while(q!=NULL){if(q->data==x){p->next=q->next;free(q);q=p->next;}else{p=q;q=q->next;}}}O(n)5.int Delete_SeqListx(SeqList *L,int i,int k)/*删除表中删除自第i个结点开始的k个结点*/{intj;if(i<1||k<0||i+k-1>L->length)/*检查空表及删除位置的合法性*/{printf("不存在第i个元素");return ERROR;}for(j=i;j<=L->length-k;j++)L->elem[j]=L->elem[j+k]; /*向上移动*/L->length-=k;Return OK;/*删除成功*/}O(n)6.void Delete_SeqListx(SeqList *L,ElemType x)/*将表中值为x元素换成y*/{inti,j;for(i=1;i<=L->length;i++){if(L->elem[]==x){L->elem[i]=y;}/* */}O(n)7.写一算法在循环单链表上实现线性表的CList_length(L)运算。

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

#ifndef SQSTACK_H
#define SQSTACK_H

using namespace std;
template
class Stack
{
public:
virtual void clear()=0; //清空
virtual int leng()=0; //求长度
virtual bool full()=0; //判栈满
virtual bool empt()=0; //判空栈
virtual bool push (Telem& el)=0;
//将el推入栈中,操作成功返回true否则返回false
virtual Telem pop()=0; //若栈非空返回栈顶元素且删除栈顶元素,否则返回NULL
virtual Telem gettop()=0; //若栈非空返回栈顶元素,否则返回NULL
};

template
class SqStack :public Stack
{
private:
Telem *elem;
int top;
int maxlen;
public:
SqStack(int maxsz=100);
~SqStack(){delete[] elem;}
void clear(){top = -1;}
int leng(){ return top+1;}
bool push (Telem& el);
Telem pop( );
Telem gettop( );
bool full(){return top==maxlen-1;}
bool empt(){return top==-1;}
SqStack(Telem a[],int n,int maxsz);
friend ostream& operator<<(ostream& os,SqStack& sqs);
};

template
SqStack::SqStack(int maxsz):maxlen(maxsz)
{
top=-1;
elem=new Telem[maxlen];
}

template
SqStack::SqStack(Telem a[],int n,int maxsz):maxlen(maxsz)
{
elem=new Telem[maxlen];
for(int i=0;ielem[i]=a[i];
top=n-1;
}

template
bool SqStack::push(Telem& el)
{
if(full())
return false;
elem[++top]=el;
return true;
}

template
Telem SqStack::pop()
{
if(empt())
return NULL;
return elem[top--];
}

template
Telem SqStack::gettop()
{
if(empt())
return NULL;
return elem[top];
}

template
ostream& operator<<(ostream& os,SqStack& sqs)
{
for(int i=0;i<=sqs.top;i++)
os<return os;
}
#endif
#include
#include "sqstack.h"
using namespace std;

char r[7][7]={{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='}};

SqStack sopnd;
SqStack soprt;

char rela(char symb1,char symb2);
int oprt(int a,int b,char op);
bool comp(char st[],int& v);
void main()
{
char s[30]="#3*(7-2)#.";
//char s[30]="#7+5*(6/2)#.";
int num;
if(comp(s,num))
cout<}

char rela(char symb1,char symb2)
{
char ch[2];
int in[2];
ch[0]=symb1;
ch[1]=symb2;
for(int i=0;i<2;i++)
switch(ch[i])
{
case '+': in[i]=0;break;
case '-': in[i]=1;break;
case '*': in[i]=2;break;
case '/': in[i]=3;break;
case '(': in[i]=4;break;
case ')': in[i]=5;break;
case '#': in[i]=6;
}
return r[in[0]][in[1]];
}

int oprt(int a,int b,char op)
{
int re=0;
switch(op)
{
case '+': re=a+b;break;
case '-': re=a-b;break;
case '*': re=a*b;break;
case '/': re=a/b;
}
return re;
}

bool comp(char st[],int& v)
{
char ch,symb,op;
int a,b,i,n,r;
soprt.push(st[0]);
symb=st[1];
i=2;
while(symb!='.')
{
if((symb!='+') && (symb!='-') && (symb!='*')
&& (symb!='/') &&(symb!='(') && (symb!=')')
&& (symb!='#'))
{
n=symb-'0';
sopnd.push(n);
symb=st[i++];
}
else
{
ch=soprt.gettop();
switch(rela(ch,symb))
{
case '<':
soprt.push(symb);
symb=st[i++];
break;
case '=':
soprt.pop();
symb=st[i++];
break;
case '>':
op=soprt.pop();
b=sopnd.pop();
a=sopnd.pop();
r=oprt(a,b,op);
sopnd.push(r);
break;
}
}
}
if(soprt.empt())
{
v=sopnd.gettop();
return true;
}
else
return false;
}

相关文档
最新文档