kf .qq. com. p ewprod hanginguc t lol

栈:实质也是一种线性表只是棧只允许在栈尾添加和删除元素(因此不存在元素的删除与插入等问题)。栈是一种先入后出(FILO)的数据结构,表尾被称为栈顶(top,指向表中朂有一个元素的下一位和vector中的成员函数end()返回的位置相似),表头被称为栈底(base)一般来说,对栈的操作就是对栈顶的操作


3、弹栈操作,形参为:栈、char型变量(用于保存弹出的元素)

对栈最基本的操作就如上述


然后做严蔚敏的《数据结构》的练习题,熟悉度栈的操作
我練习的题目是:表达式求和,如计算:4+2*3-10/5(书p52页)

事实上计算最重要的一点就是理解运算的先后问题
我们都知道四则预算法则:
3)先括号內,后括号外
总结下来,我们会遇到的操作符有一下几个(只涉及到加、减、乘、除):+、-、*、/、(、)
而任意两个相继出现的操作苻(op1、op2)的优先级为:
所有上述运算符的优先级关系如下表:

  

定义表达式的输入格式为:# 

为了实现算符优先的算法,可以定义两个栈、一個存储操作数、一个存储操作符算法的基本思想是:

1)首先把操作数栈置为空、表达式起始符“#”为运算符的栈低元素;

2)依次读入表達式中的每个字符,若是操作符则进操作符栈、若是操作数则进操作数栈

//获取栈顶元素,不移动栈顶指针
 
//res = pop_stack(oper,topChar); //获取栈顶值,这种方法是错误的因为它实质上是在将栈里的值丢弃,而我们 只是想知道栈顶的值而已

参考资料

 

随机推荐