知识大全 数据结构第三章(栈和队列)串讲+复习要点
Posted 指针
篇首语:厌伴老儒烹瓠叶,强随举子踏槐花。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构第三章(栈和队列)串讲+复习要点相关的知识,希望对你有一定的参考价值。
第三章 栈和队列
本章介绍的是 栈 和 队列 的逻辑结构定义及在两种存储结构(顺序存储结构和链式存储结构)上如何实现 栈和队列的基本运算 本章的 重点 是掌握栈和队列在两种存储结构上实现的基本运算 难点 是循环队列中对边界条件的处理
栈的逻辑结构 存储结构及其相关算法( 综合应用 ):
栈 的逻辑结构和我们先前学过的 线性表 相同 如果它是非空的 则有且只有一个 开始结点 有且只能有一个 终端结点 其它的结点前后所相邻的也只能是一个结点( 直接前趋 和 直接后继 ) 但是栈的运算规则与线性表相比有更多的限制 栈(Stack) 是 仅限制在表的一端进行插入和删除运算的线性表 通常称插入 删除这一端为 栈顶 另一端称为 栈底 表中无元素时为 空栈 栈的修改是按后进先出的原则进行的 我们又称栈为LIFO表(Last In First Out)
栈的基本运算有六种
构造空栈 InitStack(S)
判栈空: StackEmpty(S)
判栈满 StackFull(S)
进栈 Push(S x) 可形象地理解为压入 这时栈中会多一个元素
退栈 Pop(S) 可形象地理解为弹出 弹出后栈中就无此元素了
取栈顶元素 StackTop(S) 不同与弹出 只是使用栈顶元素的值 该元素仍在栈顶不会改变
由于栈也是线性表 因此线性表的存储结构对栈也适用 通常栈有 顺序栈 和 链栈 两种存储结构 这两种存储结构的不同 则使得实现栈的基本运算的算法也有所不同
我们要了解的是 在 顺序栈 中有 上溢 和 下溢 的概念 顺序栈好比一个盒子 我们在里头放了一叠书 当我们要用书的话只能从第一本开始拿(你会把盒子翻过来吗?真聪明^^) 那么当我们把书本放到这个栈中超过盒子的顶部时就放不下了(叠上去的不算 哼哼) 这时就是 上溢 上溢 也就是栈顶指针指出栈的外面 显然是出错了 反之 当栈中已没有书时 我们再去拿 看看没书 把盒子拎起来看看盒底 还是没有 这就是 下溢 下溢 本身可以表示栈为空栈 因此可以用它来作为控制转移的条件
链栈 则没有上溢的限制 它就象是一条一头固定的链子 可以在活动的一头自由地增加链环(结点)而不会溢出 链栈不需要在头部附加头结点 因为栈都是在头部进行操作的 如果加了头结点 等于要在头结点之后的结点进行操作 反而使算法更复杂 所以只要有链表的头指针就可以了
以上两种存储结构的栈的基本操作算法是不同的 我们主要 要学会进栈和退栈的基本算法以解决简单的应用问题
队列的逻辑结构 存储结构及其相关算法( 综合应用 )
队列(Queue 念Q音) 也是一种运算受限的 线性表 它的运算限制与栈不同 是两头都有限制 插入只能在表的一端进行(只进不出) 而删除只能在表的另一端进行(只出不进) 允许删除的一端称为 队头(rear) 允许插入的一端称为 队尾 (Front) 队列的操作原则是先进先出的 所以队列又称作 FIFO 表(First In First Out)
队列的基本运算也有六种
置空队 InitQueue(Q)
判队空 QueueEmpty(Q)
判队满 QueueFull(Q)
入队 EnQueue(Q x)
出队 DeQueue(Q)
取队头元素 QueueFront(Q) 不同与出队 队头元素仍然保留
队列 也有顺序存储和链式存储两种存储结构 前者称 顺序队列 后者为 链队
对于顺序队列 我们要理解 假上溢 的现象
我们现实中的队列比如人群排队买票 队伍中的人是可以一边进去从另一头出来的 除非地方不够 总不会有 溢出 的现象 相似地 当队列中元素完全充满这个向量空间时 再入队自然就会上溢 如果队列中已没有元素 那么再要出队也会下溢
那么 假上溢 就是怎么回事呢?
因为在这里 我们的队列是存储在一个向量空间里 在这一段连续的存储空间中 由一个队列头指针和一个尾指针表示这个队列 当头指针和尾指针指向同一个位置时 队列为空 也就是说 队列是由两个指针中间的元素构成的 在队列中 入队和出队并不是象现实中 元素一个个地向前移动 走完了就没有了 而是 指针在移动 当出队操作时 头指针向前(即向量空间的尾部)增加一个位置 入队时 尾指针向前增加一个位置 在某种情况下 比如说进一个出一个 两个指针就不停地向前移动 直到队列所在向量空间的尾部 这时再入队的话 尾指针就要跑到向量空间外面去了 仅管这时整个向量空间是空的 队列也是空的 却产生了 上溢 现象 这就是假上溢
为了克服这种现象造成的空间浪费 我们引入 循环向量 的概念 就好比是把向量空间弯起来 形成一个头尾相接的环形 这样 当存于其中的队列头尾指针移到向量空间的上界(尾部)时 再加 的操作(入队或出队)就使指针指向向量的下界 也就是从头开始 这时的队列就称 循环队列
通常我们应用的大都是循环队列 由于循环的原因 光看头尾指针重叠在一起我们并不能判断队列是空的还是满的 这时就需要处理一些 边界条件 以区别队列是空还是满 方法至少有三种 一种是另设一个布尔变量来判断(就是请别人看着 是空还是满由他说了算) 第二种是少用一个元素空间 当入队时 先测试入队后尾指针是不是会等于头指针 如果相等就算队已满 不许入队 第三种就是用一个计数器记录队列中的元素的总数 这样就可以随时知道队列的长度了 只要队列中的元素个数等于向量空间的长度 就是队满
以上是 顺序队列 我们 要掌握相应算法以解决简单应用问题
队列的链式存储结构称为链队列 一个链队列就是一个操作受限的单链表 为了便于在表尾进行插入(入队)的操作 在表尾增加一个尾指针 一个链队列就由一个头指针和一个尾指针唯一地确定 链队列不存在队满和上溢的问题 在链队列的出队算法中 要 注意 当原队中只有一个结点时 出队后要同进修改头尾指针并使队列变空
栈和队列的应用( 领会 )
教材中举了几个例子 对于我们初学者来说 看上去比较繁 我们只要掌握一点 那就是 对于什么情况下用栈和队列作为解决问题的数据结构
判断的要点就是 如果这个问题满足 后进先出(LIFO) 的原则 就可以使用 栈 来处理 如果这个问题满足 先进先出(FIFO) 的原则 就可以使用 队列 来处理
比如简单的说 有一个数组序列 我们输入时按顺序输入 但是输出时需要逆序输出 那么它就可以利用栈来处理 把这个数组存入一个栈中就可以容易地按逆序输出结果了
第三章 栈和队列 复习要点
本章要点是
栈的定义 其逻辑结构特征 栈的六种基本运算 栈的上溢 下溢的概念
队列的逻辑结构 队列的基本运算;循环队列的边界条件处理;
以上各种基本运算算法的实现 算法的简单应用
可能出的题型有填空 选择 简答 算法等 如:
栈和队列是 的线性表;
有一栈 元素A B C D只能依次进栈 则出栈序列中以下哪个是不可能得到的 ( )
A D C B A
B C B A D
C A B C D
D D C A B
试写出队列中的出队算法;
cha138/Article/program/sjjg/201311/23678相关参考
第三章 栈和队列 一 选择题 对于栈操作数据的原则是( )【青岛大学五(分)】 A先进先出 B后进先出
第三章栈和队列 栈 栈的定义及基本运算 栈是限制仅在表的一端进行插入和删除运算的线性表又称为后进先出表(LIFO表)插入删除端称为栈顶另一端称栈底表中无元素称空栈基本运算有 )initst
知识大全 数据结构考研分类复习真题 第三章 栈和队列[21]
若以作为双端队列的输入序列试分别求出以下条件的输出序列【山东科技大学一(分)】 ()能由输入受限的双端队列得到但不能由输出受限的双端队列得到的输出序列 ()能由输出受限的双端队列得到但不能由输
知识大全 数据结构考研分类复习真题 第三章 栈和队列[20]
利用两个栈sls模拟一个队列时如何用栈的运算实现队列的插入删除以及判队空运算请简述这些运算的算法思想【北京邮电大学 一】【东南大学一(分)】 .一个循环队列的数据结构描述如下【西北工业
知识大全 数据结构考研分类复习真题 第三章 栈和队列[15]
四 应用题 名词解释栈【燕山大学一(分)】【吉林工业大学一(分)】 名词解释队列【大连海事大学 一(分)】 什么是循环队列?【哈尔滨工业大学三(分)】【河南大
知识大全 数据结构考研分类复习真题 第三章 栈和队列[24]
假设以带头结点的循环链表表示队列并且只设一个指针指向队尾结点但不设头指针如图所示(编者略)请写出相应的入队列和出队列算法【西安电子科技大学计应用六(分)】 如果允许在循环队列的两端都可以进行插入
知识大全 数据结构考研分类复习真题 第三章 栈和队列[25]
一个双端队列deque是限定在两端endend都可进行插入和删除的线性表队空条件是end=end若用顺序方式来组织双端队列试根据下列要求定义双端队列的结构并给出在指定端i(i=)的插入enq和删除
循环队列存储在数组A[m]中则入队时的操作为( )【中山大学一(分)】 Arear=rear+ &nb
用链接方式存储的队列在进行删除运算时( )【北方交通大学一(分)】 A仅修改头指针 B仅修改尾指针 C头
设栈S和队列Q的初始状态为空元素eeeee和e依次通过栈S一个元素出栈后即进队列Q若个元素出队的序列是eeeeee则栈S的容量至少应该是( )【南京理工大学一(分