/*
主題:佇列的鏈式表示
開發環境:visual studio
開發語言:c
*/#include #include #include typedef int elemtype;
typedef enum boolean;
//結點
typedef struct qnode
qnode, *pqnode;
//佇列
typedef struct linkqueue
linkqueue;
//函式宣告
boolean initlist(linkqueue *l);
boolean enqueue(linkqueue *l, elemtype value);
boolean queueempty(linkqueue *l);
boolean dequeue(linkqueue *l, elemtype *value);
boolean gethead(linkqueue *l, elemtype *value);
boolean clearqueue(linkqueue *l);
boolean destroyqueue(linkqueue *l);
//主函式
int main(void)
else
printf("是否是空佇列?%d(1:空, 0:否)\n", queueempty(&l));
enqueue(&l, -5);
enqueue(&l, 5);
enqueue(&l, 10);
gethead(&l, &temp);
printf("隊頭元素為temp = %d\n", temp);
dequeue(&l, &value);
printf("刪除了隊頭元素value = %d\n", value);
gethead(&l, &temp);
printf("新的隊頭元素為temp = %d\n", temp);
if(clearqueue(&l))
if (destroyqueue(&l))
return 0;}/*
函式名稱:initlist
函式功能:初始化乙個佇列
函式引數:l(佇列)
函式返回值:
boolean(型別):
true:成功
false:失敗
*/boolean initlist(linkqueue *l)
(l)->prear = (l)->pfront;
(l)->pfront->pnext = null;
return true;}/*
函式名稱:enqueue
函式功能:向佇列中插入元素
函式引數:l(佇列)
value(元素)
函式返回值:
boolean(型別):
true:成功
false:失敗
*/boolean enqueue(linkqueue *l, elemtype value)
//給元素分配空間
pnew = (qnode *) malloc(sizeof(qnode));
if (null == pnew)
pnew->data = value; //將資料存放在新結點
pnew->pnext = null;
l->prear->pnext = pnew; //將結點插入到佇列裡
l->prear = pnew; //保證prear指標始終指向佇列的最後乙個元素
return true;}/*
函式名稱:dequeue
函式功能:如果佇列不為空,則刪除佇列的乙個元素
函式引數:l(佇列)
value(刪除元素的存放區域)
函式返回值:
boolean(型別):
true:刪除成功
false:刪除失敗
*/boolean dequeue(linkqueue *l, elemtype *value)
//使pnew指向佇列的第乙個元素
pnew = l->pfront->pnext;
*value = pnew->data;
l->pfront->pnext = pnew->pnext; //pfront指標指向第乙個元素的下乙個元素
if (pnew == l->prear) //如果要刪除的元素是最後乙個元素
free(pnew);
pnew = null;
return true;}/*
函式名稱:queueempty
函式功能:判斷乙個佇列是否為空
函式引數:l(佇列)
函式返回值:
boolean(型別):
true:空
false:非空
*/boolean queueempty(linkqueue *l)
else }
/* 函式名稱:gethead
函式功能:如果佇列不為空,則返回佇列的頭元素
函式引數:l(佇列)
value(返回元素的存放區域)
函式返回值:
boolean(型別):
true:刪除成功
false:刪除失敗
*/boolean gethead(linkqueue *l, elemtype *value)
*value = l->pfront->pnext->data;
return true;}/*
函式名稱:clearqueue
函式功能:清空整個佇列
函式引數:l(佇列)
函式返回值:
boolean(型別):
true:清空成功
false:失敗
*/boolean clearqueue(linkqueue *l)
//使尾指標指向頭指標位置
l->prear = l->pfront;
pdelete = l->pfront->pnext;
l->pfront->pnext = null;
//迴圈刪除佇列裡的元素
while(pdelete)
//釋放臨時指標
free(pcurrent);
free(pdelete);
return true;}/*
函式名稱:destroyqueue
函式功能:銷毀整個佇列
函式引數:l(佇列)
函式返回值:
boolean(型別):
true:清空成功
false:失敗
*/boolean destroyqueue(linkqueue *l)
return true;
}
執行結果:
佇列的鏈式表示
佇列是和棧相反的一中線性結構,棧的後進先出lifo結構,而佇列是先進先出fifo結構。它只允許在表的一端進行插入,而在另一端進行刪除。1 2和棧相反,佇列是一種先進先出fifo的結構,包括隊頭front,隊尾rear 3使用鏈式結構表示佇列時,分別乙個頭指標和尾指標。為操作方便,鏈佇列也有乙個頭結點...
鏈式結構表示佇列
define qdatatype int typedef struct qlistnode qnode 佇列的結構 typedef struct queue queue 初始化佇列 void queueinit queue q 隊尾入佇列 void queuepush queue q,qdataty...
鏈式佇列的表示和實現
2014年4月19日 鏈式佇列的實現 用頭結點來儲存鍊錶長度 儲存格式 儲存結構和單鏈表一樣 queue data next data next data next data 0 head node node 0 node 1 end node include include include inc...