學習c語言的鏈表的概念、操作(另一篇鏈表的筆記在其他的欄目先看這個)

在學習Linux之間我們先插入一下鏈表的知識

學習鏈表(一種數據結構思想)

鏈表和數組的區別和實現:

鏈表(鏈表是個好東西)

鏈表概念(什么是鏈表)?

鏈表就是數據結構->數據的存儲思想

鏈表的每一項都是一個結構體

????????說到數據存放,我們之前學過數組結構體,而且數組一開始就把大小確認了比如int arr[10],還有地址也都是連續的,因此我們需要對數組或者結構體進行增刪改查的時候就會顯得很不靈活,因為內存消耗很大所以我們有了鏈表的概念

Tips回顧:

數組的特點:每個元素的地址是連續的

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 鏈表的原理和解釋圖

鏈表的實現

t1是鏈表頭 ?有點像數組首地址通過p++得到后面的元素

鏈表的動態遍歷

添加上查找和計算鏈表元素個數的功能

這邊定義一個found是很巧妙的,count?不斷累加記錄節點數,found?記錄是否找到目標值

????????使用?found?變量后,只需要在循環內部判斷是否找到目標值,若找到就將?found?置為?1?,循環結束后再根據?found?的值進行統一的輸出判斷,使代碼邏輯更加簡潔明了。

鏈表的從指定節點后方插入新節點

主要是insertBehindNum這段代碼

因為鏈表有增刪改查這些操作,所以這邊我直接把鏈表的增刪改查都寫出來

這個代碼里面包含了前插法(增),后插法(增),刪除指定元素,改元素,查元素其中前插法和后插法

代碼在這

#include <stdio.h>

struct Test

{

int data;

struct Test *next;

};

void printfInfo(struct Test *head)

{

struct Test *point;

point = head;

while(point !=NULL){

printf("%d ",point->data);

point =point->next;

}

putchar('\n');

}

int ?printfInfo1(struct Test *head,int data)

{

int count = 0;

int found = 0;

struct Test *point;

point = head;

while(point !=NULL){

count++;

if((point->data) == data){

found=1;

}

point = point->next;

}

if(found==1){

printf("have\n");

}else{

printf("no\n");

}

return count;

}

struct Test * gaiNum(struct Test *head,int data,int newdata)

{

struct Test *p;

p = head;

while(p !=NULL){

if(p->data == data){

p->data=newdata;

}

p = p->next;

}

return head;

}

struct Test *insertBehindNum(struct Test *head,int data,struct Test *new)

{

struct Test *p;

p=head;

while(p != NULL){

if(p->data == data){

new->next= p->next;

p->next ?= new;

return head;

}

????p = p->next;

}

return head;

}

struct Test *insertbeforeNum(struct Test *head,int data,struct Test *new)

{

struct Test *p;

p=head;

if(p->data == data){

new->next=p;

????printf("insert ok\n");

return new;

}

while(p->next != NULL){

if(p->next->data==data){

new->next = p->next;

??p->next = new;

??printf("insert ok\n");

??return head;

}

p = p->next;

}

return head;

}

struct Test *deleteNum(struct Test *head,int data)

{

struct Test *p;

p=head;

if(p->data == data){

p=p->next;

printf("delete ok\n");

return head;

}

while(p->next != NULL){

if(p->next->data == data){

p->next = p->next->next;

printf("delete ok~\n");

return head;

}

p = p->next;

}

return head;

}

int main()

{

?int count;

?struct Test *head = NULL;

?struct Test t1={1,NULL};

?struct Test t2={2,NULL};

?struct Test t3={3,NULL};

?struct Test t4={4,NULL};

?struct Test new={100,NULL};

?struct Test new2={999,NULL};

?struct Test new3={888,NULL};

?t1.next=&t2;

?t2.next=&t3;

?t3.next=&t4;

?printfInfo(&t1);

?count = printfInfo1(&t1,4);//查

?printf("鏈表元素個數為%d\n",count);

?head=insertBehindNum(&t1,3,&new);//在后方插入

?printfInfo(head);

?head = insertbeforeNum(&t1,3,&new2);//在前方插入

?printfInfo(head);

?head = insertbeforeNum(&t1,1,&new3);//在前方插入

?printfInfo(head);

?head = deleteNum(&t1,1);//刪除

?printfInfo(head);

?head = gaiNum(&t1,1,40);//改

?printfInfo(head);

?return 0;

}

????????看完之后是這樣的我們是初學者那么我們就不應該考慮鏈表的效率問題,我們要先理解鏈表的含義和和操作原理,那么我們之后有更好的基礎了之后,就可以去考慮鏈表的效率問題了。

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

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

相關文章

NVM完全指南:安裝、配置與最佳實踐

發布于 2025年5月7日 ? 閱讀時間&#xff1a;10分鐘 &#x1f4a1; TL;DR: 本文詳細介紹了如何完整卸載舊版Node.js&#xff0c;安裝NVM&#xff0c;配置阿里云鏡像源&#xff0c;以及設置node_global與node_cache目錄&#xff0c;打造高效Node.js開發環境。 &#x1f4cb; 目…

轉換算子和行動算子的區別

轉換算子和行動算子主要是在分布式計算框架&#xff08;如 Apache Spark&#xff09;里常用的概念&#xff0c;它們在功能、執行機制、返回結果等方面存在明顯區別&#xff0c;以下為你詳細介紹&#xff1a; 定義與功能 返回結果 如何在使用轉換算子和行動算子時避免出現內存溢…

Windows命令行軟件管理器:Chocolatey

文章目錄 Windows命令行軟件管理器&#xff1a;Chocolatey1.Chocolatey使用1.1 安裝1.2 常用命令1.3 使用流程 2.常用shell命令匯總 Windows命令行軟件管理器&#xff1a;Chocolatey Chocolatey 是一款強大的 Windows 命令行軟件管理器&#xff0c;目前在 GitHub 上已斬獲 10.…

MySQL 8.0 OCP(1Z0-908)英文題庫(11-20)

目錄 第11題題目分析正確答案 第12題題目分析正確答案 第13題題目分析正確答案 第14題題目分析正確答案 第15題題目分析正確答案 第16題題目分析正確答案 第17題題目分析正確答案&#xff1a; 第18題題目分析正確答案 第19題題目分析正確答案 第20題題目分析正確答案 第11題 W…

mac 使用 Docker 安裝向量數據庫Milvus獨立版的保姆級別教程

Milvus 特點&#xff1a;開源的云原生向量數據庫&#xff0c;支持多種索引類型和GPU加速&#xff0c;能夠在億級向量規模下實現低延遲高吞吐。具有靈活的部署選項和強大的社區支持。 適用場景&#xff1a;適合處理超大規模數據和高性能需求的應用&#xff0c;如圖像搜索、推薦…

一款獨立于游戲外的鍵盤源按鍵輔助工具他來了

一款獨立于游戲外的鍵盤源按鍵輔助工具 一&#xff01;不需要安裝&#xff0c;下載即用 二&#xff01;只要熟悉hekili體系 三&#xff01;略懂wa定制 四&#xff01;知道如何循環并且會自行模擬 五&#xff01;會simc最好 直接就上手了&#xff01; 我們的不是一鍵宏&…

python學生作業提交管理系統-在線作業提交系統

目錄 技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xf…

Spring Boot + Vue 實現在線視頻教育平臺

一、項目技術選型 前端技術&#xff1a; HTML CSS JavaScript Vue.js 前端框架 后端技術&#xff1a; Spring Boot 輕量級后端框架 MyBatis 持久層框架 數據庫&#xff1a; MySQL 5.x / 8.0 開發環境&#xff1a; IDE&#xff1a;Eclipse / IntelliJ IDEA JDK&…

引文索引數據庫在科研中的應用

如何利用引文索引數據庫高效檢索、分析研究論文&#xff0c;發現高水平論文&#xff0c;鎖定特定領域的經典文獻&#xff1f;如何跟蹤最新研究進展&#xff1f; 回放鏈接 image.png image.png image.png image.png image.png image.png image.png image.png image.png image.pn…

《供應鏈網絡攻擊的風險與防范》

中國古語有云&#xff1a;“千里之堤&#xff0c;潰于蟻穴。”供應鏈攻擊正是利用這種系統性弱點發起攻勢。近年來&#xff0c;隨著國內數字化轉型加速&#xff0c;供應鏈安全問題頻發。從某盟刪庫事件到某頭部物流企業數據泄露&#xff0c;從某國產工業軟件遭惡意代碼植入到某…

ETL介紹及kettle等工具學習

ETL介紹及kettle等工具學習 1. 什么是ETL&#xff1f; ETL&#xff08;Extract, Transform, Load&#xff09;是數據集成領域的核心流程&#xff0c;用于將數據從多個分散的源系統中抽取、清洗、轉換后加載到目標數據倉庫或數據湖中&#xff0c;以支持分析、報表和決策。其核…

圖形渲染+事件處理最終版

基于之前做的項目圖形移動處理-CSDN博客添加了相機&#xff0c;透視投影&#xff0c;鼠標控制圖形旋轉。雖然個人感覺這個項目用的是一個二維的三角形&#xff0c;給他加透視投影和相機意義不大&#xff0c;因為透視投影是近大遠小&#xff0c;我這個程序設置了放大縮小的限制&…

G口大帶寬服務器線路怎么選

G口大帶寬服務器線路選擇指南 ??一、線路類型與特點?? ??單線&#xff08;電信/聯通/移動&#xff09;?? ??優勢??&#xff1a;帶寬獨享、價格低、延遲穩定&#xff0c;適合單一運營商用戶集中場景。??劣勢??&#xff1a;跨運營商訪問延遲高&#xff08;如電信…

HTML10:iframe內聯框架

iframe內部框架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>內聯框架學習</title> </head> <body> <!--iframe內聯框架 src:地址 width-height:高度寬度 --> <iframe…

基于 Spring Boot 瑞吉外賣系統開發(十一)

基于 Spring Boot 瑞吉外賣系統開發&#xff08;十一&#xff09; 菜品啟售和停售 “批量啟售”、“批量停售”、操作列的售賣狀態綁定單擊事件&#xff0c;觸發單擊事件時&#xff0c;最終攜帶需要修改售賣狀態的菜品id以post請求方式向“/dish/status/{params.status}”發送…

springboot war包tomcat中運行報錯,啟動過濾器異常,一個或多個篩選器啟動失敗。

錯誤信息&#xff1a; "level": "ERROR", "thread": "localhost-startStop-1", "class": "o.a.c.c.C.[.[localhost].[/Crmeb-admin]", …

Cursor —— AI編輯器 使用詳解

Cursor - The AI Code Editor 一、Cursor 是什么&#xff1f; Cursor 是一款優秀的AI代碼編輯器&#xff0c;它內置了 Deepseek-R1、GPT-4、Claude等 AI 模型。 簡單說&#xff0c;就是&#xff1a;Cursor VS Code 編輯器 AI 大模型 Cursor 功能特性&#xff08;代碼補全、…

在Excel圖表添加輔助線

前言&#xff1a;博主最近是有點忙&#xff0c;好吧&#xff0c;就是很忙&#xff0c;但我也不想水文章的&#xff0c;每一篇文章都是本人精心編輯&#xff0c;覺得對大家有用才發布的。而且同一個類型的文章&#xff0c;我基本都會寫在同一篇中方便大家集中獲取。本來這篇文章…

2025.5.8總結(中期審視)

今日記錄&#xff1a; 晚上&#xff0c;主管找我聊了關于中期績效審視的問題。 首先就是讓我匯報上半年的工作進展&#xff0c;匯報完后&#xff0c;感覺體現不出自己的工作量&#xff0c;這確實考驗個人的匯報能力。 匯報完工作后&#xff0c;主管開始給我提了一些建設性的…

Excel模版下載文件導入

工作中經常遇到Excel模板下載&#xff0c;然后填好后再導入的情況&#xff0c;簡單記錄下&#xff0c;方便下次使用 Excel模版下載&#xff08;返回Base64&#xff09; 模板文件存放位置 import java.util.Base64; import org.apache.commons.io.IOUtils; import org.sprin…