目錄三,棧的鏈式儲存實現
佇列三,佇列的鏈式實現
只允許在一端進行插入或刪除操作的線性表。
見如下**片段,體會順序棧的定義:
#define maxsize 10
typedef struct sqstack;
void teststack()
//初始化棧
void initstack(sqstack &s)
//我們也可以知道如何判斷棧空
bool stackempty(sqstack s)
//新元素入棧
bool push(sqstack &s,elemtype x)
在棧頂彈出乙個元素,並用x 返回:
bool pop(sqstack &s,elemtype &x)
採用鏈式儲存的棧稱為鏈棧,其優點是便於多個棧共享儲存空間和提高其效率,且不存在棧滿上溢的情況。通常採用單鏈表實現,並規定所有的操作都是在單鏈表的表頭進行的。
現在再想一想,是不是在單鏈表中,表頭後插入乙個結點就相當於元素入棧的操作,在表頭後刪除乙個元素就相當於元素出棧。只不過入棧和出棧的操作都是在鍊錶的表頭進行的。
前面我們知道了棧是只允許在一端進行插入或刪除操作的線性表,那佇列呢?
佇列是只允許在一端進行插入,在另一端刪除的線性表。這個結合日常生活中的排隊來想,是不是非常簡單~
以下是佇列的幾種基本操作:
#define maxsize 10 //定義佇列中元素的最大個數
typedef struct sqqueue;
//初始化佇列
void initqueue(sqqueue &q)
//判斷佇列是否為空,就是頭,尾指標指向同乙個元素
bool queueempty(sqqueue q)
//入隊
bool enqueue(sqqueue &q,elemtype x)
上述程式中的判斷佇列是否已滿的操作我們後面再說,這裡的模運算操作其實就是將無限的整數域對映到有限的整數集合 上,將儲存空間在邏輯上變成了「環狀」。
只能讓隊頭元素出隊。刪除乙個隊頭元素,並用x 返回
bool dequeue(sqqueue &q,elemtype &x)
那如何知道佇列元素的個數呢?這裡有乙個公式,希望我們記住:(rear+maxsize-front)%maxsize,自己可以驗證一下這個公式的合法性。
**如下:
typedef struct linknodelinknode;
typedef structlinkqueue;
初始化佇列(帶頭結點)的實現:
void initqueue(linkqueue &q)
void testlinkqueue()
示意圖如下:
由此可知,判斷乙個佇列是否為空的**實現如下:
bool isempty(linkqueue q)
不帶頭結點的佇列初始化:
void initqueue(linkqueue &q)
//此時判斷佇列是否為空即隊頭指標為null
bool isempty(linkqueue q)
帶頭結點的新元素入隊操作只需要記得只能從隊尾新增元素即可,邏輯也比較簡單,直接見如下**片段:
void enqueue(linkqueue &q,elemtype x)
不帶頭結點新元素入隊,由於開始front、rear 指標都是指向 null 的,所以需要對其進行修改操作:
void enqueue(linkqueue &q,elemtype x)else
}
帶頭結點隊頭元素出隊操作,邏輯比較簡單,直接見**:
bool dequeue(linkqueue &q,elemtype &x)
不帶頭結點隊頭元素出隊,**如下:
bool dequeue(linkqueue &q,elemtype &x)
free(p);
return true;
}
最後,我們一定要多動手、勤思考,這樣我們才有可能攻陷資料結構! 資料結構 棧和佇列(c語言)
棧和佇列是兩種重要的線性結構。從資料結構角度來看,棧和佇列也是線性表,其特殊性在於棧和佇列的基本操作是線性表操作的子集,他們是操作受限制的線性表,因此,可稱為限定性的資料結構。但從資料型別角度看,它們是和線性表大不相同的兩類重要的抽象資料型別。由於它們廣泛應用在各種軟體系統中,因此在物件導向的程式設...
(C語言)資料結構 佇列 棧
12 佇列 queue 入隊 put 出對get 1 2 file queue linkedlist.c 3 4 佇列 queue 5 入隊 put 放在鍊錶尾部,並更新指向鍊錶尾部的指標tail 6 出隊 get 返回並刪除鍊錶頭部節點,並更新指向鍊錶頭部的指標head 7 8 9 include...
C語言資料結構 棧 佇列
ifndef zydl h define zydl h include head.h define stack int size 100 define stackincrement 10 define duqueue max size 10 define maxqsize 100 typedef i...