【初階數據結構】深入解析隊列:探索底層邏輯

請添加圖片描述

初階數據結構相關知識點可以通過點擊以下鏈接進行學習一起加油!
時間與空間復雜度的深度剖析深入解析順序表:探索底層邏輯深入解析單鏈表:探索底層邏輯深入解析帶頭雙向循環鏈表:探索底層邏輯深入解析棧:探索底層邏輯
深入解析隊列:探索底層邏輯深入解析循環隊列:探索底層邏輯

🔥引言

本篇將深入解析隊列:探索底層邏輯,理解底層是如何實現并了解該接口實現的優缺點,以便于我們在編寫程序靈活地使用該數據結構。

請添加圖片描述
Alt

🌈個人主頁:是店小二呀
🌈C語言筆記專欄:C語言筆記
🌈C++筆記專欄: C++筆記
🌈初階數據結構筆記專欄: 初階數據結構筆記

🌈喜歡的詩句:無人扶我青云志 我自踏雪至山巔
請添加圖片描述

文章目錄

  • 一、隊列的概念及結構
  • 二、實現隊列的相關接口(Stack.h)
    • 2.1 隊列初始化
    • 2.2 隊尾入隊列
    • 2.3 隊頭出隊列
    • 2.4 獲得隊列頭部元素
    • 2.5 獲得隊列尾部元素
    • 2.6 獲取隊列中有效元素個數
    • 2.7 檢測隊列是否為空
    • 2.8 打印隊列數據
    • 2.9 隊列的銷毀
  • 三、循環隊列

一、隊列的概念及結構

隊列是指只允許在一端進行插入數據操作,在另一端進行刪除數據操作的特殊線性表。隊列具有先進先出 FIFO(First In First Out) 這一點跟棧的先進后出是相反的

  • 入隊列:進行插入操作的一端并且稱為隊尾

  • 出隊列:進行刪除操作的一端并且稱為隊頭

隊列可用通過數組或鏈表結構實現,一般推薦使用鏈表實現更優一點。如果使用數組實現在出隊列時,需要挪移大量數據,效率較低

這里采用鏈表結構實現隊列

![外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳](https://img-home.csdnimg.cn/images/在這里插入圖片描述

在這里插入圖片描述

在設計隊列結構中,需要設計兩個指針去控制隊列各節點的情況。head(隊頭指針)指向實際對頭元素,taill(隊尾指針),指向實際隊尾元素,增加一個變量size用于統計元素個數,由于存在多種信息,可以使用結構體統一管理

在這里插入圖片描述

二、實現隊列的相關接口(Stack.h)

在這里插入圖片描述

2.1 隊列初始化

void QueueInit(Queue *pq)//所以導致了需要初始化
{assert(pq);pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}

這里需要注意的是:這里不需要對于節點進行初始化,在創建節點時會完成對應的初始化工作。

2.2 隊尾入隊列

void QueuePush(Queue* pq, QDataType x)
{assert(pq);Qnode* newnode = (Qnode*)malloc(sizeof(Qnode));if (newnode == NULL){perror("malloc fail!!!");return ;}//創建為需要初始化下newnode->next = NULL;newnode->val = x;if (pq->phead == NULL)pq->phead = pq->ptail = newnode;else{(pq->ptail)->next = newnode;pq->ptail = newnode;}pq->size++;
}

這里需要注意的是:首先就是空間開辟失敗,然后需要搞清楚我們申請空間是給誰使用的,這里是為節點開辟空間。而不是為Queue結構體對象開辟空間,這里節點之間連接是通過節點指針進行連接

2.3 隊頭出隊列

void QueuePop(Queue* pq)
{assert(pq && pq->phead);Qnode *del = pq->phead;pq->phead = pq->phead->next;free(del);del == NULL;if (pq->phead == NULL){pq->ptail = NULL;}pq->size--;
}

這里需要注意的是:當隊列為空時,意味著頭指針為空,那么尾指針也需要置成空

2.4 獲得隊列頭部元素

QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->phead);return pq->phead->val;
}

2.5 獲得隊列尾部元素

QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->phead);return pq->ptail->val;
}

2.6 獲取隊列中有效元素個數

int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}

2.7 檢測隊列是否為空

bool QueueEmpty(Queue* pq)
{assert(pq);return pq->phead == NULL;
}

2.8 打印隊列數據

void QueuePrint(Queue* pq)
{assert(pq);while (!QueueEmpty(pq)){printf("%d->", QueueFront(pq));QueuePop(pq);}
}

這里需要注意的是:這里不能用cur,因為cur是不會動的,phead在pop的時候一直移動

2.9 隊列的銷毀

void QueueDestroy(Queue* pq)
{assert(pq);Qnode* cur = pq->phead;while (cur)//刪除的作用{Qnode* next = cur->next;free(cur);cur = next;}pq->ptail = NULL; pq->phead = NULL;pq->size = 0;
}

這里需要注意的是:這里cur不要手動置空,會跳出循環,需等待cur自動指向空

三、循環隊列

實際中我們有時還會使用一種隊列叫循環隊列。如操作系統課程講解生產者消費者模型 時可以就會使用循環隊列。環形隊列可以使用數組實現,也可以使用循環鏈表實現。(會單獨一篇來講述)

在這里插入圖片描述


請添加圖片描述

以上就是本篇文章的所有內容,在此感謝大家的觀看!這里是店小二初階數據結構筆記,希望對你在學習初階數據結構中有所幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43502.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43502.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43502.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三、Python日志系統之監控郵件發送

import smtplib from email.mime.text import MIMEText import time import os import datetime from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler# 郵件配置 SMTP_SERVER smtp.example.com SMTP_PORT 587 SMTP_USERNAME your_…

EXISTS、NOT EXISTS、IN和NOT IN辨析

文章目錄 概要EXISTSNOT EXISTSINNOT IN辨析 概要 EXISTS、NOT EXISTS、IN 和 NOT IN 是 SQL 中用于查詢時進行條件判斷的關鍵字,它們在功能上有相似之處,但使用場景和性能表現上有所不同。 EXISTS 1.用途:用于子查詢中,判斷子…

C++:cv.absdiff函數含義

在OpenCV庫中,absdiff函數是一個非常重要的圖像處理函數,其意義在于計算兩個輸入數組(通常是圖像)之間對應元素差的絕對值。這個函數在圖像處理和計算機視覺領域有著廣泛的應用,如圖像對比、運動檢測等。 函數的基本用…

python第三方庫【numpy.array】的使用(超詳細)

NumPy 是 Python 中用于科學計算的基礎庫之一,它提供了高性能的多維數組對象以及這些數組的操作。NumPy 的核心數據結構是 ndarray(N-dimensional array,N維數組),它提供了一種高效的存儲和操作大型多維數組的方法。以…

熬了一晚上,我從零實現了 Transformer 模型,把代碼講給你聽

自從徹底搞懂Self_Attention機制之后,筆者對Transformer模型的理解直接從地下一層上升到大氣層,瞬間打通任督二脈。夜夜入睡之前,那句柔情百轉的"Attention is all you need"時常在耳畔環繞,情到深處不禁拍床叫好。于是…

客戶案例|某大型證券公司數據庫運維場景數據安全實踐

證券行業涉及股票、債券、基金等金融產品的發行、交易和監管,業務具有數據規模大、數據價值高、數據應用場景復雜的顯著特點,其中高速流轉的業務系統中含有海量的客戶個人信息、交易、行情、咨詢等高敏感高價值信息。由于證券期貨業務場景所具有的特殊性…

初中生物知識點總結(人教版)

第一章 認識生物 一、 生物的特征: 1. 生物的生活需要營養 2. 生物能進行呼吸 3. 生物能排出身體內產生的廢物 4. 生物能對外界的刺激做出反應 5. 生物能生長和繁殖 除病毒以外,生物都是由細胞構…

單例模式(大話設計模式)C/C++版本

單例模式 C 餓漢 /* HM hungry man 餓漢 */ #include <iostream> using namespace std; class Singleton { private:Singleton() { cout << "單例對象創建&#xff01;" << endl; };Singleton(const Singleton &);Singleton &operator(c…

C++:cv.contourArea()函數解析

cv::contourArea是OpenCV庫中用于計算輪廓面積的函數。該函數非常適用于圖像處理中的形狀分析、物體檢測等領域。以下是關于cv::contourArea的詳細介紹&#xff1a; 一、函數概述 cv::contourArea是OpenCV中用于計算封閉輪廓面積的函數。它接受一個輪廓作為輸入&#xff0c;并…

Fedora 41 移除 Python 2支持

2024年的今天&#xff0c;在 Python 3 發布 16 年后&#xff0c;Fedora 發行版項目宣布 Fedora 41 將移除 Python 2.7。 除了 PyPy&#xff0c;Fedora 41 以及之后的版本將不再有 Python 2.7。運行時或構建時需要 python2.7 的軟件包也將面臨退役。 Fedora 41 將包含圖像處理…

C++ 十進制與十六進制之間相互轉換

十進制與十六進制之間相互轉換 10_to_16 與二進制類似&#xff0c;十進制轉十六進制對16整除&#xff0c;得到的余數的倒序即為轉換而成的十六進制&#xff0c;特別地&#xff0c;如果超過10以后&#xff0c;分別用ABCDEF或abcdef來代替10、11、12、13、14、15。 代碼1: #in…

【密碼學基礎】基于LWE(Learning with Errors)的全同態加密方案

學習資源&#xff1a; 全同態加密I&#xff1a;理論與基礎&#xff08;上海交通大學 郁昱老師&#xff09; 全同態加密II&#xff1a;全同態加密的理論與構造&#xff08;Xiang Xie老師&#xff09; 現在第二代&#xff08;如BGV和BFV&#xff09;和第三代全同態加密方案都是基…

Git 快速上手

這個文檔適用于需要快速上手 Git 的用戶&#xff0c;本文盡可能的做到簡單易懂 ?????? git 的詳細講解請看這篇博客 Git 詳解&#xff08;原理、使用&#xff09; 1. 什么是 Git Git 是目前最主流的一個版本控制器&#xff0c;并且是分布式版本控制系統&#xff0c;可…

合規與安全雙重護航:ADVANCE.AI讓跨境支付更無憂

近年來&#xff0c;隨著全球化進程的加速和跨境貿易的蓬勃發展&#xff0c;跨境支付的需求大幅增加。根據Grand View Research的報告&#xff0c;2021年全球跨境支付市場規模估計為22.09萬億美元。到2025年&#xff0c;全球跨境支付市場預計將達到35.9萬億美元&#xff0c;較20…

rfid資產管理系統解決方案 rfid固定資產管理系統建設方案

在現代化的倉庫儲備中&#xff0c;僅僅完成對貨物進出的簡單批次處理已經不再足夠&#xff0c;對庫內貨品的種類、數量、生產屬性、垛位等信息的清晰記錄變得至關重要。然而&#xff0c;傳統的資產管理方式如條形碼在長期使用中逐漸暴露出不耐臟、數據存儲量小、讀取間隔短、不…

優質可視化大屏模板+動態圖表+科技感原件等

優質可視化大屏模板動態圖表科技感原件等 軟件版本&#xff1a;Axure RP 9 作品類型&#xff1a;高保真 作品內容&#xff1a; 1、大屏可視化模版&#xff08;100套&#xff09;&#xff1a;包含智慧城市、智慧社區、智慧園區、智慧農業、智慧水務、智慧警務、城市交通、電…

新加坡工作和生活指北:教育篇

文章首發于公眾號&#xff1a;Keegan小鋼 新加坡的基礎教育在東南亞處于領先地位&#xff0c;這點基本是人盡皆知&#xff0c;但很多人對其教育體系只是一知半解&#xff0c;今日我們就來深入了解一下。 新加坡的學校主要分為三大類&#xff1a;政府學校、國際學校、私立學校。…

Python 中將字典內容保存到 Excel 文件使用詳解

概要 在數據處理和分析的過程中,經常需要將字典等數據結構保存到Excel文件中,以便于數據的存儲、共享和進一步分析。Python提供了豐富的庫來實現這一功能,其中最常用的是pandas和openpyxl。本文將詳細介紹如何使用這些庫將字典內容保存到Excel文件中,并包含具體的示例代碼…

如何理解Node.js?NPM?Yarn?Vue?React?

一、背景 對后端技術棧更熟悉&#xff0c;對前端技術棧不了解&#xff0c;希望通過前后端的技術棧進行對比&#xff0c;可以更直觀地了解前端技術棧。 二、Node.js Node.js 是一個基于 Chrome V8 JavaScript 引擎的 JavaScript 運行環境。它使得 JavaScript 可以在服務器端運…

Xterminal工具的安裝與使用體驗

Xterminal工具的安裝與使用體驗 一、Xterminal簡介二、Xterminal核心特性三、Xterminal使用場景四、Xterminal下載地址五、Xterminal的基本使用5.1 設置倉庫密碼5.2 SSH連接5.3 Windows遠程桌面5.4 筆記功能5.5 AI工具 六、總結 一、Xterminal簡介 Xterminal是一款專為開發者設…