計算機四級考試資料結構棧和佇列複習要點

2021-12-30 07:05:08 字數 3062 閱讀 2889

第三章 棧和佇列

本章介紹的是 棧 和 佇列 的邏輯結構定義及在兩種結構上如何實現 棧和佇列的基本運算 。本章的 重點 是掌握棧和佇列在兩種儲存結構上實現的基本運算, 難點 是迴圈佇列中對邊界條件的處理。

1.棧的邏輯結構、儲存結構及其相關演算法:

棧 的邏輯結構和我們先前學過的 線性表 相同,如果它是非空的,則有且只有乙個 開始結點 ,有且只能有乙個 終端結點 ,其它的結點前後所相鄰的也只能是乙個結點,但是棧的運算規則與線性表相比有更多的限制, 棧 是 僅限制在表的一端進行插入和刪除運算的線性表 ,通常稱插入、刪除這一端為 棧頂 ,另一端稱為 棧底 。表中無元素時為 空棧 。棧的修改是按後進先出的原則進行的,我們又稱棧為lifo表。

棧的基本運算有六種:

構造空棧:initstack、

判棧空: stackempty、

判棧滿: stackfull、

進棧: push、可形象地理解為壓入,這時棧中會多乙個元素

退棧: pop 、 可形象地理解為彈出,彈出後棧中就無此元素了。

取棧頂元素:stacktop,不同與彈出,只是使用棧頂元素的值,該元素仍在棧頂不會改變。

由於棧也是線性表,因此線性表的儲存結構對棧也適用,通常棧有 順序棧 和 鏈棧 兩種儲存結構,這兩種儲存結構的不同,則使得實現棧的基本運算的演算法也有所不同。

我們要了解的是,在 順序棧 中有「 上溢 」和「 下溢 」的概念。順序棧好比乙個盒子,我們在裡頭放了一疊書,當我們要用書的話只能從第一本開始拿,那麼當我們把書本放到這個棧中超過盒子的頂部時就放不下了,這時就是「上溢」,「 上溢」也就是棧頂指標指出棧的外面, 顯然是出錯了。反之,當棧中已沒有書時,我們再去拿,看看沒書,把盒子拎起來看看盒底,還是沒有,這就是「 下溢 」。「 下溢」本身可以表示棧為空棧, 因此可以用它來作為控制轉移的條件。

鏈棧 則沒有上溢的限制,它就象是一條一頭固定的鍊子,可以在活動的一頭自由地增加鏈環而不會溢位, 鏈棧不需要在頭部附加頭結點 ,因為棧都是在頭部進行操作的,如果加了頭結點,等於要在頭結點之後的結點進行操作,反而使演算法更複雜,所以只要有鍊錶的頭指標就可以了。

以上兩種儲存結構的棧的基本操作演算法是不同的,我們主要 要學會進棧和退棧的基本演算法以解決簡單的應用問題 。

2.佇列的邏輯結構、儲存結構及其相關演算法。

佇列 也是一種運算受限的 線性表 ,它的運算限制與棧不同,是兩頭都有限制, 插入只能在表的一端進行,而刪除只能在表的另一端進行 ,允許刪除的一端稱為 隊頭 ,允許插入的一端稱為 隊尾 ,佇列的操作原則是先進先出的,所以佇列又稱作 fifo 表

佇列的基本運算也有六種:

置空隊 :initqueue

判隊空: queueempty

判隊滿: queuefull

入隊 : enqueue

出隊 : dequeue

取隊頭元素: queuefront,不同與出隊,隊頭元素仍然保留

佇列 也有順序儲存和鏈式儲存兩種儲存結構,前者稱 順序佇列 ,後者為 鏈隊 。

對於順序佇列,我們要理解「 假上溢 」的現象。

我們現實中的佇列比如人群排隊買票,隊伍中的人是可以一邊進去從另一頭出來的,除非地方不夠,總不會有「溢位」的現象,相似地,當佇列中元素完全充滿這個向量空間時,再入隊自然就會上溢,如果佇列中已沒有元素,那麼再要出隊也會下溢。

那麼「假上溢」就是怎麼回事呢?

因為在這裡,我們的佇列是儲存在乙個向量空間裡,在這一段連續的儲存空間中,由乙個佇列頭指標和乙個尾指標表示這個佇列,當頭指標和尾指標指向同乙個位置時,隊列為空,也就是說, 佇列是由兩個指標中間的元素構成的 。在佇列中,入隊和出隊並不是象現實中,元素乙個個地向前移動,走完了就沒有了,而是 指標在移動 ,當出隊操作時,頭指標向前增加乙個位置,入隊時,尾指標向前增加乙個位置,在某種情況下,比如說進乙個出乙個,兩個指標就不停地向前移動,直到佇列所在向量空間的尾部,這時再入隊的話,尾指標就要跑到向量空間外面去了,僅管這時整個向量空間是空的,佇列也是空的,卻產生了「上溢」現象,這就是假上溢。

為了克服這種現象造成的空間浪費,我們引入 迴圈向量 的概念,就好比是把向量空間彎起來,形成乙個頭尾相接的環形,這樣,當存於其中的佇列頭尾指標移到向量空間的上界時,再加1的操作就使指標指向向量的下界,也就是從頭開始。這時的佇列就稱 迴圈佇列 。

通常我們應用的大都是迴圈佇列。由於迴圈的原因,光看頭尾指標重疊在一起我們並不能判斷佇列是空的還是滿的,這時就需要處理一些 邊界條件 ,以區別佇列是空還是滿。方法至少有三種,一種是另設乙個布林變數來判斷,第二種是少用乙個元素空間,當入隊時,先測試入隊後尾指標是不是會等於頭指標,如果相等就算隊已滿,不許入隊。第三種就是用乙個計數器記錄佇列中的元素的總數,這樣就可以隨時知道佇列的長度了,只要佇列中的元素個數等於向量空間的長度,就是隊滿。

以上是 順序佇列 ,我們 要掌握相應演算法以解決簡單應用問題 。

佇列的鏈式儲存結構稱為鏈佇列,乙個鏈佇列就是乙個操作受限的單鏈表。為了便於在表尾進行插入的操作,在表尾增加乙個尾指標, 乙個鏈佇列就由乙個頭指標和乙個尾指標唯一地確定 。鏈佇列不存在隊滿和上溢的問題。在鏈佇列的出隊演算法中,要 注意 當原隊中只有乙個結點時,出隊後要同進修改頭尾指標並使佇列變空。

3.棧和佇列的應用

教材中舉了幾個例子,對於我們初學者來說,看上去比較繁,我們只要掌握一點,那就是,對於什麼情況下用棧和佇列作為解決問題的。

判斷的要點就是 :如果這個問題滿足 後進先出 的原則,就可以使用 棧 來處理。如果這個問題滿足 先進先出 的原則,就可以使用 佇列 來處理。

比如簡單的說,有乙個陣列序列,我們輸入時按順序輸入,但是輸出時需要逆序輸出,那麼它就可以利用棧來處理,把這個陣列存入乙個棧中就可以容易地按逆序輸出結果了。

第三章 棧和佇列 複習要點

本章要點是:

棧的定義、其邏輯結構特徵、棧的六種基本運算、棧的上溢、下溢的概念。

佇列的邏輯結構,佇列的基本運算;迴圈佇列的邊界條件處理;

以上各種基本運算演算法的實現。演算法的簡單應用。

可能出的題型有填空、選擇、簡答、演算法等,如:

棧和佇列是。。。。。。。。。的線性表;

有一棧,元素a,b,c,d只能依次進棧 ,則出棧序列中以下哪個是不可能得到的。

a. d、c、b、a

b. c、b、a、d

c. a、b、c、d

d. d、c、a、b

試寫出佇列中的出隊演算法;

等等 。

計算機四級考試詞彙總結

access arm 磁頭臂,訪問臂 access time 訪問時間 adder 加法器 address 位址 alphanumeric 字母數字的 analog computer 模擬計算機 analyst 分析員 area 區域 array 陣列,陣列 assembler 匯程式設計序 aut...

全國計算機四級考試第3章棧和佇列習題練習

一 基礎知識題 3.1 設將整數1,2,3,4依次進棧,但只要出棧時棧非空,則可將出棧操作按任何次序夾入其中,請回答下述問題 若入 出棧次序為push,pop,push,push,pop,pop,push,pop,則出棧的數字序列為何表示i進棧,pop表示出棧 能否得到出棧序列1423和1432?並...

計算機四級考試之SQL Server使用者對映

sql server2005中 使用者對映 裡成員身份選項的意思 使用者對映 public 維護所有預設許可權 db owner 執行所有資料庫角色活動 db accessadmin 新增和刪除資料庫使用者,組及角色 db ddladmin 新增 更改或刪除資料庫物件 db security adm...