0730 數據結構重點整理

Part 1.梳理數據結構重點

一.宏

? ? ? ? 1.簡單宏

? ? ? ? ? ? ? ? a. #define 宏名 宏體

? ? ? ? ? ? ? ? b. #if 宏(#ifndef)

? ? ? ? ? ? ? ? c.#endif

? ? ? ? 2.多語句宏

? ? ? ? ? ? ? ? a. define 宏函數名(參數1,參數2......)({C語句1,C語句2......})

? ? ? ? ? ? ? ? b. define 宏函數名(參數1,參數2......)do(C語句1,C語句2......)while(0)

二.頭文件的引用

? ? ? ? 1.#include<頭文件>

????????2.#include"頭文件"

? ? ? ? 3.二者區別

1:頭文件是直接訪問系統頭文件庫繼續尋找頭文件

2:頭文件的尋找是先在本目錄下尋找有沒有適配的頭文件,再去系統頭文件庫尋找。

三.typedef

? ? ? ? 1.意義:將類型重定義(起別名)

? ? ? ? 2.用法:typedef int myint(可以用myint來使用int)

? ? ? ? ? ? ? ? ? ? ? #define myint int//將int替換為myint

? ? ? ? 3.define和typedef的區別

1.define是在預處理階段處理的文件,typedef得編譯才能運行。

2.define只是替換,而typedef是起別名

3.define只能做基本類型的替換,而typedef可以做復雜類型的起別名

四.解構類型

? ? ? ? 1.邏輯結構

? ? ? ? ? ? ? ? a.線性結構(順序表,鏈表)

? ? ? ? ? ? ? ? b.樹形結構(二叉樹)

? ? ? ? ? ? ? ? c.圖形結構

? ? ? ? ? ? ? ? d.集合結構

? ? ? ? 2.存儲結構

? ? ? ? ? ? ? ? a.順序存儲(順序表)

? ? ? ? ? ? ? ? b.鏈式存儲(鏈表)

? ? ? ? ? ? ? ? c.索引存儲(哈希表)

? ? ? ? ? ? ? ? d.散列存儲

五.順序表

? ? ? ? 1.定義

? ? ? ? ? ? ? ? a.邏輯

需要定義一個連續的結構體空間,data數組用來存儲數據,len記錄長度,相當于在普通節點數據域插入一個數組用來存儲。

? ? ? ? ? ? ? ? ? b.代碼

typedef struct sqlist
{int data[你需要的數據個數];//普通節點數據int len;//長度節點
}*sqlist;sqlist list = (sqlist)malloc(sizeof(struct sqlist));//申請堆區空間

? ? ? ? 2.插入

? ? ? ? ? ? ? ? a.邏輯

判斷結構滿了沒有,沒有則可以在list->len位置插入數據(尾插邏輯)

頭插需要先將每一位數據后移一位for循環從len到1進行反向后移一位,在0的位置進行插入(頭插邏輯)

? ? ? ? ? ? ? ? b.代碼(尾插)

void insert (sqlist list,int element)
{if(list == NULL, list->len == maxsize)//沒有鏈表或者鏈表滿了不能插入return;list->data[list->len] = element;//在最后一位插入list->len++;
}

? ? ? ? 3.刪除

? ? ? ? ? ? ? ? a.邏輯

直接len--就行,因為數據不用清除,循環遍歷只從0到len-1(尾刪邏輯)

刪除第一位,并從1開始到len-1位,循環前移(頭刪邏輯)

? ? ? ? ? ? ? ? b.代碼(尾刪)

int delete_rear(sqlist list)
{if(NULL == list || list->len == 0){	printf("順序表為空\n");return Faluse;}list->len--;return Success;
}

六.鏈表

? ? ? ? 1.單向鏈表

? ? ? ? ? ? ? ? a.初始化

需要一個節點包含數據域和指針域,指針用來指向下一個,數據域又分頭節點和普通節點,所以需要共用體。

typedef struct Node
{//結構體嵌套共用體union{//普通節點數據域datatype data;//頭結點數據域:鏈表長度int len;};//指針域struct Node *next;
}*linklist;linklist create_node(int flag)
{linklist s = (linklist)malloc(sizeof(struct Node));if(NULL == s){return NULL;}if(flag == 1)//頭節點s->len = 0;else if(flag == 0)//普通節點s->data = 0;s->next = NULL;return s;
}

????????2.單向循環鏈表

? ? ? ? 3.雙向鏈表

? ? ? ? 4.雙向循環鏈表

七.順序表和鏈表的區別

1.順序表是連續存儲的空間,而鏈表是分開的空間

2.順序表是固定的空間,定義好了就不能改變,鏈表是可以增加空間的。

八.棧

1.棧是先進后出的順序,進入abc,出來就是cba;也可以進a出a,進b出b,進c出c;出棧的順序很多。

2.棧也是需要定義maxsize的,棧滿條件就是top == maxsize-1

3.棧的top開始指向的是-1,插入一個數據+1,

4.棧的數據從0開始到 maxsize-1

5.出棧順序的個數(卡特蘭數):1/n+1(2n n)? ? ? ? ?(n m) = n!/m!(n-m)!

九.隊列

1.隊列是先進先出的一個線性結構,會定義兩個指針front和rear指向0,當插入一個數據時,rear++,當刪除一個數據時front++,所以隊列只能先進先出,當隊列已經插入最大值的數據了,并且將所有數據都刪除了,此時front == rear == maxsize,此時就會產生假溢出

2.將隊列定義成循環隊列,即最后走完不指向NULL,指向頭,再人工空出一個節點方便循環,就可以解決假溢出問題

3.循環鏈表的隊滿條件:front == (rear+1)%maxsize

4.隊列空條件:front == rear

5.插入邏輯:data[rear] = element; rear = (rear+1)%maxsize

6.刪除邏輯:front = (front+1)%maxsize

7.計算長度:len = (maxsize+rear-front)%maxsize

十.哈希表

1.哈希算法:得出m(m為原數組長度的4/3),再得出m的最大質數p,然后原數組位置除以p,得到哈希算法后的位置、

2.哈希列表:因為哈希算法后可能有些數會位置相同,所以創建鏈表就行存儲

十一.排序

? ? ? ? 1.插入排序

將數組第一個設為有序數列,后面為無序數列,每次循環都將無序數列的的第一個值給他按大小排到有序數列里。

void insert_sort(int *p,int len)
{int j;for(int i = 1; i < len; i++){int temp = p[i];//記錄無序數組第一個for(j = i-1;j > 0; j++)//從有序數組最后一個開始循環比較{if(p[j] > temp)//由于是升序,每找到一個比要插入大的數,就將這個數循環后移p[j+1] = p[j]//后移elsebreak;}p[j+1] = temp;//將要插入數插入到空的有序數列中}
}

? ? ? ? 2.快速排序

將第一個元素設為基準值,每次循環把大于基準值的放基準值右邊,把小于基準值的放左邊(升序),即完成了一個數的排序,然后利用遞歸算法循環調用自己則完成排序。

int once_sort(int *p,int low,int high)
{int key = p[low];while(low < high){while(p[high] >= key && low < high)//右循環找右邊比key小的數,沒有左移{high--;}p[low] = p[high];while(p[low] >= key && low < high)//左循環找左邊比key大的數,沒有右移{low++;}p[high] = p[low];}
}void quick_sort(int *p,int low,int high)
{int mid = once_sort(p,low,high);//一輪比較quick_sort(p,low,mid-1);//遞歸完成左部分排序quick_sort(p,mid+1,high);//遞歸完成右部分排序
}   

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

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

相關文章

免費版酒店押金原路退回系統之【房費押金計算器】實踐——仙盟創夢IDE

代碼<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>未來之窗——費用計算器</title><s…

Windows下基于 SenseVoice模型的本地語音轉文字工具

Windows下基于 SenseVoice模型的本地語音轉文字工具 前言&#xff1a; ? 現在很流行Vibe Coding但是指揮大模型寫代碼其實也是一件非常累的事情&#xff0c;經常需要輸入大段的文字去描述問題的現象以及具體的解決方案。剛好看到有一些博主通過本地部署語音大模型實現了語音轉…

OWSM v4 語音識別學習筆記

目錄 OWSM v4 簡介 卡內基梅隆大學 這個代碼不知道干嘛的 tokenizer CTC分割算法 yodas2數據集 依賴性安裝&#xff1a; 數據集下載地址&#xff1b; 模型下載地址&#xff1a; docker安裝&#xff08;適用于多數 Linux 系統&#xff09;測試ok 推理demo OWSM v4 簡介…

機器學習線性回歸:從基礎到實踐的入門指南

目錄 一、線性回歸的基本概念 二、線性回歸的核心原理 三、線性回歸的實現步驟 1.數據準備與預處理 2.模型訓練 3.模型評估 &#xff08;四&#xff09;模型優化與應用 四、線性回歸的應用場景 五、線性回歸的進階方向 在機器學習的廣闊領域中&#xff0c;線性回歸是入…

6.Linux 系統啟動過程,破解root密碼與故障修復

Linux :系統啟動過程&#xff0c;破解root密碼與故障修復 一、標準啟動流程 開機自檢 (BIOS/UEFI POST) 硬件初始化與檢測 MBR引導 讀取硬盤主引導記錄&#xff08;512字節&#xff09; GRUB2菜單 加載 /boot/grub2/grub.cfg 顯示啟動菜單 加載Linux內核 載入Linux 內核文件 內…

特產|基于SSM+vue的南陽特產銷售平臺(源碼+數據庫+文檔)

南陽特產銷售平臺 基于SSMvue的南陽特產銷售平臺 一、前言 二、系統設計 三、系統功能設計 平臺功能模塊 管理員功能模塊 商家功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取&#xff1a; 博主介紹&#xff1a;??大…

線性代數常見的解題方法

一.行列式 1.利用行列式的性質進行簡化 (1)重要行列式 主對角線,副對角線(不要忘了-1的次數),拉普拉斯展開(副對角線是m*n),范德蒙 (2)行列式展開定理 每一行/列的元素乘以它對應的代數余子式 擴展:拉普拉斯展開定理,可以按照任意行和列數進行展開,行列式的值=|A|*…

Websocket實時行情接口 (2025最新使用教程)

本教程將指導您如何使用Java Websocket客戶端連接實時行情接口&#xff0c;并訂閱相關數據。 步驟1&#xff1a;配置您的項目 確保您的項目已引入以下依賴&#xff1a; jakarta.websocket-apijakarta.websocket-client-apifastjson2lombokspring-context (如果使用Spring框架) …

【JEECG】JVxeTable表格拖拽排序功能

功能說明&#xff1a; 實現JVxeTable表格拖拽排序功能 解決子表拖拽排序后&#xff0c;點擊保存數據&#xff0c;未實現拖拽排序后效果 參數配置&#xff1a; 提示&#xff1a; 1.開啟 dragSort 屬性之后即可實現上下拖拽排序。 2.使用 sortKey 屬性可以自定義排序保存的 key&…

【騰訊云】EdgeOne網站安全防護的配置方法 防范盜刷流量 附惡意IP和UA黑名單

經過上個月的前車之鑒&#xff0c;我摸索出一套針對騰訊云EdgeOne《付費版》的安全配置模板&#xff0c;僅供各位站長參考 配置方法 一、在EdgeOne控制面板頁面&#xff0c;點擊要配置的域名。 二、進入后&#xff0c;點擊安全防護-WEB防護-自定義規則&#xff0c;按圖所示添加…

白玩 一 記錄retrofit+okhttp+flow 及 kts的全局配置

先回憶下flow吧&#xff01; flow是啥 Flow 是 Kotlin 協程框架中的一個異步數據流處理組件&#xff0c;專為響應式編程設計&#xff0c;適用于需要連續或異步返回多個值的場景&#xff0c;如網絡請求、數據庫查詢、傳感器數據等 1 ?異步流&#xff08;Asynchronous Stream…

犯罪現場三維還原:科技助力刑偵變革

在刑偵領域&#xff0c;犯罪現場的準確還原對于案件偵破起著至關重要的作用。傳統的現場記錄方式&#xff0c;如拍照、繪圖等&#xff0c;雖然能獲取一定信息&#xff0c;但難以全面、直觀地呈現現場全貌&#xff0c;容易遺漏關鍵細節&#xff0c;且在后期分析和信息傳達上存在…

go-admin 構建arm鏡像

目錄 1、 go-admin Dockerfile 2、docker build go-admin 3、settings.yml 4、go-admin-ui Dockerfile 5、docker build go-admin-ui 6、go-admin.yaml 7、go-admin-ui.yaml 1、 go-admin Dockerfile # 構建階段:使用 Go 1.24 版本(支持遠程調試) FROM golang:1.24-…

深入淺出:C++ STL簡介與學習指南

目錄 前言 STL的版本演變 STL六大組件 STL的重要性 如何學習STL STL的缺陷 總結 前言 什么是STL&#xff1f; STL&#xff08;Standard Template Library&#xff0c;標準模板庫&#xff09;是C標準庫的核心組成部分&#xff0c;它不僅是一個可復用的組件庫&#xff0c;更是一…

Mysql事務原理

臟讀(Dirty Read) 某個事務已更新一份數據&#xff0c;另一個事務在此時讀取了同一份數據&#xff0c;由于某些原因&#xff0c;前一個進行了RollBack&#xff0c;則后一個事務所讀取的數據就會是不正確的。 不可重復讀(Non-repeatable read) 在一個事務的兩次查詢之中數據不一…

小紅書筆記詳情API指南

一、引言小紅書作為中國領先的社交電商平臺&#xff0c;擁有超過4.8億用戶(2025年Q2數據)&#xff0c;其開放平臺已成為品牌營銷與數據挖掘的重要渠道?1。通過筆記詳情API獲取數據&#xff0c;可以幫助商家、品牌方和數據分析人員了解用戶反饋、市場趨勢和消費需求?。這些數據…

VS+Qt中使用QCustomPlot繪制曲線標簽(附源碼)

在qt中我們常常會使用數據來繪制曲線&#xff0c;常用的的繪制方法用QCutomPlot、QChart和QPrinter。有時我們會根據需要在曲線進行二次繪制&#xff0c;包括對曲線打標簽&#xff0c;顯示某個點的值等功能。本文主要為大家介紹在QCustomPlot中使用QCPItemTracer和QCPItemText繪…

Spring Boot項目生產環境部署完整指南

在Spring Boot應用開發完成后&#xff0c;如何將其穩定、高效地部署到生產環境是每個開發者都需要掌握的關鍵技能。本文將詳細介紹Spring Boot項目的多種部署方案&#xff0c;從傳統部署到現代化容器部署&#xff0c;選擇最適合的部署策略。 1. 部署前的準備工作 1.1 項目打包優…

微信小程序中實現頁面跳轉的方法

微信小程序中頁面跳轉主要有兩種方式&#xff1a;聲明式導航&#xff08;通過組件實現&#xff09;和編程式導航&#xff08;通過API實現&#xff09;。兩種方式適用于不同場景&#xff0c;以下詳細說明。一、聲明式導航&#xff08;navigator組件&#xff09;通過小程序內置的…

從0開始學linux韋東山教程Linux驅動入門實驗班(7)

本人從0開始學習linux&#xff0c;使用的是韋東山的教程&#xff0c;在跟著課程學習的情況下的所遇到的問題的總結,理論雖枯燥但是是基礎。本人將前幾章的內容大致學完之后&#xff0c;考慮到后續驅動方面得更多的開始實操&#xff0c;后續的內容將以韋東山教程Linux驅動入門實…