佇列(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...