linux鏈表應用2

以下是根據您的要求對示例代碼進行優化的結果:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 定義路徑節點結構體
typedef struct PathNode {unsigned int fildid;char folderName[100];  // 文件夾名字struct PathNode* next;  // 指向下一個節點的指針
} PathNode;// 添加路徑節點函數
PathNode* addPathNode(PathNode* head, unsigned int fildid, const char* folderName) {PathNode* newNode = (PathNode*)malloc(sizeof(PathNode));newNode->fildid = fildid;strcpy(newNode->folderName, folderName);newNode->next = NULL;if (head == NULL) {return newNode;  // 如果鏈表為空,新節點為頭節點} else {PathNode* currentNode = head;while (currentNode->next != NULL) {currentNode = currentNode->next;  // 找到鏈表末尾的節點}currentNode->next = newNode;  // 將新節點添加到鏈表末尾return head;}
}// 打印路徑函數
void printPath(PathNode* head) {printf("Path: ");while (head != NULL) {printf("%s/", head->folderName);head = head->next;}printf("\n");
}// 釋放路徑節點內存函數
void freePath(PathNode* head) {PathNode* currentNode = head;while (currentNode != NULL) {PathNode* temp = currentNode;currentNode = currentNode->next;free(temp);}
}int main() {PathNode* head = NULL;  // 定義路徑鏈表的頭節點// 示例添加路徑節點head = addPathNode(head, 1, "first_folder");head = addPathNode(head, 2, "second_folder");head = addPathNode(head, 3, "third_folder");// 示例打印路徑printPath(head);// 示例釋放路徑節點內存freePath(head);return 0;
}

在優化之后的代碼中,將 addPathNode 函數返回了頭節點,而不是通過指針傳遞的方式進行修改。這樣可以提高代碼的可讀性和易用性。同時,還增加了 fildid 字段,用于存儲文件夾的標識符。其他部分的代碼保持不變。

請注意,在優化代碼時,我將 PathNode 結構體中字段的順序進行了調整,以遵循良好的內存對齊原則,提高內存使用效率。

要刪除路徑節點,你需要進行以下步驟:

  1. 找到要刪除的節點。遍歷鏈表,找到需要刪除的節點。如果鏈表為空或者要刪除的節點是頭節點,需要單獨處理。

  2. 修改鏈表指針。將要刪除的節點從鏈表中移除,需要修改前一個節點的 next 指針,將其指向要刪除節點的下一個節點。

  3. 釋放節點內存。刪除節點后,記得釋放該節點的內存,防止內存泄漏。

以下是一個示例函數來刪除路徑節點:

void deletePathNode(PathNode** head, unsigned int fildid) {if (*head == NULL) {printf("空鏈表\n");return;}PathNode* currentNode = *head;PathNode* previousNode = NULL;// 查找要刪除的節點while (currentNode != NULL && currentNode->fildid != fildid) {previousNode = currentNode;currentNode = currentNode->next;}// 處理節點不存在情況if (currentNode == NULL) {printf("節點 %d 不存在\n", fildid);return;}// 處理要刪除的節點是頭節點的情況if (previousNode == NULL) {*head = currentNode->next;} else {// 修改前一個節點的指針previousNode->next = currentNode->next;}// 釋放節點內存free(currentNode);
}

使用示例:

// 示例刪除節點
deletePathNode(&head, 2);// 示例打印路徑
printPath(head);// 示例釋放路徑節點內存
freePath(head);

在示例代碼中,注意 deletePathNode 函數使用了 PathNode** 類型的參數,這樣可以直接修改參數傳入的指針的指向,以修改鏈表的頭指針。另外,要刪除的節點通過 fildid 進行匹配,你可以根據實際情況使用其他方式進行匹配。

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

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

相關文章

C#網絡編程(System.Net命名空間)

目錄 一、System.Net命名空間 1.Dns類 &#xff08;1&#xff09;示例源碼 &#xff08;2&#xff09;生成效果 2.IPAddress類 &#xff08;1&#xff09;示例源碼 &#xff08;2&#xff09;生成效果 3.IPEndPoint類 &#xff08;1&#xff09; 示例源碼 &#xff0…

記錄 | linux下互換鍵盤的Ctrl和CapsLock鍵

互換ctrl和CapsLK setxkbmap -option "ctrl:swapcaps"打開設置文件&#xff1a; sudo vim /etc/default/keyboard將其中的XKBOPTIONS中添加ctrl:swapcaps即可&#xff0c;如下所示&#xff1a; # KEYBOARD CONFIGURATION FILE# Consult the keyboard(5) manual pa…

【動態規劃系列】子數組的最大和

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

自動化測試框架需要具備哪些功能?

我們經常聽說使用了某某框架&#xff0c;那框架究竟是什么呢&#xff1f;框架有什么優勢和功能&#xff1f; 什么是自動化框架 自動化框架是包含了自動化測試的組織、執行、監控以及報告等流程的工具&#xff0c;是由多個工具、庫、模塊和API等組成的工具集。自動化框架的目標…

線性代數入門與學習筆記

該內容為重拾部分線性代數知識的學習筆記&#xff0c;內容上更多的是為了解決問題而學習的內容&#xff0c;并非系統化的學習。 針對的問題為&#xff1a;Music算法推導求解過程中的矩陣計算知識。 學習的內容包括&#xff1a;矩陣原理、矩陣行列式、矩陣的秩、線性變換矩陣變換…

我的創作紀念日——多線程進階分享

多線程-進階 1. 鎖的策略 1.1 樂觀鎖&悲觀鎖 樂觀鎖 預計在線程中數據大概率不會被其他線程拿去修改 對于加鎖所作的準備較少。只有當修改的操作真正發生了&#xff0c;才會進行加鎖操作 所以樂觀鎖適用于多讀少寫的情況&#xff0c;可以降低加鎖頻率&#xff0c;提升效…

C++初學教程四

一、程序設計 程序設計的三種基本結構:順序、選擇、循環 選擇結構(也叫分支結構) :判斷所指定的條件是否滿足,決定從給定的兩組或多組操作選擇其中的一種。 計算機的判斷是通過對表達式的計算來實現,也就是關系運算、邏輯運算。 用語句來體現就是if語句和switch語句。 一…

繼承與派生(2)

1.派生類的權限&#xff1a;派生類的成員函數可以訪問基類的public和protected類型的成員&#xff0c;而派生類的對象只能訪問public類型的成員 2.創建順序&#xff08;先創造后析構&#xff09;&#xff1a;基類函數&#xff0c;派生類函數&#xff0c;組合類函數 類的組合按…

每日一練 | 華為認證真題練習Day145

1、一臺路由器通過RIP、OSPF和靜態路由都學習到了到達同一目的地址的路由。默認情況下&#xff0c;VRP將最終選擇通過哪種協議學習到的路由&#xff1f; A. 三種協議學習到的路由都選擇 B. 靜態路由 C. OSPF D. RIP 2、如果網絡管理員沒有配置骨干區域&#xff0c;則路由器…

VUE+THREE.JS 點擊模型相機緩入查看模型相關信息

點擊模型相機緩入查看模型相關信息 1.引入2.初始化CSS3DRenderer3.animate 加入一直執行渲染4.點擊事件4.1 初始化renderer時加入監聽事件4.2 觸發點擊事件 5. 關鍵代碼分析5.1 移除模型5.2 創建模型上方的彈框5.3 相機緩入動畫5.4 動畫執行 1.引入 引入模型所要呈現的3DSprite…

Dexie 查詢sql速度優化

Dexie查詢速度慢的原因主要一個優化點是復雜查詢下的count執行。 以下摘自Dexie官方文檔&#xff1a;https://dexie.org/docs/Collection/Collection.count() If executed on simple queries, the native IndexedDB ObjectStore count() method will be called (fast execution…

對標Gen-2!Meta發布新模型,進軍文生視頻賽道

隨著擴散模型的飛速發展&#xff0c;誕生了Midjourney、DALLE 3、Stable Difusion等一大批出色的文生圖模型。但在文生視頻領域卻進步緩慢&#xff0c;因為文生視頻多數采用逐幀生成的方式,這類自回歸方法運算效率低下、成本高。 即便使用先生成關鍵幀,再生成中間幀新方法。如…

Flink Window中典型的增量聚合(ReduceFunction / AggregateFunction)

一、什么是增量聚合函數 在Flink Window中定義了窗口分配器&#xff0c;我們只是知道了數據屬于哪個窗口&#xff0c;可以將數據收集起來了&#xff1b;至于收集起來到底要做什么&#xff0c;其實還完全沒有頭緒&#xff0c;這也就是窗口函數所需要做的事情。所以在窗口分配器…

聽GPT 講Rust源代碼--src/tools(9)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/apply_demorgan.rs 在Rust源代碼中&#xff0c;apply_demorgan.rs文件位于rust-analyzer工具的ide-assists庫中&#xff0c;其作用是實現一個輔助函數&#xff0c;用于在代碼中應用De Morgan定律的變換。 …

Android : 籃球記分器app _簡單應用

示例圖&#xff1a; 1.導包 在build.gradle 中 加入 // 使用androidx版本庫implementation androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03 2. 開啟dataBinding android{...// 步驟1.開啟data bindingdataBinding {enabled true}...} 3.寫個類繼承 ViewModel pac…

整數與IP地址間的轉換

原理&#xff1a;ip地址的每段可以看成是一個0-255的整數&#xff0c;把每段拆分成一個二進制形式組合起來&#xff0c;然后把這個二進制數轉變成一個長整數。 舉例&#xff1a;一個ip地址為10.0.3.193 每段數字相對應的二進制數 10 00001010 0 00000000 3 00000011 193 110000…

自下而上-存儲全棧(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4)存儲技術專家成長路線

數字化時代的到來帶來了大規模數據的產生&#xff0c;各行各業都面臨著數據爆炸的挑戰。 隨著云計算、物聯網、人工智能等新興技術的發展&#xff0c;對存儲技術的需求也越來越多樣化。不同應用場景對存儲的容量、性能、可靠性和成本等方面都有不同的要求。具備存儲技術知識和技…

機器學習-聚類問題

前言 聚類算法又叫做”無監督分類“&#xff0c;目標是通過對無標記訓練樣本來揭示數據的內在性質及 規律&#xff0c;為進一步的數據分析提供基礎。 Kmeans 作為聚類算法的典型代表&#xff0c;Kmeans可以說是最簡單的聚類算法&#xff0c;沒有之一&#xff0c;那她是怎么完…

MySQL為何偏愛B+樹索引

一、MySQL、B樹概念 MySQL是一種關系型數據庫&#xff0c;它使用SQL語言來操作數據。SQL語言可以實現對數據的增刪改查等操作&#xff0c;但是如果數據量很大&#xff0c;那么這些操作的效率就會很低。為了提高效率&#xff0c;MySQL引入了索引的概念。 索引是一種數據結構&am…

人體關鍵點檢測1:人體姿勢估計數據集

人體關鍵點檢測1&#xff1a;人體姿勢估計數據集 目錄 人體關鍵點檢測1&#xff1a;人體姿勢估計數據集 1.人體姿態估計 2.人體姿勢估計數據集 &#xff08;1&#xff09;COCO數據集 &#xff08;2&#xff09;MPII數據集 &#xff08;3&#xff09;Human3.6M &#xf…