网站页面那个图怎么做/网站排名前十
博主介绍:✌全网粉丝喜爱+、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦!
🍅附上相关C语言版源码讲解🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
文章目录
-
-
一、链表定义
二、链表实战
1、单链表(C语言实现版本)
2、双链表(C++)
三、分析总结
优点:
应用:
小结
大家点赞、收藏、关注、评论啦 !
谢谢哦!如果不懂,欢迎大家下方讨论学习哦。
-
一、链表定义
链表是一种数据结构,它由一系列节点组成,这些节点按顺序连接在一起形成链式结构。每个节点包含数据和指向下一个节点的引用(指针)。链表的最后一个节点通常指向一个特定的值(如空值或null),表示链表的结束。
链表是一种数据结构,它由一系列节点组成,这些节点按顺序连接在一起形成链式结构。每个节点包含数据和指向下一个节点的引用(指针)。链表的最后一个节点通常指向一个特定的值(如空值或null),表示链表的结束。
链表可以分为单链表和双链表两种主要类型:
1. 单链表(Singly Linked List):每个节点包含数据和指向下一个节点的指针。链表的最后一个节点指向null。
节点1 节点2 节点3
| 数据1 | -> | 数据2 | -> | 数据3 | -> null
2. 双链表(Doubly Linked List):每个节点包含数据、指向下一个节点的指针,以及指向前一个节点的指针。这使得在双链表中可以更方便地进行前向和后向遍历。
null <- | 数据1 | <-> | 数据2 | <-> | 数据3 | -> null
链表优点: 链表相对于数组的优势在于插入和删除操作的效率较高,因为不需要移动大量元素,只需调整节点的指针。然而,链表的缺点是访问元素时需要按顺序遍历,而数组可以通过索引直接访问元素。链表在内存中不需要连续的存储空间,因此可以更灵活地分配内存。
二、链表实战
1、单链表(C语言实现版本)
#include <stdio.h>
#include <stdlib.h>// 定义节点结构
struct Node {int data; // 节点数据struct Node* next; // 指向下一个节点的指针
};// 定义链表结构
struct LinkedList {struct Node* head; // 链表头指针
};// 初始化链表
void initLinkedList(struct LinkedList* list) {list->head = NULL; // 将头指针初始化为NULL,表示链表为空
}// 在链表末尾添加节点
void append(struct LinkedList* list, int data) {// 创建新节点struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));new_node->data = data;new_node->next = NULL;// 判断链表是否为空if (list->head == NULL) {// 如果为空,将新节点设为头节点list->head = new_node;} else {// 如果不为空,找到链表末尾,将新节点链接到末尾struct Node* current = list->head;while (current->next != NULL) {current = current->next;}current->next = new_node;}
}// 在链表开头添加节点
void prepend(struct LinkedList* list, int data) {// 创建新节点struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));new_node->data = data;new_node->next = list->head;// 将新节点设为头节点list->head = new_node;
}// 删除节点
void deleteNode(struct LinkedList* list, int data) {struct Node* current = list->head;struct Node* prev = NULL;// 遍历链表,找到待删除节点及其前一个节点while (current != NULL && current->data != data) {prev = current;current = current->next;}// 如果找到待删除节点if (current != NULL) {// 如果待删除节点不是头节点if (prev != NULL) {prev->next = current->next;} else {// 如果待删除节点是头节点list->head = current->next;}free(current); // 释放内存}
}// 更新节点
void updateNode(struct LinkedList* list, int oldData, int newData) {struct Node* current = list->head;// 遍历链表,找到待更新节点while (current != NULL && current->data != oldData) {current = current->next;}// 如果找到待更新节点if (current != NULL) {current->data = newData; // 更新节点数据}
}// 搜索节点
struct Node* searchNode(struct LinkedList* list, int data) {struct Node* current = list->head;// 遍历链表,找到包含指定数据的节点while (current != NULL && current->data != data) {current = current->next;}return current; // 返回节点指针
}// 显示链表内容
void display(struct LinkedList* list) {struct Node* current = list->head;while (current != NULL) {printf("%d -> ", current->data);current = current->next;}printf("NULL\n");
}// 释放链表内存
void freeLinkedList(struct LinkedList* list) {struct Node* current = list->head;struct Node* next = NULL;while (current != NULL) {next = current->next;free(current);current = next;}list->head = NULL;
}int main() {struct LinkedList myLinkedList;initLinkedList(&myLinkedList);// 添加节点append(&myLinkedList, 1);append(&myLinkedList, 2);append(&myLinkedList, 3);// 显示链表内容printf("链表内容:");display(&myLinkedList);// 在开头添加节点prepend(&myLinkedList, 0);// 显示链表内容printf("在开头添加节点后的链表:");display(&myLinkedList);// 删除节点deleteNode(&myLinkedList, 2);// 显示链表内容printf("删除节点后的链表:");display(&myLinkedList);// 更新节点updateNode(&myLinkedList, 1, 10);// 显示链表内容printf("更新节点后的链表:");display(&myLinkedList);// 搜索节点int searchData = 10;struct Node* searchResult = searchNode(&myLinkedList, searchData);if (searchResult != NULL) {printf("找到数据为 %d 的节点。\n", searchData);} else {printf("未找到数据为 %d 的节点。\n", searchData);}// 释放链表内存freeLinkedList(&myLinkedList);return 0;
}
执行结果详细:
2、双链表(C++)
#include <iostream>
#include <cstdlib>
#include <cstdio> using namespace std;
typedef struct Node
{ int data; struct Node *prior; struct Node *next;
} LinkList; LinkList *Create()
{ LinkList *head; head=(LinkList*)malloc(sizeof(LinkList)); if(head!=NULL) { head->prior=NULL; head->next=NULL; return head; } else return NULL;
} int Insert(LinkList *head,int e) //尾插法
{ LinkList *p; LinkList *q=head; p=(LinkList*)malloc(sizeof(LinkList)); if(p!=NULL) { p->data=e; p->prior=NULL; p->next=NULL; while(q->next!=NULL) { q=q->next; } q->next=p; return 1; } return 0;
} LinkList* Change(LinkList *head) //变成双向链表后返回一个尾指针
{ LinkList *p,*q; p=head; q=p->next; while(q!=NULL) { q->prior=p; p=p->next; q=q->next; } return p;
} void Output1(LinkList *head) //从头到尾遍历输出
{ LinkList *p; p=head->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n");
} void Output2(LinkList *tail) //从尾到头遍历输出
{ LinkList *p; p=tail; while(p->prior!=NULL) { printf("%d ",p->data); p=p->prior; } printf("\n");
} void FreeLink(LinkList *head) //释放
{ LinkList *p,*q; p=head; q=NULL; while(p!=NULL) { q=p; p=p->next; free(q); }
} int main()
{ LinkList *phead,*tail; int n,e,flag; phead=Create(); if(phead!=NULL) { cout<<"请输入长度:";scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&e); flag=Insert(phead,e); }cout<<"从头到尾输出为: ";Output1(phead); tail=Change(phead); cout<<"从尾到头输出为: ";Output2(tail); FreeLink(phead); } return 0;
}
代码执行结果:
三、分析总结
链表是一种常见的数据结构,具有一些优点和应用:
优点:
1. 动态内存分配:链表允许在运行时动态分配内存,这使得它更加灵活,不需要预先指定存储空间大小,通过动态分配内存可以实现降低时间运行成本。
2. 插入和删除效率高:在链表中插入和删除节点相对容易且效率较高。相比之下,数组在中间或开头插入/删除元素可能需要移动大量元素。
3. 大小可变:*链表可以根据需要动态增长或缩小,而不浪费内存。
应用:
1. 实现动态数据结构:链表常用于实现其他动态数据结构,如栈、队列、图等。
2. 内存分配:动态链表的能力使其在动态内存分配的场景中非常有用,例如,动态分配内存的链表可用于管理操作系统的进程列表。
3. 实现算法:链表常用于算法实现,例如,链表在排序算法、图算法等方面有广泛的应用。
4. 嵌入式系统: 在资源受限的嵌入式系统中,链表可以更好地处理动态数据。
5. LRU缓存淘汰算法:链表可以用于实现LRU(Least Recently Used)缓存淘汰算法,用于管理缓存中的数据。
6. 数据库:数据库中的索引通常使用链表实现,以支持高效的插入和删除操作。
总的来说,链表在许多场景中都是一种强大且灵活的数据结构,特别适合那些需要频繁插入和删除操作的应用。
小结
大家点赞、收藏、关注、评论啦 !
谢谢哦!如果不懂,欢迎大家下方讨论学习哦。
相关文章:

【数据结构】链表(单链表与双链表实现+原理+源码)
博主介绍:✌全网粉丝喜爱、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦! 🍅附上相关C语言版源码讲解🍅 ὄ…...

14027.ptp 控制流
文章目录 1 ptp 控制流1.1 控制流分层 1 ptp 控制流 1.1 控制流分层 大体分为4层:1 ptp4l层: 获取配置文件、创建时钟、poll监控文件描述符。2 clock时钟层:提供提供clock_poll、clock_create、clock_sync 等3 port 端口层:port…...

【昕宝爸爸小模块】深入浅出之为什么POI的SXSSFWorkbook占用内存更小
➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…...

CentOS安装Flume
CentOS安装Flume 一、简介二、安装1、下载2、解压3、创建配置文件4、启动flume agent5、验证 一、简介 Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexi…...

Qt 多次绘图
使用Qt 的时候发现: 背景:自己定义一个类,把它和某个ui文件绑定。(类似 Qt creator 默认创建的工程)问题:当鼠标在窗口内单击的时候会触发2次绘图。?难道不应该是一次吗? 于是开始了如下的测试…...

设计模式介绍
概念: 设计模式是一套被反复使用的、多数人知晓、经过分类编目的优秀代码设计经验的总结。特定环境下特定问题的处理方法。 1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用 2)提高扩展性 大量使用面向接口编程&…...

linux 之 ln 命令
linux 之 ln 命令 在Linux中,ln 命令用于创建文件或目录的链接。它有两种主要类型的链接。 硬链接(Hard Links) 硬链接实际上是原始文件的另一个引用,指向同一个inode(索引节点),这意味着它们共…...

【设计模式】张一鸣笔记:责任链接模式怎么用?
我将通过一个贴近现实的故事——请假审批流程,带你了解和掌握责任链模式。 什么是责任链模式? 责任链模式是一种行为设计模式,它让你可以避免将请求的发送者与接收者耦合在一起,让多个对象都有处理请求的机会将这个对象连成一条…...

Vulnhub-dc4
靶场下载 https://download.vulnhub.com/dc/DC-4.zip 信息收集 判断目标靶机的存活地址: # nmap -sT --min-rate 10000 -p- 192.168.1.91 -oN port.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-21 16:36 CST Stats: 0:00:03 elapsed; 0 hosts completed (1 up…...

MySQL45道练习题
作业需要数据表SQL语句已给 1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 select * from Student RIGHT JOIN (select t1.SId, class1, class2 from(select SId, score as class1 from sc where sc.CId 01)as t1, (select SId, score as …...

HTML5和CSS3的新特性
HTML5的新特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等 1,HTML5新增的语义化标签 <header> 头部标签 <nav> 导航标签 <article> …...

【MySQL】表列数和行大小限制详解
目录 限制维度 列数量限制 表的最大行大小 单个列的存储要求 存储引擎的附加限制 功能键部分 行容量限制 MySQL表的内部实现 InnoDB表的最大行大小 超出InnoDB最大行大小的处理 不同存储格式的影响 限制示例 行大小限制示例 InnoDB下 MyISAM下 InnoDB变长情况示…...
算法基础学习|双指针算法
双指针算法 代码模板 for (int i 0, j 0; i < n; i ){while (j < i && check(i, j)) j ;// 具体问题的逻辑 } 常见问题分类:(1) 对于一个序列,用两个指针维护一段区间(2) 对于两个序列,维护某种次序,比如归并…...

4.远程登录服务
目录 1. 简介 1.1. 概念 1.2. 功能: 1.3. 分类 1.3.1. 文字接口: 1.3.2. 图形接口: 1.4. 文字接口连接服务器: 2. 连接加密技术简介 2.1. 密钥解析: 3. SSH工作过程: 3.1. 版本协商阶段 3.2. 密钥和算法协商阶段 3.3. 认证阶段(两…...

代码随想录算法训练营第二十九天| 491.递增子序列、46.全排列、47.全排列 II
491.递增子序列 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路:同层相同元素要跳过 java: class Solution {List<List<Integer>> resultnew ArrayList<>();List<Integ…...

基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(五)
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/n…...

多场景建模:阿里多场景多任务元学习方法M2M
multi-scenario multi-task meta learning approach (M2M) 背景 广告领域大部分是针对用户建模的,像点击率预估,很少有针对广告主需求建模(广告消耗预估、活跃率/流失率预估、广告曝光量预估),广告的类型较多&#x…...

仿真机器人-深度学习CV和激光雷达感知(项目2)day03【机器人简介与ROS基础】
文章目录 前言机器人简介机器人应用与前景机器人形态机器人的构成 ROS基础ROS的作用和特点ROS的运行机制ROS常用命令 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫本文内容是我为复试准备的第二个项目 💫欢迎…...

【多商户开源-BSD- Fecmall 电商平台】
关于Fecmall Fecmall 关于,Fecmall介绍 Fecbbc开源BSD多商户系统,真正开源,商用免费授权的多商户系统 Fecmall系统简介: 全称为Fancy ECommerce Shop, 着重于电商架构的研发优化,全新定义商城的架构体系&…...

2023春秋杯冬季赛 --- Crypto wp
文章目录 前言Cryptonot_wiener 前言 比赛没打,赛后随便做一下题目 Crypto not_wiener task.py: from Crypto.Util.number import * from gmpy2 import * import random, os from hashlib import sha1 from random import randrange flagb x bytes_to_long(f…...

ImageMagick使用手册
ImageMagick使用手册 文章目录 ImageMagick使用手册ImageMagick是什么指令总结1.查看版本2.官网验证指令解读3.svg转png4.png转ico5.将指定文件夹中的所有PNG图像转换为ICO图标 本教程持续更新,我学到多少就更新多少。关于ffmpeg如何安装可以看上一篇博客win系统环境…...

嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第五天-Qt编程技巧若干解答(物联技术666)
链接:https://pan.baidu.com/s/1-u7GvgM0TLuiy9z7LYQ80Q?pwd1688 提取码:1688 QT在Windows下制作图表 QT是跨平台的程序设计库,在windows下的程序往往想要有一个好看的图标,方法如下: 1.准备个ICO图标。例如&…...

【蓝桥杯选拔赛真题59】python小写字母 第十五届青少年组蓝桥杯python 选拔赛比赛真题解析
目录 python小写字母 一、题目要求 1、编程实现 2、输入输出...

代码随想录算法训练营Day37|738.单调递增的数字、贪心算法总结
目录 738.单调递增的数字 方法一:暴力解法 方法二:贪心解法 贪心算法总结 738.单调递增的数字 题目链接 文章链接 方法一:暴力解法 class Solution { private:// 各位递增判断函数bool checkNum(int num) {int max 10;while (num) {int …...

笔记-影响力-对比,互惠,赌徒原理
笔记 From 《影响力》 目录 C1 影响力的武器 C2:互惠 C3 承诺和一致 C4:社会认同 C5:喜好 C6:权威 C7:稀缺 Ankie的笔记:对比,互惠,赌徒原理 C1 影响力的武器 人类在认知方面有个原理,叫“对比原理”。 假设有人走进一…...

PIL、cv2、numpy,和pytorch(torch)之间的转换
在图像处理和深度学习中,经常需要在PIL(Python Imaging Library)、OpenCV(cv2)、NumPy和PyTorch之间进行图像数据的转换。下面是这些库之间常见的转换方法。 1. PIL和numpy之间的转换 import numpy as np from PIL i…...

Java面试题50道
文章目录 1.谈谈你对Spring的理解2.Spring的常用注解有哪些3.Spring中的bean线程安全吗4.Spring中的设计模式有哪些5.Spring事务传播行为有几种6.Spring是怎么解决循环依赖的7.SpringBoot自动配置原理8.SpringBoot配置文件类型以及加载顺序9.SpringCloud的常用组件有哪些10.说一…...

电脑怎么剪辑视频?这些软件不可错过
电脑怎么剪辑视频?随着视频时代的到来,越来越多的人开始涉足视频制作。从Vlog到短片,再到专业级的影视作品,视频已经成为了我们生活中不可或缺的一部分。那么,如何才能快速掌握视频剪辑技巧,制作出令人惊叹…...

HBase学习七:Compaction
1、简介 Compaction是从一个Region的一个Store中选择部分HFile文件进行合并。其目的为了减少 HFile 的个数跟清理掉过期和删除的数据。 合并原理是,先从这些待合并的数据文件中依次读出KeyValue,再由小到大排序后写入一个新的文件。之后,这个新生成的文件就会取代之前已合…...

MySQL定期整理磁盘碎片
MySQL定期整理磁盘碎片:提升数据库性能的终极指南 MySQL作为一个强大的关系型数据库管理系统,在长时间运行后可能会产生磁盘碎片,影响数据库性能。本博客将深入讨论如何定期整理MySQL磁盘碎片,以确保数据库的高效运行。我们将介绍…...