Linux學習-數據結構(哈希表)

1.哈希表

1.哈希算法

將數據通過哈希算法映射成一個關鍵值,存放都在同一位置實現數據的高效存儲和查找,將時間復雜度盡可能降低至O(1)

2.哈希碰撞

多個數據通過哈希算法得到的鍵值相同,稱為產生哈希碰撞

3.哈希表

  • 構建哈希表存放0-100之間的數據
  • 哈希算法選擇:

1.將0-100之間的數據的個位作為鍵值

4.哈希表的實現

1.元素插入

int insert_data_hashtable(int tmpdata)
{hashnode **pptmpnode = NULL;hashnode *pnewnode = NULL;int key = 0;key = tmpdata % INDEX;for(pptmpnode = &(phashtable[key]); *pptmpnode != NULL && (*pptmpnode)->data < tmpdata; pptmpnode = &(*pptmpnode)->pnext){}pnewnode = malloc(sizeof(hashnode));if(pnewnode == NULL){perror("fail to malloc");return -1;}pnewnode->data = tmpdata;pnewnode->pnext = *pptmpnode;*pptmpnode = pnewnode;return 0;
}

2.遍歷

int show_data_hashtable(void)
{int i = 0;hashnode *ptmpnode = NULL;for(i = 0; i < INDEX; i++){printf("%d:", i);ptmpnode = phashtable[i];while(ptmpnode != NULL){printf("%-2d ", ptmpnode->data);ptmpnode = ptmpnode->pnext;}printf("\n");}return 0;
}

3.元素查找

hashnode *find_data_hashtable(int tmpdata)
{int key = 0;hashnode *ptmpnode = NULL;key = tmpdata % INDEX;ptmpnode = phashtable[key];while(ptmpnode != NULL && ptmpnode->data <= tmpdata){if(ptmpnode->data == tmpdata){return ptmpnode;}ptmpnode = ptmpnode->pnext;}

4.銷毀

int destroy_hashtable(void)
{int i = 0;hashnode *ptmpnode = NULL;hashnode *pfreenode = NULL;for(i = 0; i < INDEX; i++){ptmpnode = phashtable[i];pfreenode = phashtable[i];while(ptmpnode != NULL){ptmpnode = ptmpnode->pnext;free(pfreenode);pfreenode = ptmpnode;}phashtable[i] = NULL;}return 0;
}

2.排序和查找算法

1.冒泡排序

  • 時間復雜度o(n^2)
  • 相鄰兩個元素比較,大的向后走,小的向前走

2.選擇排序

  • 時間復雜度o(n^2)
  • 從前到后找最小值與前面的元素交換
  • 找到 len-1個最小值,最后一個最大值即排序完成

3.插入排序

  • 時間復雜度o(n^2),如果數組有序時間復雜度降低至o(n)
  • 將數組中的每個元素插入到有序數列中
  • 先將要插入的元素取出,依次和前面元素比較,比元素大的向后走,直到前一個元素比要插入的元素小,或者到達有序數列開頭為止

4.希爾排序

  • 時間復雜度o(nlogn)
  • 通過選擇不同的步長,將數組拆分成若干個小的數組實現插入排序
  • 若干個小的數組成為有序數列后,使得數組的數據大致有序
  • 最后再對整體完成一次插入排序

5.快速排序

  • 時間復雜度o(nlogn)
  • 選擇左邊的作為鍵值,從后面找一個比鍵值小的放前面,從前面找一個比鍵值的放后面,鍵值放中間
  • 左右兩邊有元素則遞歸調用

6.折半查找(二分查找)

int mid_search(int *parray, int low, int high, int tmpdata)
{int mid = 0;if (low > high){return -1;}mid = (low + high) / 2;if (tmpdata == parray[mid]){return mid;}else if (tmpdata > parray[mid]){return mid_search(parray, mid+1, high, tmpdata);}else if (tmpdata < parray[mid]){return mid_search(parray, low, mid-1, tmpdata);}
}

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

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

相關文章

Google Chrome <139.0.7236.0 UAF漏洞

【高危】Google Chrome <139.0.7236.0 UAF漏洞 漏洞描述 Google Chrome 是美國谷歌&#xff08;Google&#xff09;公司的一款Web瀏覽器。 受影響版本中&#xff0c;OpenscreenSessionHost::ReportAndLogError 方法的參數使用了 std::string_view 類型來接收錯誤消息。當一…

CentOS8 Stream 網卡配置及重啟

在 CentOS 8 Stream 中&#xff0c;網卡配置已由 NetworkManager 管理&#xff0c;傳統的 ifcfg-eth0 文件仍然支持&#xff0c;但推薦使用 nmcli 或 nmtui 工具進行網絡配置和管理。以下是網卡配置及重啟的詳細步驟&#xff1a;1. 查看當前網卡狀態列出所有網卡bash復制nmcli …

SpringMvc的原理深度剖析及源碼解讀

一、springmvc啟動加載流程1、引入spring-web.jar包時&#xff0c;在這個包的META-INF/services/javax.servlet.ServletContainerInitializer文件中定義的加載類SpringServletContainerInitializer,提供給springmvc實現初始化的操作。2、在SpringServletContainerInitializer類…

【ESP32-menuconfig(1) -- Build Type及Bootloader config】

Build Type Bootloader configmenuconfig介紹Build typeCONFIG_APP_BUILD_TYPECONFIG_APP_BUILD_TYPE_PURE_RAM_APPCONFIG_APP_REPRODUCIBLE_BUILDCONFIG_APP_NO_BLOBSCONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERSCONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERSBootloader config…

C++信息學奧賽一本通-第一部分-基礎一-第3章-第1節

C信息學奧賽一本通-第一部分-基礎一-第3章-第1節 2051 偶數 #include <iostream>using namespace std;int main() {int number; cin >> number;if (number % 2 0) {cout << "yes";} }2052 范圍判斷 #include <iostream>using namespace std…

自由學習記錄(79)

PBRBRDF原理&Unity實現深入淺出_嗶哩嗶哩_bilibili 進行改進 一個像素點對應一個范圍內的 一個微表面--一個由無數個起起伏伏的結構組成的物理結構 屏幕上的每一個像素點&#xff0c;在渲染時通常會被視為一個“微表面”的代表 比如在這個圖中&#xff0c;只關心紅色的區…

復雜路況誤報率↓78%!陌訊輕量化模型在車輛違停識別的邊緣計算優化?

一、行業痛點&#xff1a;動態交通場景的識別困境據《2024中國智慧交通白皮書》統計&#xff0c;城市核心路段違停誤報率高達35%&#xff0c;主要源于兩大難點&#xff1a;??短暫停靠干擾??&#xff1a;出租車臨時停靠與違停行為特征重疊??復雜背景干擾??&#xff1a;樹…

大語言模型提示工程與應用:提示詞基礎使用方式

提示詞使用方式 學習目標 在本課程中&#xff0c;我們將學習更多關于提示詞使用方式。 相關知識點 提示詞使用 學習內容 1 提示詞使用 1.1 文本摘要 語言模型最典型的應用場景之一就是文本摘要。我們可以通過以下提示實現基礎摘要功能&#xff1a; 提示: 解釋抗生素是什么回答&…

常見命令-資源查看-iostat命令實踐

文章目錄 系統中未安裝 iostat 命令 1. 監控CPU與磁盤的基礎負載 2. 診斷I/O性能瓶頸 3. 實時監控與動態采樣 4. 特定設備或分區的精細化監控 5. 性能測試與基準數據生成 6. 結合其他工具進行綜合調優 總結 結果輸出速查表 第一部分:CPU統計信息 第二部分:設備/磁盤統計信息(…

WinForm 實戰 (進度條):用 ProgressBar+Timer 打造動態進度展示功能

目錄 核心控件解析? ProgressBar 進度條? Timer 定時器? 實戰案例 常見應用場景? 總結? 在 WinForm 桌面應用開發中&#xff0c;進度反饋是提升用戶體驗的關鍵環節。無論是文件處理、數據加載還是復雜計算&#xff0c;一個直觀的進度條能讓用戶清晰了解任務狀態&…

使用 ast-grep 精準匹配指定類的方法調用(以 Java 為例)

使用 ast-grep 精準匹配指定類的方法調用&#xff08;以 Java 為例&#xff09; 在代碼重構、安全審計或靜態分析的場景中&#xff0c;我們常常需要匹配某個特定類中定義的方法調用。而 ast-grep 作為一款基于語法樹的代碼搜索工具&#xff0c;提供了強大的模式匹配功能&#…

Dijkstra?spfa?SPstra?

帶負權的無負環最短路問題 對于一張有負邊權的圖&#xff0c;普通 Dijkstra 就不能用了&#xff0c;比如&#xff1a;正常的 Dijkstra 擴散的節點依次為 1,3,2,41,3,2,41,3,2,4。 這時候可以發現&#xff0c;當點 222 擴散的時候&#xff0c;原本達到點 333 的路徑長度是 111&a…

React函數組件靈魂搭檔:useEffect深度通關指南!

你以為它只是替代componentDidMount&#xff1f;數據抓取、事件綁定、定時清理...&#xff1f;事實上&#xff0c;useEffect才是函數組件的“幕后操控者”&#xff01;但依賴數組的坑、閉包的陷阱&#xff0c;你真的玩轉了嗎&#xff1f; 告別“能用就行”&#xff0c;今天帶你…

LabVIEW實驗室測試框架

在實驗室測試場景中&#xff0c;選用合適的 LabVIEW 框架能夠極大提升測試效率、優化測試流程并保障測試結果的準確性。介紹幾款常用且功能強大的 LabVIEW 測試框架&#xff1a;?TestStand?框架概述?TestStand 是 NI 公司專為測試系統開發設計的一款測試執行管理框架。它能夠…

Kiro :從“規范”到“實現”的全流程 AI 助手

為什么是 Kiro Kiro 是一款面向“規范驅動開發”&#xff08;Spec-Driven Development&#xff09;的 AI 開發助手。與只在“寫代碼”環節輔助不同&#xff0c;Kiro 將“從需求到設計再到實現”的完整鏈路顯性化&#xff0c;把需求、設計、任務分解、代碼與測試、文檔等全部納…

【0基礎PS】PS工具詳解--矩形工具

目錄前言一、矩形工具的基礎認知?二、矩形工具的選項欄詳解?三、矩形工具的繪制技巧?四、矩形工具的實際應用場景?五、常見問題與解決方案?總結前言 在 Photoshop&#xff08;簡稱 PS&#xff09;的眾多繪圖工具中&#xff0c;矩形工具是使用率極高的基礎工具之一。無論是…

移動端app專項測試

學習目標&#xff1a;app專項測試知識點&#xff0c;其他知識擴充一、app專項&#xff08;app怎么測試/app側重點在哪&#xff09;1.功能&#xff1a;跟前面功能測試一樣&#xff08;跟需求文檔提取測試點&#xff0c;編寫測試用例&#xff09;2.安裝1.不同品牌安裝,不同操作系…

Spring Boot 結合 CORS 解決前端跨域問題

Spring Boot 結合 CORS 解決前端跨域問題 1. 背景 在前后端分離的項目中&#xff0c;前端&#xff08;例如 http://localhost:3000&#xff09;調用后端接口&#xff08;例如 http://localhost:8080&#xff09;時&#xff0c;瀏覽器會因為 同源策略 限制而阻止請求&#xff0c…

GPT-5 發布:微小進步難掩瓶頸,AI 行業或迎冷靜

北京時間 8 月 8 日凌晨,OpenAI 的 GPT-5 在萬眾期待中登場。距離 GPT-4 發布已過去兩年半,然而這場發布會卻未重現 ChatGPT 初現時的驚艷,也沒有 GPT-4 的跨越式升級,更無 o1 發布時的震撼。1 小時 20 分鐘的發布會,充斥著不驚艷的測試數據、與競品難分高下的用例展示,甚…

僵尸進程、孤兒進程、進程優先級、/proc 文件系統、CRC 與網絡溢出問題處理(實戰 + 原理)

僵尸進程 / 孤兒進程&#xff1a;是什么、為什么會出現、如何定位與清理進程優先級&#xff1a;nice/priority、CFS 與實時調度、I/O 優先級、cgroup 限流/proc 文件系統&#xff1a;最常用路徑與診斷手法CRC 校驗&#xff1a;在存儲/網絡里的作用與局限、抓包“校驗錯誤”的常…