说明:这一章知识点比较多,一轮复习的时候也花了很多时间
1.总述
考纲要求
(一)栈和队列的基本概念
(二)栈和队列的顺序
(三)栈和队列的链式存储结构
(四)多维数组的存储
(五)特殊矩阵的压缩存储
(六)栈、队列和数组的应用
我认为将栈、队列、数组三块联系,辩证的学习,可以更好的理解。
但由于时间压迫,在第一轮的时候,将各自的特点弄清楚,几者相互联系就从题目中分析,在第二轮复习的时候,把所有的联系要串一遍。
知识框架
2.栈
2.1定义
(线性表)定义:线性表式具有相同数据类型的n(n>=0)个数据元素的有限序列。
栈是只允许在一端进行插入或删除操作的线性表。
考题:栈是限制存取点的线性结构。——从上面定义推导可得。
口诀:后进先出
知识点(根据上图好理解):
- 栈顶:线性表允许插入删除的那一段
- 栈底:固定的,线性表允许插入删除的那一段
2.1.1代码操作过程
2.1.2计算常考公式
2.2逻辑结构
其逻辑结构可以用顺序储存结构和链式储存结构实现。
- 顺序栈:用数组实现的话能避开数组前中部插入删除的缺陷,在数组中新定义一个变量来表示栈顶的位置就行。
- 共享栈:在固定大小为n的连续数组空间中,可以存放两个栈,一个栈底为数组下标为零处,另一个栈底为数组下标n-1处,再在共享栈中设置两个变量分别指示它们的栈顶,栈满的条件是top1+1=top2。实际上使用这样的数据结构通常是一个栈增加而另一个栈缩短时使用。
- 链栈:用链表实现的话如果链表尾部做栈顶的话要出栈就要从头部遍历找到尾部的上一个结点,比较麻烦。更好的选择是用链表头部做栈顶,这样入栈出栈比较方便。链栈的结点的代码是和链表一样的,链栈的代码将头指针当做栈顶指针就行(不带头结点)。注意如果是带头结点的指针,那么头指针会始终指向头结点,这时要改变栈顶指针就要改变头结点指针域了。
2,.2.1顺序栈
定义:
基本操作
实现:
考点:栈空的条件的辨析
2.2.2共享栈
基础知识点:
图片介绍特点以及作用:
主要考察:对栈空和栈满的判断(这方面是重点之重),对以后的分析,有很大帮助,一定要手绘过程,在大脑有一个流程。
2.2.3链栈
注:要理解带头节点和不带头节点
优点:
- 便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况
- 可以自由扩展
特点:
实现:
插入:
删除:
栈的应用 (知识点居多-要理解)
表达式求解:
递归:
中缀转后缀: