C 資料結構第35課 棧的概念及實現(下)

2021-10-09 05:54:42 字數 2821 閱讀 9736

1、staticstack 的缺陷

模板型別為類型別時,staticstack 的物件在建立時,會多次呼叫元素型別的建構函式,便會極大的影響效率。

為什麼會這樣輸出這樣的結果?

我們建立了 stack 物件,呼叫了 staticstack的建構函式,並且成員變數是這樣的寫的:

protected:

t m_space[n];

int m_top;

int m_size;

t 為 test,於是會呼叫test 類的建構函式,有5個元素,呼叫5次。這極大的影響了效率。那麼我們此時是不是需要一種新的棧的儲存方式呢?

我們可以開發出一種新的鏈式棧,它的實現方式如下圖所示

我們看到此時顯然已經不再呼叫 test 類的建構函式了。

2、符號匹配問題

在 c 語言中有一些成對出現的符號,如括號:(), , {}, <>,再如引號:』 ', " "。該如何實現編譯器中的符號成對檢測呢?

演算法思路:

1、從第乙個字元開始掃瞄:當遇見普通字元時忽略;當遇見左符號時壓入棧中;當遇見右符號時彈出棧頂符號,並進行匹配。

2、結束:成功時,所有字元掃瞄完畢,且棧為空;失敗時,匹配失敗或所有字元掃瞄完畢但棧非空。

小結:1、鏈式棧的實現組合使用了單鏈表物件,在單鏈表的頭部進行操作能夠實現高效的入棧和出棧操作;

2、棧「後進先出」的特性適用於檢測成對出現的符號;

3、棧非常適合於需要「就近匹配」的場合。

資料結構 棧的概念及實現

棧的概念及結構 棧 一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的資料元素遵守後進先出lifo last in first out 的原則。壓棧 棧的插入操作叫做進棧 壓棧 入棧,入資料在棧頂。出棧 棧的刪除操作叫做出棧。出...

資料結構庫 順序棧的概念及實現

1,棧的定義 1,棧是一種特殊的線性表 1,棧頂 top 允許操作的一端 2,棧底 bottom 不允許操作的一端 2,棧的特性 1,後進先出 last in first out 只有乙個特性 3,棧的操作 創銷進出頂大清 1,建立棧 stack 2,銷毀棧 stack 3,進棧 push 4,出棧...

資料結構的基本概念及佇列與棧的基本實現

一資料結構的基本概念 1 hash表 dict底層結構使用的雜湊表 為了支援快速查詢使用了雜湊表作為底層結構,雜湊表的實現原理,底層其實就是乙個陣列 雜湊表平均查詢時間複雜度o 1 cpython直譯器使用二次探查解決雜湊衝突問題 list與tuple的區別 都是線性結構,支援下標訪問 list沒法...