數據結構---二級指針(應用場景)、內核鏈表、棧(系統棧、實現方式)、隊列(實現方式、應用)

一、二級指針的應用場景

? ? ?1、在被調函數中,想要修改主調函數中的指針變量,需要傳遞該指針變量的地址,形參用二級指針接收。

? ? ?2、指針數組的數組名是一個二級指針,指針數組的數組名作為參數傳遞時,可用二級指針接收。

? ? ? ? ? ? ? ? 指針數組:保存多個指針的數組。 eg:char *a[10]

? ? ? ? ? ? ? ? 數組名:數組首元素的地址。

二、內核鏈表

?? ? 內核鏈表是一個沒有數據域的雙向循環鏈表。不再將數據存儲在鏈表結點中,而是將結點嵌入到存儲的數據中。其結構示意圖如下:

?????包含兩個宏定義:

? ? ? ? 1、offset_of: 獲取內核鏈表中鏈表結點到結構體起始位置的偏移量。

? ? ? ? 2、container_of: 通過偏移量獲取結構體的首地址(結構體首地址 = 結點首地址 - 偏移量)。

三、棧

? ? ?1、系統棧:

? ? ?2、內存中棧區存儲的數據類型

? ? ? ? 1)局部變量

? ? ? ? 2)函數的形參、函數的返回值

? ? ? ? 3)函數的調用關系

? ? ?3、數據結構中的棧

? ? ? ? 1)棧結構:只允許從一端進行數據的插入和刪除的線形存儲結構,稱之為棧結構。

? ? ? ? 2)特點:先進后出(FILO)

? ? ?4、實現方法

? ? ? ? 1)順序表(數組)---順序棧

? ? ? ? ? ? ? ? 順序棧的四種棧的結構:滿增棧、滿減棧、空增棧、空減棧。

? ? ? ? ? ?(1)滿棧、空棧:按棧頂所在的位置是否存在數據來區分。滿棧:先移動棧頂位置,后存入數據(棧頂始終有數據);空棧:先在棧頂存入數據,后移動棧頂位置(棧頂無數據)。

? ? ? ? ? ?(2)增棧、減棧:按照棧的生長方向區分。增棧:入棧時,棧頂從內存低地址向內存高地址移動;減棧:入棧時,棧頂從內存高地址向內存低地址移動。

? ? ?2)鏈式結構---鏈式棧

? ? ? ? ? (1)棧對象:

? ? ? ? ?(2)應用

????????A. 鏈式棧函數的封裝

????????????????a. 鏈式棧---創建鏈式棧函數的封裝

? ? ? ? ? ? ? ? b. 鏈式棧---判斷是否為空函數的封裝

? ? ????????? ? c. 鏈式棧---遍歷函數的封裝

? ? ? ? ? ? ? ? d. 鏈式棧---入棧(插入數據)函數的封裝

? ? ? ? ? ? ? ? e. 鏈式棧---出棧(刪除數據)函數的封裝

????????????????f. 鏈式棧---獲取棧頂元素函數的封裝

? ? ? ? ? ? ? ? g. 鏈式棧---銷毀函數的封裝

上述函數封裝時所需的頭文件

????????B. 聲明部分(頭文件)

????????C. 在主函數中的書寫格式

四、隊列

? ? ?1、概念

? ? ? ? 允許從一端進行數據插入,另一端進行數據刪除的線形存儲結構,稱為隊列結構。

? ? ? ? 插入操作:叫入隊操作,插入的這端稱為隊列的隊尾;

? ? ? ? 刪除操作:叫出隊操作,刪除的這端稱為隊列的隊頭。

? ? ? ? 特點:先進先出(FTFO)

? ? ? ? 應用:數據緩存

?????2、實現方式

? ?? ? ?1)順序表---順序隊列

? ? ? ? 順序隊列對象:

? ? ? ? 順序隊列的尾指針(tail):先存數據、后移到下一結點,尾指針始終沒有數據。

????????在順序隊列中,邊存邊刪會出現假溢出問題(尾指針的下一項為空,沒有指向應該指向的首地址),將刪除數據空出來的內存沒有使用起來(可以用循環隊列來解決)。

? ? ? ? 循環隊列:用來實現頭指針從最后指向最前的操作。可以解決假溢出問題,但為了區分隊空與隊滿,將來少存儲一個數據。

? ? ? ? 循環隊列的判空:隊頭和隊尾處于同一位置,此時任務隊列為空。

? ? ? ? 循環隊列的判滿:當 隊尾+1 跟上隊頭時,認為此時隊列未滿。

? ? ? ? 循環隊列的實現:(head + 1)% len

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(tail + 1)% len

? ? ? ? 元素范圍:[head , tail )

? ? ?2)鏈式表---鏈式隊列?

? ? ? ?(1) 鏈式隊列對象

? ? ? ? (2)應用
? ? ? ? A. 鏈式隊列函數的封裝

? ? ? ????????? a. 鏈式隊列---創建隊列函數的封裝

????????????????b. 鏈式隊列---判斷是否為空函數的封裝

????????????????c. 鏈式隊列---入隊(插入數據)函數的封裝

????????????????d. 鏈式隊列---出隊(刪除數據)函數的封裝

????????????????e. 鏈式隊列---獲取隊頭元素函數的封裝

????????????????f. 鏈式隊列---銷毀函數的封裝

????????????????g. 鏈式隊列---遍歷函數的封裝

以上函數需要包含的頭文件

????????B. 聲明部分

????????C. 主函數書寫格式

【END】

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

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

相關文章

NodeJs學習日志(1):windows安裝使用node.js 安裝express,suquelize,sqlite,nodemon

windows安裝使用node.js 安裝express,suquelize,sqlite 系統是win10,默認已經安裝好nodejs與npm包名作用expressWeb應用框架suquelize數據庫ORMsqlite數據庫nodemon代碼熱重載安裝express 添加express生成器 npm add express-generator4安裝e…

Cervantes:面向滲透測試人員和紅隊的開源協作平臺

Cervantes 是一個專為滲透測試人員和紅隊打造的開源協作平臺。它提供了一個集中式工作區,用于集中管理項目、客戶端、漏洞和報告。通過簡化數據組織和團隊協調,它有助于減少規劃和執行滲透測試所需的時間和復雜性。 作為 OWASP 旗下的開源解決方案&…

[Python 基礎課程]猜數字游戲

使用 Python 實現一個猜數字游戲,先隨機生成一個 1 到 100 之間的一個隨機整數,讓用戶猜測這個數是什么,每次都提示用戶猜大了還是猜小了,如果用戶猜對了,提示用戶猜對了,用了多少次,并且之前每…

文件加密實現

一、不依賴外部庫實現 使用自定義的XOR加密算法結合簡單的密鑰擴展。 實現說明 這個方案不依賴任何外部庫,僅使用C標準庫實現: 加密原理:采用XOR加密算法,這是一種簡單但有效的對稱加密方式,相同的密鑰可以用于加密和解…

Unity輕量觀察相機

一、腳本功能簡介ObserveCamera 是一個可直接掛載到任意 GameObject 上的通用攝像機控制腳本,支持以下功能:鼠標右鍵控制攝像機繞自身旋轉(俯仰、水平)鼠標左鍵拖拽目標對象進行平移(局部 XY 平面移動)鼠標…

1深度學習Pytorch-pytorch、tensor的創建、屬性、設備和類型轉換、數據轉換、常見操作(獲取元素、元素運算、形狀改變、相乘、廣播)

文章目錄PyTorchTensor1 Tensor 的創建1.torch.tensor2.torch.Tensor3. 線性張量4. 隨機張量5. 特定數值的張量2 Tensor 常見屬性1 屬性2 設備切換3 類型轉換torch.Tensor.to(dtype)類型專用方法創建張量時直接指定類型與 NumPy 數組的類型互轉4 數據轉換(淺拷貝與深…

五、Istio管理網格外部服務

因語雀與csdn markdown 格式有區別,請查看原文: https://www.yuque.com/dycloud/pss8ys 一、Egress Listener 流量策略 前面學習了 sidecar 自動注入原理、inbound Listener、outbound Listener 等概念,也知道了 EgressListener 的流量策略…

Ubuntu20.04 離線安裝 FFmpeg 靜態編譯包

系統版本 Ubuntu20.04 去現場部署項目,發現現場的設備連接的內網,無法使用apt直接安裝ffmpeg ,想解決也簡單,數據線連接手機使用共享網絡,再使用命令sudo apt install ffmpeg安裝即可,奈何現場百多臺設備&a…

C語言高級編程技巧與最佳實踐

C語言高級編程技巧與最佳實踐 - 完整版 目錄 宏定義與預處理技巧內存管理高級技巧函數指針與回調機制數據結構設計并發與多線程錯誤處理與異常機制性能優化技巧調試與測試技巧跨平臺編程安全編程實踐綜合演示示例 宏定義與預處理技巧 1. 條件編譯與平臺檢測 /*** 平臺和編譯…

cygwin+php教程(swoole擴展+redis擴展)

cygwin 1.下載cygwin安裝程序 :在Windows上獲得Linux的感覺 ? 2. 打開安裝包:setup-x86_64.exe 3.選擇安裝類型 從互聯網安裝首次安裝下載而不安裝僅下載軟件包不安裝從本地目錄安裝遷移程序時使用 4.選擇安裝目錄 5.選擇本地軟件包目錄&#xff…

Ethereum: Uniswap V3核心”Tick”如何引爆DEX的流動性革命?

大家好,今天,我們來聊聊一個在去中心化交易所(DEX)領域,尤其是自Uniswap V3問世以來,變得至關重要的概念——Tick(流動性邊界)。 如果大家接觸過DeFi,可能聽說過Uniswap …

【概念學習】什么是深度學習

人工智能 人工智能的簡潔定義如下:努力將通常由人類完成的智力任務自動化。 因此,人工智能是一個綜合性的領域,不僅包括機器學習與深度學習,還包括更多不涉及學習的方法。 在相當長的時間內,許多專家相信,只…

【MATLAB】(八)矩陣

一.矩陣的定義MATLAB 以矩陣作為數據操作的基本單位,這使得矩陣運算變得非常簡捷、方便、高效。矩陣是由m*n個數q(i1,2,…,m;j1,2,…,n),排成的m行n列數表,記成稱為 mxn 矩陣,也可以記成aij或Am*n。其中,i表示行數,j表…

python的高校考研交流系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具:Navicat/SQLyog等都可以 在當今社…

從零開始部署Qwen3-8b大模型到本地

一、方法一(使用docker鏡像進行部署) 安裝Linux服務器,本機測試系統為Ubuntu系統;(帶有2張A100的GPU服務器) 思路為:使用docker部署python環境鏡像在此基礎上安裝vllm拉取Qwen3-8b模型 docker-compose.yml文件部分配…

AI產品經理如何理解和應用Transformer架構,以提升產品的技術能力和用戶體驗?

?你好,我是 ?三橋君? 助你邁向AGI時代!!! 📌本文介紹📌 >> 一、引言 在當今的AI浪潮中,Transformer架構已不再是一個陌生的技術名詞。從OpenAI的GPT系列到Google的BERT,再…

數據結構(四)內核鏈表、棧與隊列

一、內核鏈表基礎1. 什么是 Linux 內核鏈表?Linux 內核鏈表是一種高效的 雙向循環鏈表,廣泛應用于內核模塊開發中,用于管理數據結構。每個節點通過指針連接前一個和后一個元素,實現插入和刪除的高性能。2. 鏈表的定義與初始化在 L…

軟考信息安全工程師11月備考

目前是在職備考,主業是移動端開發工程師。第一個月(8.4-9.6),將分享完下面所有章節內容,平均不到兩天更新一節1.網絡信息安全概述2.網絡攻擊原理與常用方法3.密碼學基本理論4.網絡安全體系與網絡安全模型5.物理與環境安全技術6.認證技術與原理…

使用DrissionPage實現xhs筆記自動翻頁并爬取筆記視頻、圖片

使用DrissionPage實現xhs筆記自動翻頁并爬取筆記視頻、圖片 聲明: 本文章中所有內容僅供學習交流使用,不用于其他任何目的,不提供完整代碼,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 本文章未經…

使用 input 上傳文件, 選擇文件后再次修改文件再上傳失敗( <input type=“file“ /> 自定義上傳)

業務實際需求:點擊【選擇】按鈕先選擇文件,展示文件的詳情:類型,大小,日期......點擊【上傳】按鈕這個時候才去上傳文件如圖:BUG復現:點擊上傳文件后發現xlsx文件有些數據沒填寫,然后…