栈和队列总结

输出合法性

关键:一个结点出栈后,比它之前入栈的结点而且在它之后出栈的,出栈顺序和入栈顺序相反

栈的存储

链式存储,一般采用带头结点的头插法

顺序存储,需要注意栈顶指针的两种方式

队列的存储结构

需要有两个指针,指向队头和队尾

顺序存储:为了防止假溢出,需要每次入队出队进行Mod操作

为了区分是队空还是队满,1,设置size变量,每次入队出队都需要进行修改;2,牺牲一个空间不进行存储,如果队尾指针的下一个是队头则说明队满

队列的实际应用
  1. 缓冲区
  2. 对树的层序遍历
栈的实际应用

函数调用压栈信息

表达式求值问题

中缀转后缀执行左优先的原则,如果有相同级别的算法,优先执行左边部分

手算方法:从前往后扫描到第一个操作符,然后运算前面两个数等到新的数据,然后再不断执行之前的步骤

注意左右操作数的顺序是规定的不能乱改

先弹出栈顶元素的是右操作数

中缀转前缀需要执行右优先的原则

具体步骤

  1. 因为中缀还是后缀,操作数的相对位置都是不变的
  2. 如果遇到操作数直接输出
  3. 如果遇到运算符,如果栈空,则入栈;如果栈非空,需要出栈那些比它优先级还高或者相等的操作数
  4. 如果遇到(需要遇到右括号才能出栈操作
实现前缀表达式的流程
  1. 从右往左扫描每一个元素,如果是符号则弹栈操作,先出栈的是左操作数
  2. 如果是操作数则入栈

后缀表达式先出栈的是右操作数

特殊矩阵的压缩存储

对称矩阵:

三角矩阵:需要多一个数组量来存放常量

稀疏矩阵:三元组

十字链表法

你可能感兴趣的:(数据结构)