資料結構與演算法(C語言) 棧和佇列 佇列

2021-08-22 08:15:08 字數 2083 閱讀 2432

•與棧相反,佇列是一種先進先出(first in first out, fifo)的線性表。只允許在表尾一端進行插入操作而在表頭一端進行刪除操作。

佇列既可以用鍊錶實現,也可以用順序表實現。

跟棧相反的是,棧一般我們用順序表來實現,而佇列我們常用鍊錶來實現,簡稱為鏈佇列。

//佇列的鏈式表示和實現

typedef struct qnodeqnode, *queueptr;

typedef structlinkqueue;

將隊頭指標指向鏈佇列的頭結點,而隊尾指標指向終端結點。(頭結點不是必要的)

空佇列時,front和rear都指向頭結點。

以下將構造乙個空佇列、往佇列中插入元素、刪除元素、銷毀佇列都用c語言描述

和之前的線性表類似,所以在學習這部分的時候就輕鬆得多。

注意:c語言中->和.的區別——->用於指標, .用於物件

"->"用於指向結構成員,它的左邊應為指向該結構型別的指標(結構指標),而"."的左邊應為該結構型別的變數(結構變數),如已定義了乙個結構體struct student,裡面有乙個int a;然後有乙個結構體變數struct student stu及結構體變數指標struct student *p;且有p=&stu,那麼p->a和stu.a表示同乙個意思。

實踐:編寫乙個鏈佇列,任意輸入一串字元,以#作為結束標誌,然後將佇列中的元素顯示到螢幕上

#include#includetypedef char elemtype;

typedef struct qnodeqnode, *queueptr;

typedef structlinkqueue;

int initqueue(linkqueue *q)

q->front->next = null;

return 1;

}int insertqueue(linkqueue *q,elemtype e)

int deletequeue(linkqueue *q,elemtype *e)

int destroyqueue(linkqueue *q)

return 1;

}int main()

printf("列印佇列中的元素:");

while( q.front != q.rear )

return 0;

}

佇列的順序儲存結構:影響程式效率,也容易出現陣列越界的錯誤。

解決假溢位的辦法就是佇列滿了之後就再從頭開始,也就是頭尾相接的迴圈佇列。

•迴圈佇列它的容量是固定的,並且它的隊頭和隊尾指標都可以隨著元素入出佇列而發生改變,這樣迴圈佇列邏輯上就好像是乙個環形儲存空間。

佇列空條件:q.front == q.rear

佇列滿條件:(q.rear +1)%maxsize == 0 (此時佇列實際容量為maxsize -1)

//定義乙個迴圈佇列

#define maxsize 100

typedef struct

sqqueue;

//初始化乙個迴圈佇列

status initqueue(sqqueue *q)

//插入元素e

status enqueue(sqqueue *q,elemtype e)

//出佇列操作

deletequeue(sqqueue *q, elemtype *e)

算 資料結構與演算法(C語言) 棧和佇列 棧

棧是一種重要的線性結構,通常稱,棧和佇列是限定插入和刪除只能在表的 端點 進行的線性表。後進先出 棧的元素必須 後進先出 棧的操作只能在這個線性表的表尾進行。注 對於棧來說,這個表尾稱為棧的棧頂 top 相應的表頭稱為棧底 bottom 因為棧的本質是乙個線性表,線性表有兩種儲存形式,那麼棧也有分為...

資料結構複習(三)棧和佇列(佇列)

是只允許在一端進入,在另一端刪除的線性表。插入 入隊,在隊尾插入,刪除 出隊,在隊頭刪除 定義 define maxsize 10 typeof struct sqqueue 初始化判空條件front為隊頭,rear為隊尾void initqueue sqqueue q 入隊bool enqueue...

資料結構 佇列 佇列的實現(C語言)

1 什麼是佇列?佇列 只允許在一端進行插入資料操作,在另一端進行刪除資料操作的特殊線性表,佇列具有先進先出fifo first in first out 入佇列和出佇列。隊尾 進行插入操作的一端 隊頭 進行刪除操作的一端 詳細了解 佇列的詳解 2 佇列的實現 佇列也可以陣列和鍊錶的結構實現,使用鍊錶...