数据结构学习笔记-链表
2014-04-28 09:58
288 查看
表达式的计算
表达式的计算涉及到栈的操作
对于表达式:(a-b)*(c+d)-e/f
算法:用到两个栈,分别是符号栈和操作数栈。输入表达式时,为了表示表达式输入完毕,在表达式的最后加上“;”号,也就是说输入的表达式为(a-b)*(c+d)-e/f;
首先设置各个符号的优先级,“(”和“)”的优先级为0,也就是最低的;“+”和“-”的优先级为1;“*”和“/”的优先级为2.
步骤:1.首先在符号栈中压入符号“;”,读入表达式,将操作数压入操作数栈,符号压入符号栈。
2.符号入栈是有规则的,只有当要入栈的符号的优先级大于栈顶符号的优先级,或者要入栈的符是"("时(虽然"("的优先级很低),才可以入栈。否则从符号栈中弹出栈顶符号,从操作数栈依次弹出两个操作数,进行运算后,将结果压入操作数栈。随后继续比较要入栈符号的优先级与此时符号栈顶的符号优先级谁比较高,重复上述过程。
3.当读入的符号是“)”,而此时符号栈顶的符号是“(”时,则说明括号内的运算已经完成了,将“(”从符号栈弹出。
4.当读入的符号是“;”,且符号栈顶的符号是“;”时,说明表达式已经计算完毕,结果在操作数栈的栈顶。
多项式的表示与运算
为了节省存储空间,一般多项式多用链表来表示。
表达式的计算涉及到栈的操作
对于表达式:(a-b)*(c+d)-e/f
算法:用到两个栈,分别是符号栈和操作数栈。输入表达式时,为了表示表达式输入完毕,在表达式的最后加上“;”号,也就是说输入的表达式为(a-b)*(c+d)-e/f;
首先设置各个符号的优先级,“(”和“)”的优先级为0,也就是最低的;“+”和“-”的优先级为1;“*”和“/”的优先级为2.
步骤:1.首先在符号栈中压入符号“;”,读入表达式,将操作数压入操作数栈,符号压入符号栈。
2.符号入栈是有规则的,只有当要入栈的符号的优先级大于栈顶符号的优先级,或者要入栈的符是"("时(虽然"("的优先级很低),才可以入栈。否则从符号栈中弹出栈顶符号,从操作数栈依次弹出两个操作数,进行运算后,将结果压入操作数栈。随后继续比较要入栈符号的优先级与此时符号栈顶的符号优先级谁比较高,重复上述过程。
3.当读入的符号是“)”,而此时符号栈顶的符号是“(”时,则说明括号内的运算已经完成了,将“(”从符号栈弹出。
4.当读入的符号是“;”,且符号栈顶的符号是“;”时,说明表达式已经计算完毕,结果在操作数栈的栈顶。
多项式的表示与运算
为了节省存储空间,一般多项式多用链表来表示。
相关文章推荐
- 数据结构学习笔记(二) 链表之链队列基本操作
- 数据结构学习笔记 --- 线性表 (双向链表、循环链表)
- python数据结构学习笔记-2016-10-28-01-带尾指针的链表和排序链表
- 【学习笔记10】基本数据结构(栈 队列 链表 有根树)
- 数据结构学习笔记(二) 链表之用循环链表解决约瑟夫问题
- 数据结构 链表学习笔记 2
- 数据结构学习笔记之一:链表
- 数据结构学习笔记 --- 线性表 (一些常见的关于链表的算法和面试题)
- 数据结构 学习笔记(二):线性结构:线性表(顺序表,链表,广义表,多重链表)
- 数据结构学习笔记7--c语言建立一个链表(已测正确无误)
- 数据结构学习笔记1-线性表(顺序表,单链表)
- 数据结构学习笔记(二) 链表之带表头结点的单循环链表基本操作
- python数据结构学习笔记-4-链表
- python数据结构学习笔记-2016-10-27-01-链表
- 【C++数据结构学习笔记---线性表】带头结点的双向循环链表
- 数据结构学习笔记3(链表 下 双向链表&单链表逆转)
- 数据结构学习笔记--(3) 链表--第一节
- 数据结构学习笔记(3.线性表之静态链表及柔性数组)
- 小楼一阁的数据结构学习笔记(三、单链表)
- 数据结构学习笔记 --- 线性表 (双向链表、循环链表)