資料結構小結 (三)棧與佇列

2021-07-09 02:17:05 字數 1595 閱讀 4816

資料結構來具體實現。

佇列(queue) 也是表,然而,使用佇列時插入在一端進行而在另一端進行刪除操作。

對與佇列而言,不論是使用佇列或者使用鍊錶都是快速的o(1)時間完成操作。

先進先出

佇列可以使用陣列與鍊錶實現

陣列實現:

其實陣列實現就是我們常說的迴圈佇列,迴圈佇列的應用很多,比如作為緩衝區使用,核心就

是使用佇列原理實現的核心緩衝區。

然而更重要的就是判斷空佇列,判斷滿佇列的方法了,根據設定不同方法也不盡相同, 我們這

裡使用的是少用一塊空間的方法,判斷佇列空或者滿。當然我們這裡也是不保證執行緒安全的,

如果你需要保證執行緒安全,簡單的就加一把鎖,多處理器加自旋鎖。也可以考慮無鎖技術。

[c]#define max 10

#define success 0

#define fail -1

/*這是乙個迴圈佇列,使用少用乙個空間的辦法解決判滿判空的問題*/

typedef struct queuequeue;

[/c]

[c]queue * queue_create(void)elseelseelse_node;

typedef struct _node_ctl;

[/c]

[c]void que_inq(_ctl *ctl,_node *node)else{

ctl->tail->next = node ;

ctl->tail = node ;

node->next = null;

ctl->count++;

[/c]

[c]_node * que_deq(_ctl * ctl){

_node *rst = null;

if(null == ctl){

return null;

rst = ctl->head;

if(rst){

ctl->head = rst->next;

ctl->count--;

rst->next = null;

return rst;

[/c]

[c]void que_del(_ctl *ctl){

_node *pos = null;

if(null == ctl){

return ;

pos = ctl->head;

while(pos != null){

ctl->head = pos->next;

free(pos);

pos = ctl->head;

[/c]

[c]void que_create(_ctl *ctl ,int len){

_node *pnt = null ;

int fact = 0 ;

if(null == ctl || len < 1){

return ;

while(fact < len){

pnt = (_node *)malloc(sizeof(_node));

pnt->data = fact + 1;

que_inq(ctl,pnt);

fact++;

[/c]

資料結構 棧和佇列小結

1棧 1 棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表。我們把插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不包含任何元素的棧稱為空棧。棧又稱為後進先出 last in first out 的線性表,簡稱lifo結構。2 棧的儲存結構 由於棧也是線性表,因此線性表的儲存結構...

大話資料結構 (三)棧與佇列

棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表,是線性表內的乙個小分支。我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 buttom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表,簡稱lifo結構。在日常生活中,棧的魅力無處不在,比如ctrl z回退快捷鍵,它會馬上返回到...

資料結構 棧與佇列

題目 1.編寫函式,採用鏈式儲存實現棧的初始化 入棧 出棧操作 2.編寫函式,採用順序儲存實現棧的初始化 入棧 出棧操作 3.編寫函式,採用鏈式儲存實現佇列的初始化 入隊 出隊操作 4.編寫函式,採用順序儲存實現佇列的初始化 入隊 出隊操作 5.編寫乙個主函式,在主函式中設計乙個簡單的選單,分別除錯...