首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

C语言-用栈实现表达式求值(顺序栈)

用gets(str);或者scanf进行字符串读入表达式后,存储方式如下: 多位数的存储方式: 我们可以通过str[i]进行逐位的访问,通过i++;实现逐位的偏移,那么就可以写成str...在这里,处理多位数时,提出一种“归并”的思想,首先设一个int X1;用X1=str[i++];读取每一位数字,再设一个int X2=0;通过X2=10*X2+X1;实现将已读取操作数归并到X2。...此算法用于计算整型,若要计算浮点数,把相应的类型更换成double即可实现。 算法运算逻辑是先以字符型读入字符数组中,再将字符型转换为整型存入数字栈中。...\n"); exit(0); } } } int In(char c) //判断是否为运算符,是运算符返回1,若不是返回0 { switch(c)...evaluateExpression(exp); printf("\n"); printf("%s%d\n",exp,result); return 0; } 执行结果: ---- 参考: 数据结构(C语言第二版

1.6K10

前缀、中缀、后缀表达式

在函数式编程语言中,为了表示方便,出现了一些新的语法格式。所谓前缀、中缀、后缀表达式,它们之间的区别在于运算符相对与操作数的位置不同,为了说明它们的概念,首先来看一下中缀表达式。...例如: (3 + 4) × 5 - 6 就是中缀表达式 - × + 3 4 5 6 前缀表达式 3 4 + 5 × 6 - 后缀表达式 前缀表达式 前缀表达式又称为前缀记法、波兰式,主要用于表示运算符位于操作数之前的表达式...对计算机来说,计算前缀或后缀表达式的值非常简单。 后缀表达式 后缀表达式又称为后缀记法、逆波兰式,后缀表达式前缀表达式类似,只是运算符位于操作数之后。...可以看出,用计算机计算前缀表达式的值是很容易的。...前缀、中缀、后缀表达式相互转换 将中缀表达式转换为前缀表达式 遵循以下步骤: (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2; (2) 从右至左扫描中缀表达式; (3) 遇到操作数时

1.1K50

前缀、中缀、后缀表达式

前缀、中缀、后缀表达式,它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。...对计算机来说中缀表达式是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。...举例: (3 + 4) × 5 - 6  中缀表达式 - × + 3 4 5 6  前缀表达式 3 4 + 5 × 6 -  后缀表达式 前缀表达式的求值: 从右至左扫描表达式,遇到数字时,将数字压入堆栈...,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。...后缀表达式求值: 从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

83470

前缀、中缀、后缀表达式

转至: 前缀、中缀、后缀表达式 它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。...中缀表达式是人们常用的算术表示方法。 虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。...对计算机来说,计算前缀或后缀表达式的值非常简单。 前缀表达式前缀记法、波兰式) 前缀表达式的运算符位于操作数之前。...可以看出,用计算机计算前缀表达式的值是很容易的。...后缀表达式(后缀记法、逆波兰式) 后缀表达式前缀表达式类似,只是运算符位于操作数之后。

1K10

前缀中缀后缀表达式

什么是中缀表达式 就像我们平时用到的大部分计算表达式都是中缀 比如 1+1 3*2 等等 中缀表达式虽然很方便人使用,但是对机器却不太友好 比如我要计算(1+1)*3+2...这时候就要引出 后缀表达式 后缀表达式 又称逆波兰表达式,与前缀表达式相似,只是运算符位于操作数之后。...这个意思不是把所有运算符放到数字后面,比如我们举个例子,(3+4)×5-6 有括号的肯定要先算括号里面的所以我们先括号 再乘 最后再减 转换后缀表达式的结果是34+5*6- 为什么说机器好算呢!...前缀表达式 也叫波兰表达式,这个就不需要解释什么了,跟后缀是一个道理,区别是我们要把操作符根据优先级往前提,计算的时候通过表达式从右往左扫描,遇到运算符就计算。...下一章会介绍如何用C++++实现利用栈对后缀表达式进行计算。

19920

C语言中什么是常量表达式_c语言整型表达式

常量表达式 c语言,整型表达式和常量表达式中都没有变量参与吧? 完整问题: 好评回答:表达式没有变量参与?...库伦定律的数学表达式表达式中有个常量叫什么。采用国际单位制单位,其数值是多少。...它的单位是什么 完整问题: 好评回答:k=9.0*10^-19 单位是(N*m^2)/C^2 静电常数 “每个常量表达式的值不能相同,但次序不影响执行结果”有问题吗 完整问题: 好评回答:个人觉得有问题...int y=2; //二个常量表达式的值都是2,完全是可以的 C语言中switch()语句形式中case只加常量表达式但不加语句是什么意思?...完整问题:C语言中switch()语句形式中case只加常量表达式但不加语句是什么意思? 好评回答:表示几个case共用一条/组语句。即它与下面离它最近那个有语句的case使用相同的语句。

1.1K30

“栈”的典型应用—表达式求值(C语言实现

表达式求值是程序设计语言编译中的一个基本问题。它的实现就是对“栈”的典型应用。本文针对表达式求值使用的是最简单直观的算法“算符优先法”。 我们都知道算术四则运算的运算规则是: 先乘除,后加减。...为实现优先算法,可以使用两个工作栈,一个是OPTR,用于寄存运算符,一个是OPND,用于寄存运算数和运算结果。 算法基本思路。 首先置操作数栈为空栈,表达式起始符为“#”为栈底元素。...依次读入表达式中的每个字符,若是操作数则进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权作相应操作,直至整个表达式求值完毕(OPTR栈顶元素和当前读入的字符均为“#”) 代码实现: 首先先熟悉一下栈的相关操作...)(*p); return OK; } //输出元素e Status output(SElemType e){ printf("%d ",e); return OK; } 实现表达式求值的代码...: /*计算整数表达式的值 *表达式必须以#结束 *表达式中可以出现多位数字, *表达式中可以出现空格 *运算符包括+,-,*,/,(,) *运算结果可以是多位整数,并以整数的形式返回 */

60510

C语言使用正则表达式

目录 C语言中的正则表达式使用 C语言中的正则表达式使用   正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念...正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。–来自百度百科   在c语言中,用regcomp、regexec、regfree 和regerror处理正则表达式。...处理正则表达式分三步: 编译正则表达式,regcomp; 匹配正则表达式,regexec; 释放正则表达式,regfree。...Regex:正则表达式字符串。 Cflags:是下边四个值或者是他们的或(|)运算。 REG_EXTENDED:使用POSIX扩展正则表达式语法解释的正则表达式。...原来regmatch_t数组的第一个元素是有特殊意义的:它是用来保存整个正则表达式能匹配的最大子串的起始和结束偏移量。

2.5K30

c++ 常量表达式_c语言所有函数

1.函数必须要有返回值,并且return返回的表达式必须是常量表达式。...func2() { using myType = int; constexpr myType a = 100; constexpr myType b = 10; constexpr myType c...= a * b; return c - (a + b); } 因为func1()是一个常量表达式函数,在函数体内部是不允许出现非常量表达式以外的操作,因此函数体内部的for循环是一个非法操作。...C++11语法中,constexpr可以修饰模板函数,但由于模板中类型的不确定性,因此模板函数实例化后的函数是否符合常量表达式函数的要求也是不确定的。...如果constexpr修饰的模板函数实例化结果不满足常量表达式函数的要求,则constexpr会被自动忽略,即该函数就等同于一个普通函数。

49930

C语言链表实现

我学数据结构的时候也是感觉很困难,当我学完后我发现了之所以困难时因为我没有系统的进行学习,而且很多教授都只是注重数据结构思想,而忽略了代码方面,为此我写了这些博文给那些试图自学数据结构的朋友,希望你们少走弯路 我尝试用最简单的语言与代码来描述链表...,事实上它本身也很简单 静态单链表实现 下面一部分的讨论都将围绕上面这幅图片展开,既然是逐步实现,我不考虑在开头就让这个单链表完美实现,它将只有两个部分:链表的创建&遍历链表输出 首先我们要知道一些简单的概念...这个疑问你可以自己解答比较好 动态单链表实现 到这里一个简单的链表就已经实现了,但是我们还需要继续改进,因为我们有时候不知道每个节点储存的数据,所以我们就需要一个动态链表了,下面这个将实现把用户输入的数据以链式结构储存...new node; node *head=a; node *tail=c; a->data=9; a->next=b; a->pre=NULL; b->data=17; b->next=...c; b->pre=a; c->data=6; c->next=NULL; c->pre=b; //输出 /*node *print_head=head; while(print_head

5.4K30

实现 Trie (前缀树)

Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。...请你实现 Trie 类: Trie() 初始化前缀树对象。 void insert(String word) 向前缀树中插入字符串 word 。...boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。...查找前缀 我们从字典树的根开始,查找前缀。对于当前字符对应的子节点,有两种情况: 子节点存在。沿着指针移动到子节点,继续搜索下一个字符。 子节点不存在。说明字典树中不包含该前缀,返回空指针。...重复以上步骤,直到返回空指针或搜索完前缀的最后一个字符。 若搜索到了前缀的末尾,就说明字典树中存在该前缀。此外,若前缀末尾对应节点的 为真,则说明字典树中存在该字符串。

11810

C语言 运算符与表达式

用运算符将变量和常量连接起来的符合C语言语法规则的式子称为表达式。单个常量、变量或函数是简单表达式。...例如: int a,b,c; a=1314;//a=1314 b=a;//b=1314 c=a+b;//c=2628 2.赋值表达式 直接看例子: a=520 注意:表达式都是有值的,赋值表达式的值就是被赋值变量的值...上例a=520这个赋值表达式的值就是a的值520. 3.赋值语句 C语言规定,任何表达式在其末尾加上分号就成为语句。 所以赋值表达式加上分号就是赋值语句。...看例子: a=b=c=d=666; 强制类型转换符 1.自动转换 当 = 两边数据类型不一样时,C语言会把 = 右边表达式值的数据类型变成 = 左边变量的数据类型。...注意:C语言规定,两个整数相除的商还是整数,向下取整。 例如:5/2结果是2,要想得到2.5,应该写成5.0/2或5/2.0. 注意:% 只能用于整数运算。

15810
领券