栈和队列学习要点
文章目錄
- 概述
- 重點/難點/要點
- 知識點整理
- 練習
概述
棧和隊列是常用的基本數據結構,不僅直接用于描述問題,而且作為輔助數據結構大量用于算法實現中。從數據元素間的邏輯關系看,棧和隊列是線性結構;從操作方式和操作集合看,棧和隊列與線性表有很多不同,有各自的特殊性,但都是操作受限的線性表。本章知識點的組織結構如下圖所示:
重點/難點/要點
本章的重點是:
本章的難點是:
棧學習要點:
對于棧要抓住一條明線:棧的邏輯結構→棧的存儲結構→棧的實現。
對于棧的邏輯結構,要從棧的定義入手,在與線性表的定義和操作比較的基礎上,得出棧的操作特性,最后給出棧的抽象數據類型定義。
對于棧的存儲結構要把握兩條支線:順序棧和鏈棧,棧的存儲結構及實現都與線性表類似,本質上是線性表的簡化。
對于棧的主要抓住以下三條暗線。
隊列學習要點:
對于隊列的教學要抓住一條明線:隊列的邏輯結構→隊列的存儲結構→隊列的實現。
對于隊列的邏輯結構,要從隊列的定義出發,在與線性表的定義和操作比較的基礎上,得出隊列的操作特性,最后給出隊列的抽象數據類型定義。
對于隊列的存儲結構要把握兩條支線:循環隊列和鏈隊列,隊列的存儲結構及實現與線性表類似,本質上是線性表的簡化。
隊列的暗線與棧的暗線類似,此外,還要把握以下兩條暗線。
知識點整理
練習
棧
在棧滿的情況下不能做進棧操作,否則將產生上溢,因此對于入棧操作首先要判斷是否棧滿。(×)
棧結構只允許在棧頂進行存取操作,所有基本操作的時間復雜度均是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
- 下一篇: 人工智能如何实现两难抉择?