Chapter 3 棧與佇列

2021-09-26 03:09:54 字數 1786 閱讀 3010

2. 佇列

3. 棧與佇列的應用

通常,棧可定義為只允許在表的末端進行插入和刪除的線性表。後進先出(lifo)

棧的基本操作

解答演算法題時,若題幹未做出限制,則可直接使用這些基本的操作函式。

p60-p62

利用棧底位置相對不變的特性,可讓兩個順序棧共享乙個一維資料空間,將兩個棧的棧底分別設定在共享空間的兩端,兩個棧頂向共享空間的中間延伸。

共享棧是為了更有效地利用儲存空間,兩個棧的空間互相調節,只有在整個儲存空間被佔滿時才發生上溢。其訪問資料的時間複雜度均為o(1

)o(1)

o(1)

,所以對訪問效率沒有什麼影響。

佇列是另一種限定訪問位置的線性表,它只允許在表的一端插入,在另一端刪除,允許插入的一端叫做隊尾(rear),允許刪除的一端叫做隊頭(front)。先進先出(fifo)。

佇列常見基本操作

initqueue

(&q)

;//初始化佇列

queueempty

(q);

//判斷佇列是否為空

enqueue

(&q, x)

;//入隊

dequeue

(&q,

&x);

//出隊

gethead

(q,&x)

;//讀隊頭元素

迴圈佇列操作

判斷隊空隊滿

用(rear+1)%maxsize==front 來判斷是否隊已滿,即讓rear指到front前乙個位置就認為隊已滿。所以在隊滿情形實際空了乙個元素位置。如果不留這個空位,導致rea

r==f

ront

rear==front

rear==

fron

t就會混淆隊空隊滿條件。所以,在迴圈佇列中,最多只能存放maxsize-1個元素。

佇列的隊頭指標指向單鏈表的第乙個結點,隊尾指標指向單鏈表的最後乙個結點。

用單鏈表表示的鏈式佇列特別適合於資料元素變動比較大的情形,而且不存在佇列產生溢位的情況。

雙端佇列可以在佇列的兩端進行插入和刪除。有的可能有限制,比如限制輸入(一端輸入,兩端輸出)或限制輸出(一端輸出,兩端輸入)

演算法思想如下:

初始設定乙個空棧,順序讀入括號。

若是右括號,則或者使置於棧頂的最急迫期待得以消解,或者是不合法情況(括號序列不匹配,退出程式)。

若是左括號,則作為乙個新的更急迫的期待壓入棧中,自然使原有的在棧中的所有未消解的期待的急迫性降了一級。演算法結束時,棧為空,否則括號序列不匹配。

任何乙個表示式都是由運算元(亦稱運算物件)、操作符(亦稱運算子)和分界符組成。通常,算術表示式有三種表示:

由於中綴表示有操作符的優先順序問題,還有可加括號改變運算順序的問題,所以對於編譯程式來說,一般不使用中綴表示處理表示式,因為用字尾表示計算表示式的值只用乙個棧,而字首中綴兩個棧,所以編譯程式一般使用字尾表示求解表示式的值。

利用棧將中綴轉換成字尾

演算法見p99

該轉換演算法對輸入表示式只進行一次自左向右的掃瞄,對每個運算元只執行一次輸出,其執行時間為o(1

)o(1)

o(1)

,對每個操作符,執行進棧和退棧各一次,其時間也為o(1

)o(1)

o(1)

。若表示式中符號的總數為n,則總的執行時間複雜度為o(n

)o(n)

o(n)

Chapter 3 棧和佇列

一 棧和佇列的基本概念 棧的基本概念 只能在一端進行插入或刪除的線性表。進行插入或刪除操作的一端稱為棧頂,另一端為棧底,棧底是固定不變的。棧的特點 filo 先進後出 棧的儲存結構 順序棧和鏈式棧 和線性表類似 棧的數學性質 當n個元素以某種順序如棧,並在入棧的過程中可以隨時出棧時,最終在所有元素經...

Chapter 3 軟體過程結構

由圖可以看出,每個框架活動由一系列軟體工程動作構成 每個軟體工程動作由任務集來定義,這個任務集明確了將要完成的工作任務 將要產生的工作產品 所需要的質量保證點,以及用於表明過程狀態的里程碑。過程模式 process pattern 描述了軟體工程工作中遇到的過程相關的問題,明確了問題環境並給出了針對...

Chapter 3 決策樹學習

決策樹學習是一種逼近離散值目標函式的方法,對雜訊資料有很好的魯棒性且能夠學習析取表示式。在這種方法中學習到的函式被表示為一棵決策樹,它最合適具有以下特徵的問題 主要思想 通過自頂向下構造決策樹來進行學習。使用統計測試來確定每乙個例項屬性單獨分類訓練樣例的能力,分類能力最好的屬性選作樹的根節點的測試。...