DS部落格作業02 棧和佇列

2022-06-04 17:15:10 字數 1200 閱讀 5083

佇列定義:

1、佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。

2、與棧相反,佇列是一種先進先出的線性表.

3、實現乙個佇列同樣需要順序表或鍊錶作為基礎。

佇列的鏈式儲存結構

(佇列即可用鍊錶實現,也可以用順序表實現,而棧一般用順序表實現,佇列用鍊錶實現,簡稱鏈佇列 )

typedef struct qnode qnode,queueptr;

typedef struct linkqueue;

(頭結點不是必要的,但為了方便操作還是加上)

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

建立佇列

建立佇列要完成兩個任務:

一是在記憶體中建立乙個頭結點;

二是將佇列的頭指標和尾指標都指向這個生成的頭結點,因此此時是空佇列。

initqueue(linkqueue *q)

出佇列操作

出佇列操作是將佇列中的第乙個元素移出,對頭指標不發生變化,改變頭結點的next指標即可。

如果原佇列只有乙個元素,那麼就要處理一下隊尾指標。

deletequeue(linkqueue *q, elemtype *e)

銷毀佇列

由於鏈佇列建立在記憶體動態區,因此當乙個佇列不再有用時應當把它及時銷毀掉,以免過多的占用記憶體空間

destroyqueue(linkqueue *q)

}佇列的順序儲存結構

入佇列操作其實就是在隊尾追加乙個元素,不需要任何移動,時間複雜度為o(1).出佇列則不同,因為我們已經架設下標為0的位置是佇列的隊頭,因此每次出佇列操作所有元素都要向前移動。

迴圈佇列

迴圈佇列的實現只需要靈活的改變front和rear指標即可。

就是讓front或rear指標不斷+1,即時超出了地位範圍,也會自動從頭開始。我們可以採取取模運算處理:

(rear+1)%queuesize

(front+1)%queuesize\

**清單

//定義乙個迴圈佇列

typedef struct

//初始化乙個佇列

initqueue(cyclequeue *q)

//入佇列操作

insertqueue(cyclequeue *q,elemtype e)

//出佇列操作

deletqueue(cyclequeue *q,elemtype *e)

DS部落格作業02 棧和佇列

棧的應用 佇列的儲存結構及操作 佇列的應用 編譯錯誤 這題我是在vs除錯能執行後才提交到pta的,編譯錯誤是因為pta預設編譯語言是c,而我用的是c 答案正確 這裡就說一下我在vs除錯過程中遇到的問題吧。1.初始化迴圈佇列的時候一直在糾結要不要讓front指向第乙個節點的前乙個位置,也就是多設乙個空...

DS部落格作業02 棧和佇列

這個作業屬於哪個班級 資料結構 網路2011 2012 這個作業的位址 ds部落格作業02 棧和佇列 這個作業的目標 學習棧和佇列的結構設計及運算操作 姓名 李雷默 順序表 底層實現是陣列 和棧結構的儲存資料的方式高度相似,只不過棧對資料的訪問過程有特殊的限制,而順序表沒有。鍊錶的頭部作為棧頂,意味...

DS部落格作業03 棧和佇列

在createstack函式中為結構體和陣列分配好記憶體,push函式先判斷堆疊是否滿,然後根據tag對相應堆疊進行輸入 pop函式先根據tag判斷對那個堆疊操作,然後再進行判斷是否為空,不空就出棧。q1 輸出搞錯了,滿是沒有輸出tag沒有輸出 q2 沒賦值直接用mystack maxsize 假設...