資料結構 順序棧和鏈式棧

2021-09-28 19:41:01 字數 1143 閱讀 6923

棧:限定在表尾進行插入和刪除操作的線性表。

允許插入和刪除的一端成為棧頂,另一端稱為棧底。

棧的操作特性:後進先出

順序棧:

設定top指標指示棧頂元素在陣列中的位置。

進棧:top+1 棧空:top=-1

出棧:top-1 棧滿:top=maxsize;

const int max_size=100;

template

class seqstack

入棧:void push(t x)

出棧:t pop()

判斷棧空:

bool emoty()

取棧頂操作:

t gettop()

鏈式棧:

將鏈頭作為棧頂,鏈棧不需要設定頭結點

入棧:void push(t x)

出棧:t pop()

析構:~linkstack() }

雙端棧使用乙個陣列來儲存兩個棧,讓乙個棧的棧底為該陣列的始端,另乙個棧的棧底為該陣列的末端,兩個棧從各自的端點向中間延伸。

棧1的底固定在下標為0的一端;

棧2的底固定在下標為stacksize-1的一端。

top1和top2分別為棧1和棧2的棧頂指標;

stack_size為整個陣列空間的大小

棧空:top1=-1並且top2=stack_size;

棧滿:top1+1=top2

字尾表示式求值演算法

從左到右對字尾表示式字串進行處理,每次處理乙個符號

若遇到數字,入棧

若遇到運算子,棧頂兩個數字出棧,執行運算子所定義的運算,並將運算結果入棧

重複以上的工作,直到表示式結束,此時,棧中的數字代表最終的值。

中綴表示式求值運算:

設定兩個棧:

ovs(運算數棧)和optr(運算子棧)。

自左向右掃瞄中綴表示式,

遇運算元進ovs,

遇操作符則與optr棧頂優先數比較:

optr棧頂《當前操作符, 當前操作符進optr棧

optr棧頂》=當前操作符,ovs棧頂、次頂和optr棧頂,退棧形成運算t(i),t(i)進ovs棧

golang資料結構和演算法 順序棧和鏈式棧

棧 什麼是棧,簡單的講 後進先出 先進後出的線性表 實際上,棧既可以用陣列來實現,也可以用鍊錶來實現。用陣列實現的棧,叫作順序棧,用鍊錶實現的棧,叫作鏈式棧。package modules type datastack struct 相當於建構函式 func d datastack initstac...

資料結構 共享棧和鏈式結構棧

共享棧其實就是兩個棧,合起來,共享乙個陣列存資料。這樣子的好處就是,兩個棧同乙個空間。當棧1的資料多,棧2資料比較少,就可以這樣子共享,對空間的浪費就會減少。當棧1為空,top1 1 棧2為空,top2 n 關鍵 有兩個棧底,和兩個棧頂top1,top2,從陣列兩端向中間靠攏。當 top1 1 to...

資料結構 鏈式棧 不定長順序棧

棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元...