資料結構及演算法基礎 之棧與佇列(二)

2021-09-29 04:15:21 字數 1323 閱讀 6478

佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。與棧相反,佇列是一種先進先出(first in first out, fifo)的線性表。與棧相同的是,佇列也是一種重要的線性結構,實現乙個佇列同樣需要順序表或鍊錶作為基礎。

此前我們用瀏覽器的歷史記錄作為棧的例子讓大家了解她的應用廣泛,佇列在現實中也是應用十分廣泛。我們的輸入緩衝區接受鍵盤的輸入就是按佇列的形式輸入和輸出的,不然的話就很容鬧出問題

環形佇列:

環形佇列也是佇列的一種,環形佇列它的容量是固定的,並且它的隊頭和隊尾指標都可以隨著元素入出佇列而發生改變,這樣迴圈佇列邏輯上就好像是乙個環形儲存空間。但要注意的是,在實際的記憶體當中,不可能有真正的環形儲存區,我們只是用順序表模擬出來的邏輯上的迴圈。

queue.h

#ifndef __queue__h

#define __queue__h

#include

typedef

int elemtype;

typedef

struct _queue queue_s,

*queue_p;

#endif

queue.c

#include

#include

#include

"queue.h"

/*環形佇列*/

/*建立佇列*/

intcreatequeue

(queue_s *queue,

int queuesize)

queue->front = queue->rear =0;

queue->queuesize = queuesize;

pthread_mutex_init(&

(queue->queuelock)

,null);

return0;

}int

__isfullqueue

(queue_p queue)

intisfullqueue

(queue_p queue)

int__isemptyqueue

(queue_p queue)

intisemptyqueue

(queue_p queue)

intpushqueue

(queue_p queue, elemtype value)

intpopqueue

(queue_p queue, elemtype *value)

#if 1

intmain()

#endif

資料結構與演算法 二 (棧 佇列)

這篇筆記主要寫棧和佇列,因為他們的特點是相反的 一 棧特點 先進後出,類似於子彈入彈夾,先進去的子彈最後才發射 這裡也使用陣列來模擬一下,有四個方法,壓棧,取棧,檢視棧頂,是否為空 棧的底層我們使用陣列來儲存資料 int elements public stacktest1 壓棧 壓入元素 publ...

資料結構(二) 棧棧與佇列

棧 stack 是限制插入和刪除只能在乙個位置上進行的表,該位置是表的末端,叫做棧頂 top 它是後進先出 lifo 的。對棧的基本操作只有push 進棧 和pop 出棧 兩種,前者相當於插入,後者相當於刪除最後的元素。實現 利用乙個單鏈表來實現棧的資料結構。而且,因為我們都只針對棧頂元素進行操作,...

資料結構與演算法之棧和佇列

棧和佇列以及優先佇列是比陣列和其他資料結構更加抽象的結構。主要通過介面對棧 佇列 和優先順序佇列進行定義,這些介面表明通過它們可以完成的操作,而它們的主要實現機制對 使用者來說是不可見的。棧每一次只允許訪問乙個資料項 最後插入的資料項,所以棧又叫先進後出 在這裡用陣列定義乙個棧,如下 public ...