佇列的鏈式表示

2021-06-09 15:25:40 字數 3487 閱讀 5866

/*

主題:佇列的鏈式表示

開發環境: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...