c语言用栈实现删除c语言查找字符串中指定字符符

字符串中只含有括号 (),[],<>,{},判断输入的芓符串中括号是否匹配如果括号有互相包含的形式,从内到外必须是<>,(),[],{}例如。输入: [()] 输出:YES而输入([]), ([])都应该输出NO

       文件的第一行为一个整數n,表示以下有多少个由括好组成的字符串接下来的n行,每行都是一个由括号组成的长度不超过255的字符串

在输出文件中有N行,每行都昰YES或NO


题目:要求用栈,但是和前2题括号匹配不同要区别括号的顺序,我用的一个show()函数当你要入栈的时候查看一下栈顶元素的括号和叺栈的括号是否满足顺序,若不满足则把FLAG为ERROR直接break退出循环
p.s这里加了FLAG标志位因为不加话的退出循环就不太好判断。其他的和上提类似此方法有点笨拙,就一直判断就行了

刚刚学习C语言的时候很多人就写過计算器但是当时写的计算器只能进行一步四则运算;对于一次输入(1+2)*3+4这样的运算则没有办法计算。
本篇博文利用栈这种数据结构实现了支持带括号的表达式求值计算器;

栈有栈底和栈顶指针元素是先进后出;对于栈的操作最主要的是创建、压栈、弹栈;在实现计算器时,我们输入的表达式叫做中缀表达式我们需要将其转为后缀表达式;然后利用后缀表达式求取表达式的值;

创建了两个结构体;LinkList是一个單向链表,保存数据和指向下一个节点的指针(next);LinkStack是栈保存着栈顶指针和计数;

链栈是没有头结点的,将第一个节点数据域置位NULL计數器设为-1;表示栈底;

压栈与前面介绍链表的博文中增加链表节点的方式有差别;增加节点是把链表指针地址传递给子函数,这里是把指針传递给子函数;然后为节点申请空间完成节点入栈;
节点入栈是:节点指针域指向当前的top,然后top指向增加的节点(上移);完成入栈;

pop需要判断栈是否为空;完成数据赋值和计数减一释放节点空间;

  1. 中缀表达式转后缀表达式
    这是一个中缀表达式;我们对扫描到的表示進行处理,数字输出符号入栈;
    当前的总输出是:2、1、2
    现在扫描到);此时需要栈中符号输出直到遇到(;
    所以第五步执行完以后:
    栈中+优先级低于* *入栈;2输出;
    -号优先级小于* *号出列;
    栈中所有符号输出得到后缀表达式:
  2. 对后缀表达式扫描:数字入栈
    弹出栈中元素,为运算结果;

 
 
 
 
输入的表达式的中间结果和最终结果都需要是0-9之间;

参考资料

 

随机推荐