用鏈表實現隊列,在元素入列和出列時為什么需要判斷鏈表是否為空?
一、用鏈表實現隊列,在元素入列和出列時為什么需要判斷鏈表是否為空
結合《算法》這本書之前代碼可知已初始化表尾,元素入列如果為空,則用表尾結點初始化表頭結點;出列時,操作的是表頭結點,當表中元素為空時,first節點中內容正確,last節點仍存有之前內容,需將其置為空。
鏈式隊列
鏈式隊列 : 用鏈表形式實現的隊列。鏈表結點為隊列數據存儲區,鏈表結點包括兩部分數據存儲區和指針存儲區。
數據存儲區 :存放真實有效數據的區域。
指針存儲區 :存放下一個鏈表結點的地址。
注意:
1. 鏈式隊列不存在隊列已滿的情況。在內存足夠大的情況下,每次動態申請鏈表結點內存都會成功,即不會出現隊列已滿的情況,除非數據量超大內存不夠。
2. 鏈式隊列只存在隊列為空的情況,在剛創建隊列成功時隊列為空,或者隊列數據已全部出隊,則此時隊列為空。
3.在鏈式隊列中頭結點的數據域不存放有效數據,指針域存放名列前茅個有效數據域的結點地址,頭結點的作用是方便對鏈式隊列的操作。
延伸閱讀:
二、鏈式隊列數據出隊
1.只有在鏈式隊列非空時出隊數據才有效。
2.若只有一個有效結點時,需將隊尾指針指向頭結點,頭結點指針域為空。
3.頭結點指針指向下下個有效結點。
4.結點數據出隊。
5.釋放出隊結點數據內存。
如下圖所示:
//鏈式隊列數據出隊
void OutLinkQueue(pLinkQueue queue, int * value)
{
??? pNode queNode = 0;//隊列結點指針
??? if (IsEmptyLinkQueue(queue))
??? {
?????? printf(“鏈式隊列為空,出隊失敗……\r\n”);
?????? *value = 0;
?????? return;
??? }
??? if (queue->qFront->pNext == queue->qRear)//只有一個有效結點
?????? queue->qRear = queue->qFront;//隊尾指針等于隊首指針
??? queNode = queue->qFront->pNext;//結點指針指向隊首有效結點
??? queue->qFront->pNext = queNode->pNext;//隊首結點指針指向下個結點
??? *value = queNode->dat;//出隊結點值
??? free(queNode);//釋放內存
??? printf(“出隊成功!出隊值:%d? —->? “, *value);
??? printf(“隊首結點指針:0x%08X??? 隊尾指針:0x%08X\r\n”, queue->qFront->pNext, queue->qRear);
}

相關推薦HOT
更多>>
APP是怎樣獲取和上傳數據到云端數據庫的?
一、APP是怎樣獲取和上傳數據到云端數據庫的首先pc端的情況,現在一般都是BS架構的系統,所以肯定存在服務器和瀏覽器,服務器端部署著系統相關...詳情>>
2023-10-14 23:32:35
為什么Visual FoxPro漸漸淘汰了?
一、為什么Visual FoxPro漸漸淘汰了為什么會有Visual FoxPro 要淘汰的傳聞呢,我不是很清楚。但這兩年微軟對Visual FoxPro的不宣傳態度卻是為這...詳情>>
2023-10-14 23:20:43
到底哪些APP在用Flutter?
一、滴滴出行滴滴出行是一款出行服務平臺,提供打車、順風車、單車等多種出行方式。在采用Flutter技術后,滴滴出行成功實現了Android和iOS平臺...詳情>>
2023-10-14 20:48:15
為什么不推薦使用try-with-finally處理Java異常?
一、不推薦使用try-with-finally處理Java異常的原因1、代碼冗余使用 try-with-finally 時,需要在 finally 塊中編寫釋放資源的代碼,這可能導致...詳情>>
2023-10-14 20:26:43熱門推薦
為什么要把web服務器和數據庫服務器運行在不同機器上?
沸APP是怎樣獲取和上傳數據到云端數據庫的?
熱為什么Visual FoxPro漸漸淘汰了?
熱粒度是什么意思?
新快照與備份有什么區別?
為什么MySQL中很少見到使用視圖功能?
Notion Database中怎么能實現多級標簽?
Python底層是用什么語言實現的?
到底哪些APP在用Flutter?
為什么不推薦使用try-with-finally處理Java異常?
蘋果TF上架是什么意思?
Java并發編程需要掌握什么?
hash是什么?
Linux并發、競態、互斥鎖、自旋鎖、信號量都是什么?
技術干貨






