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 儲存空間初始...