C資料結構 佇列 鍊錶實現

2021-09-25 06:33:10 字數 3188 閱讀 9620

佇列(queue)是具有兩個特殊屬性的鍊錶。第一,新項只能新增到鍊錶的末尾;第二,只能從鍊錶的開頭移除項。可以把佇列想象成排隊買票的人,你從隊尾加入佇列,買完票後從隊首離開。佇列是一種"先進先出"(first in first out,fifo)的資料形式。

/*queue.h*/

#ifndef _queue_h_

#define _queue_h_

#include typedef int item;

#define maxqueue 10

typedef struct node

node;

typedef struct queue

queue;

void initializequeue(queue* pq);

bool queueisfull(const queue* pq);

bool queueisempty(const queue* pq);

int queueitemcount(const queue* pq);

bool enqueue(item item, queue* pq);

bool dequeue(item* pitem, queue* pq);

void emptythequeue(queue* pq);

bool getheadnode(item* pitem, const queue* pq);

#endif // _queue_h_

/*queue.c*/

#include #include #include "queue.h"

/*區域性函式*/

static void copytonode(item item, node* pn);

static void copytoitem(node* pn, item* pi);

void initializequeue(queue* pq)

bool queueisfull(const queue* pq)

bool queueisempty(const queue* pq)

int queueitemcount(const queue* pq)

bool enqueue(item item, queue* pq)

pnew = (node*)malloc(sizeof(node));

if (pnew == null)

copytonode(item, pnew);

pnew->next = null;

if (queueisempty(pq))

else

pq->rear = pnew;//記錄佇列尾端的位置

pq->items++;//佇列項數加1

return true;

}bool dequeue(item* pitem, queue* pq)

copytoitem(pq->front, pitem);

pt = pq->front;

pq->front = pq->front->next;

free(pt);

pq->items--;

if(pq->items == 0)

return true;

}void emptythequeue(queue* pq)

}bool getheadnode(item* pitem, const queue* pq)

copytoitem(pq->front, pitem);

return true;

}static void copytonode(item item, node* pn)

static void copytoitem(node* pn, item* pi)

/*main.c*/

#include #include #include "queue.h"

//測試程式:利用佇列新增和刪除整數

int main()

if(ch == 'a')

else

}else

else

}printf("%d items in queue\n", queueitemcount(&line));

puts("type a to add, d to delete, q to quit:");

}emptythequeue(&line);

puts("bye!");

return 0;

}

執行結果:

testing the queue inte***ce. type a to add a value,

type d to delete a value, type q to quit.

ainteger to add: 10

putting 10 into queue

1 items in queue

type a to add, d to delete, q to quit:

ainteger to add: 20

putting 20 into queue

2 items in queue

type a to add, d to delete, q to quit:

ainteger to add: 30

putting 30 into queue

3 items in queue

type a to add, d to delete, q to quit:

dremoving 10 from queue

2 items in queue

type a to add, d to delete, q to quit:

dremoving 20 from queue

1 items in queue

type a to add, d to delete, q to quit:

dremoving 30 from queue

0 items in queue

type a to add, d to delete, q to quit:

dnothing to delete

0 items in queue

type a to add, d to delete, q to quit:

qbye!

鍊錶實現佇列 資料結構作業

仿照作業code1的功能,將課本上鍊表的實現佇列能完整實現 需要通過main函式呼叫並能進行友好的人機互動輸入 作業code1 鍊錶實現佇列的 include define ok 1 define error 0 using namespace std typedef int qelemtype t...

資料結構 使用鍊錶實現佇列

佇列 public inte ce queue package linkedlistqueue 帶有尾節點的列表 實現佇列 param public class linkedlistqueue implements queue 使用者傳來只傳來e public node e e 使用者沒有傳任何引數...

資料結構實現 2 3 鍊錶佇列(C 版)

3.演算法複雜度分析 4.完整 在前面第三節中,我們通過動態陣列實現了佇列這種資料結構。當然,佇列也可以通過鍊錶來實現所謂的鍊錶佇列。鍊錶佇列的結構如上圖所示,鍊錶佇列有著佇列的基本特性 1.佇列有隊頭和隊尾兩端。2.入隊操作只能從隊尾進行,出隊操作只能從隊頭進行。3.先入隊的先出隊,即先進先出 f...