探索鏈表的奧秘:C語言中的查找操作與鏈表打印

目錄

鏈表的基本結構

頭插法

打印鏈表

按位置查找

按值查找

主函數

查找操作

示例運行

輸出示例

總結


在數據結構的學習中,鏈表是一種非常重要的線性結構。它的動態特性使得在插入和刪除操作時比數組更為高效。今天,我們將繼續探討鏈表的操作,特別是如何在鏈表中進行查找操作,并打印鏈表的內容。通過這篇博客,你將更深入地理解鏈表的實現和操作。

鏈表的基本結構

在C語言中,鏈表的基本結構由節點(Node)構成,每個節點包含數據部分和指向下一個節點的指針。我們首先定義一個鏈表節點的結構體:

typedef int ElemType;typedef struct LNode {ElemType data;struct LNode *next;
} LNode, *LinkList;

這里,ElemType定義了節點中存儲的數據類型,而LNode結構體則包含了數據和指向下一個節點的指針。

頭插法

我們之前已經實現了頭插法的插入操作。頭插法是將新節點插入到鏈表的頭部。以下是頭插法的實現:

void list_head_insert(LinkList &L) {L = (LinkList) malloc(sizeof(LinkList)); // 申請頭結點空間L->next = NULL;ElemType x;scanf("%d", &x);LinkList s; // 用來指向申請的新結點while (x != 9999) {s = (LinkList) malloc(sizeof(LinkList));s->data = x;s->next = L->next; // s 的next指向原本鏈表的第一個結點L->next = s; // 頭結點的 next 指向新結點scanf("%d", &x);}
}

在這個函數中,我們首先創建一個頭節點,然后通過循環讀取用戶輸入的數據,直到輸入9999為止。每次讀取到一個新數據時,我們都會創建一個新節點,并將其插入到鏈表的頭部。

打印鏈表

為了驗證我們的鏈表操作是否成功,我們需要一個函數來打印鏈表的內容:

void print_list(LinkList L) {L = L->next; // 跳過頭結點while (L != NULL) {printf("%d ", L->data);L = L->next;}printf("\n");
}

這個函數從頭節點的下一個節點開始遍歷鏈表,打印每個節點的數據。

按位置查找

我們實現了一個按位置查找的函數,返回指定位置的節點:

LinkList GetElem(LinkList &L, ElemType pos) {int i = 0;if (pos < 0) {return NULL; // 如果位置不合法,返回NULL}while (L && i < pos) {L = L->next; // 遍歷鏈表i++;}return L; // 返回指定位置的節點
}

在這個函數中,我們通過遍歷鏈表,返回指定位置的節點指針。如果位置不合法(如負數),則返回NULL

按值查找

除了按位置查找,我們還實現了一個按值查找的函數,返回第一個匹配的節點:

LinkList LocateElem(LinkList L, ElemType value) {while (L) {if (L->data == value) { // 找到對應的值 返回對應結點的地址return L;}L = L->next; // 繼續遍歷}return NULL; // 如果沒有找到,返回NULL
}

這個函數遍歷鏈表,查找第一個與給定值匹配的節點。如果找到,則返回該節點的指針;如果沒有找到,則返回NULL

主函數

最后,我們在main函數中調用這些操作,構建鏈表并進行查找操作:

int main() {LinkList L; // L 是鏈表頭指針list_head_insert(L); // 傳遞頭指針的地址print_list(L); // 打印鏈表LinkList search = GetElem(L, 2); // 查找位置為 2 的元素if (search != NULL) {printf("Element at position 2: %d\n", search->data);} else {printf("No element found at position 2.\n");}search = LocateElem(L, 4); // 查找值為 4 的元素if (search != NULL) {printf("Element with value 4: %d\n", search->data);} else {printf("No element found with value 4.\n");}return 0;
}

main函數中,我們首先定義一個鏈表L,然后調用list_head_insert函數來填充鏈表。接著,我們使用print_list函數打印鏈表的內容,以驗證插入操作的正確性。

查找操作

  1. 按位置查找:我們調用GetElem函數查找位置為2的元素。根據鏈表的結構,返回的節點將是鏈表中第二個元素的指針。如果該位置存在,我們將打印該元素的值;如果不存在,則輸出相應的提示信息。

  2. 按值查找:我們調用LocateElem函數查找值為4的元素。該函數會遍歷鏈表,查找第一個匹配的節點。如果找到,我們將打印該節點的值;如果沒有找到,則輸出相應的提示信息。

示例運行

假設用戶輸入以下數據來創建鏈表:

10
20
30
40
9999

在這種情況下,鏈表的初始狀態為:40 -> 30 -> 20 -> 10。接著,我們進行查找操作:

  • 查找位置為2的元素,返回的結果將是30
  • 查找值為4的元素,由于鏈表中沒有值為4的節點,輸出將是“沒有找到值為4的元素”。

輸出示例

假設用戶輸入了上述數據,程序的輸出將類似于:

40 30 20 10 
Element at position 2: 30
No element found with value 4.

總結

通過這篇博客,我們深入探討了鏈表的基本操作,包括頭插法、打印鏈表、按位置查找和按值查找。鏈表的靈活性使得它在許多應用中都非常有用,尤其是在需要頻繁插入和刪除操作的場景中。

希望這篇文章能幫助你更好地理解鏈表的實現和操作。如果你有任何問題或想法,歡迎在評論區留言討論!鏈表的世界充滿了可能性,繼續探索吧!

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

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

相關文章

第八屆藍橋杯單片機省賽

什么&#xff1f;你把最近幾屆省賽真題做完已經無題可做了&#xff0c;那不妨來看看老古董第八屆省賽的題目吧&#xff01; 附件&#xff1a;第八屆藍橋杯單片機省賽 一、數碼管 1.頁面流轉 以上的頁面流轉功能可以用下圖總結&#xff1a; #mermaid-svg-38fdQpdydbMy5CyP {fo…

win10電腦鼠標速度突然變的很慢?

電腦鼠標突然變很慢&#xff0c;殺毒檢測后沒問題&#xff0c;鼠標設置也沒變&#xff0c;最后發現可能是誤觸鼠標的“DPI”調節鍵。 DPI調節鍵在鼠標滾輪下方&#xff0c;再次點擊即可恢復正常鼠標速度。 如果有和-的按鍵&#xff0c;速度變快&#xff0c;-速度變慢。 圖源&…

1-002:MySQL InnoDB引擎中的聚簇索引和非聚簇索引有什么區別?

在 MySQL InnoDB 存儲引擎 中&#xff0c;索引主要分為 聚簇索引&#xff08;Clustered Index&#xff09; 和 非聚簇索引&#xff08;Secondary Index&#xff09;。它們的主要區別如下&#xff1a; 1. 聚簇索引&#xff08;Clustered Index&#xff09; 定義 聚簇索引是表數…

【解決哈希沖突】

哈希沖突 如果兩個不同的 key 通過哈希函數得到了相同的索引&#xff0c;這種情況就叫做「哈希沖突」。 哈希沖突不可能避免&#xff0c;只能在算法層面妥善處理出現哈希沖突的情況。 哈希沖突是一定會出現的&#xff0c;因為這個 hash 函數相當于是把一個無窮大的空間映射到…

文件操作詳解(萬字長文)

C語言文件操作 一、為什么使用文件&#xff1f;二、文件分類三、文件的打開和關閉四、文件的順序讀寫4.1fputc4.2fgetc4.3fputs4.4fgets4.5 fprintf4.6 fscanf4.7 fwrite4.8 fread 五、文件的隨機讀寫5.1 fseek5.2 ftell和rewind六、文件讀取結束的判定七、文件緩沖區 一、為什…

基于 JDBC 的后端與 MySQL 數據庫交互 javaweb

一、了解JDBC 二、添加MySQL的JDBC驅動包 三、使用JDBC連接數據庫應用&#x1f517; 3.1創建一個包 3.2 查找實例 3.3 修改添加刪除實例 四、封裝 &#x1f4e6; DBConnection.java MysqlUtil.java 測試使用一下 測試1 測試2 在后端開發中&#xff0c;與數據庫進行交…

貪心算法--

1.檸檬水找零 link:860. 檸檬水找零 - 力扣&#xff08;LeetCode&#xff09; code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 貪心算法&#xff0c; 優先花出大面額bill&#xff0c; 盡可能保護小面額billint five 0, ten 0;// 不…

基于YOLO11深度學習的電瓶車進電梯檢測與語音提示系統【python源碼+Pyqt5界面+數據集+訓練代碼】

《------往期經典推薦------》 一、AI應用軟件開發實戰專欄【鏈接】 項目名稱項目名稱1.【人臉識別與管理系統開發】2.【車牌識別與自動收費管理系統開發】3.【手勢識別系統開發】4.【人臉面部活體檢測系統開發】5.【圖片風格快速遷移軟件開發】6.【人臉表表情識別系統】7.【…

github生成badges的方法

在Github頁面上生成類似下面這樣的badge的方法 你可以通過以下步驟在GitHub個人主頁的README中創建類似的技術棧徽章&#xff1a; 一、使用 Shields.io 生成徽章 Shields.io 是一個開源徽章生成工具&#xff0c;支持自定義文本、顏色、圖標等參數。 1. 基礎模板 https://…

vue3 二次封裝uni-ui中的組件,并且組件中有 v-model 的解決方法

在使用uniappvue3開發中&#xff0c; 使用了uni-ui的組件&#xff0c;但是我們也需要自定義組件&#xff0c;比如我要自定一個picker 的組件&#xff0c; 是在 uni-data-picker 組件的基礎上進行封裝的 父組件中的代碼 <classesselect :selectclass"selectclass"…

Spring Boot啟動流程及源碼實現深度解析

Spring Boot啟動流程及源碼實現深度解析 一、啟動流程概述 Spring Boot的啟動流程圍繞SpringApplication類展開&#xff0c;核心流程可分為以下幾個階段&#xff1a; 初始化階段&#xff1a;推斷應用類型&#xff0c;加載ApplicationContextInitializer和ApplicationListene…

爬蟲案例七Python協程爬取視頻

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、Python協程爬取視頻 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 爬蟲案例七協程爬取視頻 提示&#xff1a;以下是本篇文章正文…

uni-app開發的App和H5嵌套封裝的App,以及原生App有什么區別

uni-app 開發的 App 和 H5 嵌套封裝的 App 是兩種不同的開發模式&#xff0c;雖然它們都可以實現跨平臺開發&#xff0c;但在技術實現、性能、功能支持等方面有顯著區別。以下是詳細對比&#xff1a; 1. uni-app 開發的 App uni-app 是一個基于 Vue.js 的跨平臺開發框架&#…

Python 爬蟲實戰案例 - 獲取拉勾網招聘職位信息

引言 拉勾網&#xff0c;作為互聯網招聘領域的佼佼者&#xff0c;匯聚了海量且多樣的職位招聘信息。這些信息涵蓋了從新興科技領域到傳統行業轉型所需的各類崗位&#xff0c;無論是初出茅廬的應屆生&#xff0c;還是經驗豐富的職場老手&#xff0c;都能在其中探尋到機遇。 對…

LM Studio 替換源的方式解決huggingface.co無法訪問的問題

安裝軟件完成之后&#xff0c;不要打開&#xff0c;打開了就直接關閉 在安裝目錄下&#xff0c;比如我安裝在E:\Program Files\LM Studio 下面三個文件中的huggingface.co全部替換為hf-mirror.com然后再打開即可。 E:\Program Files\LM Studio\resources\app\.webpack\rende…

【模擬CMOS集成電路設計】帶隙基準(Bandgap)設計與仿真(基于運放的電流模BGR)

【模擬CMOS集成電路設計】帶隙基準&#xff08;Bandgap&#xff09;設計與仿真 前言工程文件&部分參數計算過程&#xff0c;私聊~ 一、 設計指標指標分析&#xff1a; 二、 電路分析三、 仿真3.1仿真電路圖3.2仿真結果(1)運放增益(2)基準溫度系數仿真(3)瞬態啟動仿真(4)靜態…

微服務拆分-遠程調用

我們在查詢購物車列表的時候&#xff0c;它有一個需求&#xff0c;就是不僅僅要查出購物車當中的這些商品信息&#xff0c;同時還要去查到購物車當中這些商品的最新的價格和狀態信息&#xff0c;跟購物車當中的快照進行一個對比&#xff0c;從而去提醒用戶。 現在我們已經做了服…

機動車授權簽字人考試的報名條件是什么?

機動車授權簽字人考試的報名條件通常如下&#xff1a; 學歷職稱與工作經驗要求 中級職稱及以上&#xff1a;應具備中級及以上專業技術職稱&#xff0c;且從事相關檢驗檢測工作三年及以上。如果承檢車型有專項作業車、大型客車、校車和危險貨物運輸車等&#xff0c;若不是相關專…

智慧工廠監測信息系統:構筑安全的數字化未來

在現代工業的浪潮中&#xff0c;智慧工廠已成為推動生產效率和產品質量提升的關鍵力量。為了確保這一先進生產模式的穩健運行&#xff0c;智慧工廠監測信息系統應運而生&#xff0c;并通過一系列安全措施&#xff0c;為企業的數字化轉型保駕護航。 安全注冊&#xff0c;筑牢第…

P2P中NAT穿越方案(UDP/TCP)(轉)

轉自&#xff1a;P2P中NAT穿越方案&#xff08;UDP/TCP&#xff09;_udp反向鏈接-CSDN博客 同&#xff1a;P2P中NAT穿越方案&#xff08;UDP/TCP&#xff09; - 知乎 (zhihu.com) 本文介紹了傳統基于udp的打洞方式&#xff0c;更進一步闡述了tcp打洞的原理&#xff0c;是對于…