一、二級指針的應用場景
? ? ?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】