C語言---鏈表

一.定義

鏈表是由一系列節點組成,每個結點包含兩個域,一個是數據域,數據域用來保存用戶數據,另一個是指針域,保存下一個節點的地址。鏈表在內存中是非連續的。

二.分類

靜態鏈表 動態鏈表
單向鏈表 雙向鏈表 循環鏈表 單向循環鏈表 雙向循環鏈表

三.鏈表的初始化,插入,遍歷,銷毀

#include<stdio.h>
#include<stdlib.h>typedef struct Linknode 
{int data;struct Linknode*next;
}Linknode;
//初始化鏈表,即創建第一個方塊
Linknode* Init_Linknode()
{//創建一個頭指針Linknode* header=(Linknode*)malloc(sizeof(Linknode));header->data=0;header->next=NULL;//設置尾結點Linknode* tail=header;//一開始讓頭指針等于尾指針int value=1;while(1){printf("請輸入數據");scanf("%d",&value);if(value==-1) break;//創建新節點Linknode* new=(Linknode*)malloc(sizeof(Linknode));new->data=value;new->next=NULL;//把新節點插入到鏈表中去tail->next=new;//把新節點變成尾結點tail=new;}return header;
}//遍歷鏈表
void Foreach_Linknode(Linknode* header)
{if(header==NULL) return;//輔助指針變量,指向頭指針的nextLinknode* pCurrent=header->next;while(pCurrent!=NULL){printf("%d\n",pCurrent->data);pCurrent=pCurrent->next;}
}
//插入鏈表
void Insertvalue(Linknode* header,int oldvalue,int newvalue)
{if(header==NULL) return;Linknode* pPrv=header;Linknode* pCurrent=pPrv->next;while(pCurrent!=NULL){if(pCurrent->data==oldvalue){break;}pPrv=pCurrent;pCurrent=pCurrent->next;}//如果pCurrent為空,說明鏈表中不存在oldvalueif(pCurrent==NULL){return;}//先創建新的結點Linknode* newnode=(Linknode*)malloc(sizeof(Linknode));newnode->data=newvalue;newnode->next=NULL;//新節點插入到鏈表中newnode->next=pCurrent;pPrv->next=newnode;
}//清空
void ClearLinknode(Linknode* header)
{if(header==NULL) return;//輔助指針變量Linknode* pCurrent=header->next;while(pCurrent!=NULL){//先保存當下一個節點的地址Linknode* pNext=pCurrent->next;//釋放當前節點的內存free(pCurrent);//指向下一個結點pCurrent=pNext;header->next=NULL;}
}//刪除值為value的結點
void RemoveLinknode(Linknode*node,int value)
{if(node==NULL) return;Linknode* pPrv=node;Linknode* pCurrent=pPrv->next;while (pCurrent!=NULL){if(pCurrent->data==value){break;}//移動輔助指針pPrv=pCurrent;pCurrent=pCurrent->next;}if(pCurrent==NULL){return;}pPrv->next=pCurrent->next;free(pCurrent);pCurrent=NULL;
}
//銷毀
void DestroyLinknode(Linknode* header)
{if(header==NULL){return;}Linknode* pCurrent=header;while(pCurrent!=NULL){Linknode* pNext=pCurrent->next;//釋放當前結點內存free(pCurrent);//結點向后移動pCurrent=pNext;}
}
int main(void)
{Linknode* header=Init_Linknode();Foreach_Linknode(header);Insertvalue(header,300,666);printf("________________________________");Foreach_Linknode(header);return 0;
}

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

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

相關文章

maven使用問題及解決辦法匯總

文章目錄 1、maven clean后打包出現Cannot create resource output directory2、把已有jar包打包進本地maven倉庫 1、maven clean后打包出現Cannot create resource output directory 主要原因是target目錄被別的程序占用了&#xff0c;最笨的辦法是重啟電腦&#xff0c;當然也…

C++跨模塊釋放內存

linux一個進程只有一個堆&#xff0c;不要考慮這些問題&#xff0c;但是windows一個進程可能有多個堆&#xff0c;要在對應的堆上釋放。 一&#xff0c; MT改MD 一個進程的地址空間是由一個可執行模塊和多個DLL模塊構成的&#xff0c;這些模塊中&#xff0c;有些可能會鏈接到…

代碼隨想錄訓練營第29天| 491.遞增子序列、46.全排列、47.全排列 II

491.遞增子序列 題目鏈接&#xff1a;491. 非遞減子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<List<Integer>> ans new ArrayList<>();public List<List<Integer>> findSubsequences(int[] nums) {backtrack(nums, …

(十三)【Jmeter】線程(Threads(Users))之tearDown 線程組

簡述 操作路徑如下: 作用:在正式測試結束后執行清理操作,如關閉連接、釋放資源等。配置:設置清理操作的采樣器、執行順序等參數。使用場景:確保在測試結束后應用程序恢復到正常狀態,避免資源泄漏或對其他測試的影響。優點:提供清理操作,確保測試環境的整潔和可重復性…

租用海外服務器,自己部署ChatGPT-Next-Web,實現ChatGPT聊天自由,還可以分享給朋友用

前言 如果有好幾個人需要使用ChatGPT&#xff0c;又沒有魔法上網環境&#xff0c;最好就是自己搭建一個海外的服務器環境&#xff0c;然后很多人就可以同時直接用了。 大概是情況是要花80元租一個一年的海外服務器&#xff0c;花15元租一個一年的域名&#xff0c;然后openai 的…

centos安裝擴展

centos下安裝php擴展時遇到的問題php 1.imapgit cd /root/php-5.6.27/ext/imap /usr/local/php/bin/phpize ./configure --prefix/usr/local/imap 錯誤1github configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happe…

一 些有代表性的相位解包裹算法

Itoh首先給出了傳統解包裹算法的數學描述!。傳統的相位解包裹操作是通過對空間相鄰點相位值的比較來完成的。根據抽樣定理&#xff0c;如果相鄰采樣點的相位差不超過z&#xff0c;則對應的相位解包裹處理是非常簡單的&#xff0c;理論上以某點為起始點沿某一路徑對包裹相位的差…

中科院計算所:什么情況下,大模型才需要檢索增強?

ChatGPT等大型語言模型在自然語言處理領域表現出色。但有時候會表現得過于自信&#xff0c;對于無法回答的事實問題&#xff0c;也能編出一個像樣的答案來。 這類胡說亂說的答案對于醫療等安全關鍵的領域來說&#xff0c;是致命的。 為了彌補這一缺陷&#xff0c;研究者們提出…

ios抓包Tunnel to......443

fiddler官網下載“CertMaker for iOS and Android”插件&#xff0c;官網插件&#xff1a;https://www.telerik.com/fiddler/add-ons 雙擊運行插件后&#xff0c;重啟fiddler&#xff0c;ios重新安裝證書即可

貓頭虎分享已解決Bug || 系統更新失敗(System Update Failure):UpdateError, UpgradeFailure

博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff01;《IDEA開發秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鴻蒙》 …

Java并發編程面試題53道-JUC

Java中的JUC是"Java Concurrency Utilities"的縮寫&#xff0c;它是指Java平臺從Java 5版本開始引入的一系列用于處理多線程并發編程的工具類和框架。這個包(java.util.concurrent)極大地增強了Java在并發編程領域的支持&#xff0c;提供了一系列高級抽象如線程池&am…

Sora:視頻生成模型作為世界模擬器

我們探索了視頻數據上生成模型的大規模訓練。具體來說&#xff0c;我們在可變持續時間、分辨率和長寬比的視頻和圖像上聯合訓練文本條件擴散模型。我們利用了一個在視頻和圖像潛在碼的時空塊上操作的變壓器架構。我們規模最大的模型 Sora 能夠生成一分鐘的高保真視頻。我們的結…

一周學會Django5 Python Web開發-Django5路由重定向

鋒哥原創的Python Web開發 Django5視頻教程&#xff1a; 2024版 Django5 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 Django5 Python web開發 視頻教程(無廢話版) 玩命更新中~共計25條視頻&#xff0c;包括&#xff1a;2024版 Django5 Python we…

代碼隨想錄算法訓練營第21天—回溯算法01 | ● 理論基礎 ● *77. 組合

理論基礎 回溯是一種純暴力搜索的方法&#xff0c;它和遞歸相輔相成&#xff0c;通常是執行完遞歸之后緊接著執行回溯相較于以往使用的for循環暴力搜索&#xff0c;回溯能解決更為復雜的問題&#xff0c;如以下的應用場景應用場景 組合問題 如一個集合{1,2,3,4}&#xff0c;找…

alibabacloud學習筆記06(小滴課堂)

講Sentinel流量控制詳細操作 基于并發線程進行限流配置實操 在瀏覽器打開快速刷新會報錯 基于并發線程進行限流配置實操 講解 微服務高可用利器Sentinel熔斷降級規則 講解服務調用常見的熔斷狀態和恢復 講解服務調用熔斷例子 我們寫一個帶異常的接口&#xff1a;

6-7年經驗的前端,回望這些年的風雨,都扛過來了~

前言 回望這6-7年的時光&#xff0c;不覺而已&#xff0c;有種閱盡千帆而過的感覺&#xff0c;可能人總在回頭看一些事情時都會有這種感覺吧。 傻人大學開始接觸計算機行業 大概10年前的我&#xff0c;填好志愿&#xff0c;拿到錄取通知書的那天&#xff0c;命運的齒輪就開始…

基于Spring Boot的學生評獎評優管理系統,計算機畢業設計(帶源碼+論文)

源碼獲取地址&#xff1a; 碼呢-一個專注于技術分享的博客平臺一個專注于技術分享的博客平臺,大家以共同學習,樂于分享,擁抱開源的價值觀進行學習交流http://www.xmbiao.cn/resource-details/1760641819451928577

python子域名收集工具

在網絡安全領域中&#xff0c;發現和管理攻擊面絕對是一項必須的任務&#xff0c;而對域名的尋找和分析是發現攻擊面的重要步驟。今天我們將與您分享關于域名發現的四種方法&#xff0c;并附帶Python示例代碼來幫助您更好的理解和掌握這些方法。 1. 主域名鏈式證書提取域名信息…

MySQL的安裝和備份

一、openEuler 二進制方式安裝MySQL 8.0.x 1、獲取軟件包 [rootLocalhost ~]# wget -c https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 2、創建用戶和組 [rootLocalhost ~]# groupadd -g 27 -r mysql [rootLocalhost ~]# useradd…

RisingWave的動態過濾器和時間過濾器的用法

動態過濾器 動態過濾器能夠實時過濾數據流&#xff0c;并允許定義傳入數據必須滿足的條件才能進行處理。 動態過濾器demo CREATE TABLE sales(id int ,profit_margin double ,PRIMARY KEY (id) );CREATE TABLE products(product_name string ,product_profit double);--返回…