栈和队列学习要点
文章目录
- 概述
- 重点/难点/要点
- 知识点整理
- 练习
概述
栈和队列是常用的基本数据结构,不仅直接用于描述问题,而且作为辅助数据结构大量用于算法实现中。从数据元素间的逻辑关系看,栈和队列是线性结构;从操作方式和操作集合看,栈和队列与线性表有很多不同,有各自的特殊性,但都是操作受限的线性表。本章知识点的组织结构如下图所示:
重点/难点/要点
本章的重点是:
本章的难点是:
栈学习要点:
对于栈要抓住一条明线:栈的逻辑结构→栈的存储结构→栈的实现。
对于栈的逻辑结构,要从栈的定义入手,在与线性表的定义和操作比较的基础上,得出栈的操作特性,最后给出栈的抽象数据类型定义。
对于栈的存储结构要把握两条支线:顺序栈和链栈,栈的存储结构及实现都与线性表类似,本质上是线性表的简化。
对于栈的主要抓住以下三条暗线。
队列学习要点:
对于队列的教学要抓住一条明线:队列的逻辑结构→队列的存储结构→队列的实现。
对于队列的逻辑结构,要从队列的定义出发,在与线性表的定义和操作比较的基础上,得出队列的操作特性,最后给出队列的抽象数据类型定义。
对于队列的存储结构要把握两条支线:循环队列和链队列,队列的存储结构及实现与线性表类似,本质上是线性表的简化。
队列的暗线与栈的暗线类似,此外,还要把握以下两条暗线。
知识点整理
练习
栈
在栈满的情况下不能做进栈操作,否则将产生上溢,因此对于入栈操作首先要判断是否栈满。(×)
栈结构只允许在栈顶进行存取操作,所有基本操作的时间复杂度均是O(1)。(√)
三个元素按a、b、c的次序进栈,且每个元素只允许进一次栈,则出栈序列一定是abc。(×)
在顺序栈的类定义中,成员变量top是指针类型。(×)
设top表示栈顶元素所在下标,顺序栈的栈空条件是(B),栈满条件是(D)。
A.top=0 B.top=-1 C.top=StackSize D.top=StackSize-1
链栈附设头结点不会使插入、删除等基本操作更加方便。(√)
在链栈中执行入栈操作需要修改两个指针,同单链表的插入操作一样,修改指针有先后顺序。(√)
在顺序栈和链栈中,语句“top- -;”实现将top指向当前栈顶元素的下一个元素。(×)
队列
有三个元素按a、b、c的顺序入队,每个元素只能入队一次,则出队序列只能是abc。(√)
在顺序队列中,入队操作和出队操作的时间复杂度均是O(1)。(×)
由于队列的单向移动性,顺序队列一定会发生假溢出现象。(×)
由于队列只允许在线性表的两端执行存取操作,所有基本操作的时间复杂度均为O(1)。(√)
设存储循环队列的数组长度为m,则(rear+1)%m实现将rear的值在循环意义下加1。(√)
在链队列中附设头结点,能够使入队和出队操作更加方便。(√)
在循环队列中,设front指向队头元素的前一个位置,则当前的队头元素是(C)。
A.data[front] B.data[++front] C.data[(front+1)%m] D.data[front++]
在链队列中,出队操作在队头执行,与rear指针无关。(B)(要判空)
若用一个长度为6的数组来实现循环队列,且当前rear和front的值分别为4和2,则从队列中删除一个元素,再增加两个元素后,rear的值是(0),front的值是(3)。
参考资料:《数据结构(从概念到C++实现)》清华大学出版社,王红梅
总结
- 上一篇: Ubuntu1804安装Mysql
- 下一篇: 人工智能如何实现两难抉择?