C語言版資料結構 從0開始 3 棧

2021-10-02 10:20:59 字數 2894 閱讀 7513

2.順序棧

3.鏈棧

4.棧的應用

例:對於乙個棧,給出輸入項a、b、c,如果輸入項序列由abc組成,試給出所有可能的輸出序列。

2.1順序棧的概念

棧的順序儲存結構簡稱為順序棧,它是運算受限的順序表。因此,可用陣列來實現順序棧。

因為棧底位置是固定不變的,所以可以將棧底位置設定在陣列的兩端的任何乙個端點;棧頂位置是隨著進棧和退棧操作而變化的,故需用乙個整型變數top 來指示當前棧頂的位置,通常稱 top 為棧頂指標。因此,順序棧的型別定義只需將順序表的型別定義中的長度屬性改為 top 即可。

2.2 順序棧的型別定義

# define stacksize 100

typedef

char datatype;

typedef

struct

seqstack;

設 s 是 seqstack 型別的指標變數。若棧底位置在向量的低端,即 s–>data[0] 是棧底元素,那麼棧頂指標 s–>top 是正向增加的,即進棧時需將 s–>top 加1,退棧時需將 s–>top 減1。因此,s–>top<0 表示空棧, s–>top = stacksize-1 表示棧滿。當棧滿時再做進棧運算必定產生空間溢位,簡稱「上溢」;當棧空時再做退棧運算也將產生溢位,簡稱「下溢」。上溢是一種出錯狀態,應該設法避免之;下溢則可能是正常現象,因為棧在程式中使用時,其初態或終態都是空棧,所以下溢常常用來作為程式控制轉移的條件。

2.3順序棧的基本運算

置空棧

void

initstack

(seqstack *s)

判斷棧空
int

stackempty

(seqstack *s)

判斷棧滿
int

stackfull

(seqstack *s)

進棧
void

push

(seqstack *s,datatype x)

出棧
datatype pop

(seqstack *s)

取棧頂元素
datatype  stacktop

(seqstack *s)

3.1鏈棧的概念

棧的鏈式儲存結構稱為鏈棧,它的運算是受限的單鏈表,插入和刪除操作僅限制在表頭位置上進行。由於只能在鍊錶頭部進行操作,故鍊錶沒有必要像單鏈表那樣附加頭結點。棧頂指標就是鍊錶的頭指標。

3.2鏈棧的特點

3.3鏈棧的型別定義

typedef

int datatype;

typedef

struct node

linkstack;

3.4鏈棧的基本運算

進棧

linkstack *

pushlstack

(linkstack *top, datatype x)

出棧
linkstack *

poplstack

(linkstack *top, datatype datap)

else

}

4.1數制轉換

十進位制n和其它進製數的轉換是計算機實現計算的基本問題,其解決方法很多,其中乙個簡單演算法基於下列原理:

n=(n div d)*d+(n mod d)

( 其中:div為整除運算,mod為求餘運算)

例如 (1348)10=(2504)8,其運算過程如下:

nn div 8

n mod 8

1348

1684

16821021

2520

2c語言實現:

void

conversion()

while(!

stackempty

(s))

}

4.2文字編輯器

輸入的乙個字元是錯的之後,可以再輸入乙個 『#』 ,表示前乙個字元是錯的,如果發現當前行輸入的錯誤太多,可以輸入乙個退行符 『@』 ,表示當前行都無效。

seqstack s;

intedit()

}

4.3表示式計算

中綴表示式:a+(b-c/d)×e

字尾表示式:abcd/-e×+

字尾表示式特點

處理規則 步驟

步驟中綴表示式

stack輸出1

a+(b-c/d)×e##2

+(b-c/d)×e##a

3(b-c/d)×e#

# +a

4b-c/d)×e#

# +(a5

-c/d)×e#

# + (

a b6

c/d)×e#

# + ( -ab7

/d)×e#

# + ( -

abc8

d)×e#

# + ( - /

abc9

)×e#

# + ( - /

abcd

10×e#

# + ( -

abcd/

11×e#

# + (

abcd/-

12×e#

# +abcd/-

13e#

# + ×

abcd/-14#

# + ×

abcd/-e15#

# +abcd/-e×16#

#abcd/-e×+

C語言版資料結構(從0開始) 4 佇列

2.3迴圈佇列 3.鏈佇列 1.佇列的概念 和棧一樣,佇列 queue 也是一種運算受限的線性表。它只允許在表的一端進行插入,而在另一端進行刪除。允許刪除的一端稱為隊頭 front 允許插入的一端稱為隊尾 rear 佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列...

資料結構(C語言版) 棧

1 棧 僅在表尾進行插入和刪除操作的線性表。後進先出lifo。1 表尾端 允許插入和刪除的一端 為棧頂,表頭端 不允許插入和刪除的一端 為棧底。2 入棧 插入元素的操作。出棧 刪除棧頂元素 2 棧的兩種儲存表示方式 2 鏈棧 棧的鏈式儲存結構 優點是便於多個棧共享儲存空間和提高效率。3 括號匹配檢驗...

資料結構(C語言版)

用棧實現數字的進製轉換 10轉8 棧 限定只能在表尾進行插入或者刪除操作的線性表 特點 先進後出 儲存表示方法 順序棧和鏈棧 本文用的順序棧 實現 readonly name code class c include include define stack init size 100 儲存空間初始...