数据结构之链表

链表数据结构图解 项目中经常会用到LinkedList集合来存储数据,打算写一篇LinkedList的源码解析,而LinkedList是基于链表结构存储数据的,这篇博文将解析链表数据结构,包括单向链表和双向链表; 1:单向链表: 单向链表的链表对象维护了一个 first 引用,该引用指向节点链表中的第一个节点对象,每个节点对象维护一个 next 引用,next引用指向下一个节点对象;(这里注意:是引用指向的是节点对... 阅读详情

链表C++实现

创建链表时默认创建0号结点,也就是头结点。头结点指向的第一个结点为1号结点
Mycode:

#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <iostream>
using namespace std;

//采用C++写法
struct LNode{
	int data;	
	LNode *next;	
	LNode(int x) : data(x), next(NULL) {} 
	//结构体构造函数,用这种方式初始化更方便,new代替了malloc函数
};

LNode *CreateNode(void){
	//LNode *Head = (LNode *)malloc(sizeof(LNode));
	LNode *head = new LNode(0);		//0号结点相当于头结点
	LNode *p = head;
	LNode *node = NULL;
	int x;
	while(cin>>x){
		if (!x) break;	//输入0代表输入结束
		node = new LNode(x);
		p->next = node;
		p = node;
	}
	p->next = NULL;
	return head;
}

void printLNode(LNode *head){
	if (head->next == NULL){	//判断链表是否为空
		cout << "Your LNode is empty" << endl;
		return;
	}
	LNode *p = head->next;
	int i = 1;
	while(p){
		cout << "第" << i++ << "个元素为:" << p->data << endl;
		p = p->next;
	}
}

int getLength(LNode *head){
	int l = 0;
	LNode *p = head->next;
	while(p){
		p = p->next;
		l++;
	}
	return l;
}

int GetElem(LNode *L, int i, int &e){
	//当第i个元素存在时,把它的值赋给e
	LNode *p = L->next;	//初始化p指向第一个结点
	int j = 1;
	while(p && j < i){		//使p指向第i个结点或p为空
		p = p->next;
		j++;
	}
	if (!p || j >= i) return 0;		//第i个元素不存在
	e = p->data;
	return 1;
}

int ListInsert(LNode *head, int i, int e){
	//在带头结点的单链表中第i个位置之前插入元素e
	LNode *p = head;
	int j = 0;
	while(p && j < i - 1){	//找到第i - 1个结点
		p = p->next;
		j++;
	}
	if (!p || j >= i) return 0;	//i<1 或 i>表长+1
	LNode *s = new LNode(e);	//生成新结点
	s->next = p->next;
	p->next = s;
	return 1;
}

int ListDelete(LNode *head, int i, int &e){
	//在带头结点的单链表中删除第i位元素,并返回到e
	LNode *p = head;
	int j = 0;
	while(p && j < i - 1){	//找到第i-1个结点
		p = p->next;
		j++;
	}
	//cout << "j= " << j << endl;
	if (!p || j >= i) return 0;
	LNode *q = p->next;
	e = q->data;
	cout << e << endl;
	p->next = q->next;
	delete q;
	return 1;
}

int main(){
	LNode *head = CreateNode();
	cout << "输入的链表为:---------------" << endl;
	printLNode(head);
	cout << "-----------------------------" << endl;
	int l = getLength(head);
	cout << "链表的长度为" << l << endl;
	ListInsert(head, 9, 1000);
	cout << "-----------------------------" << endl;
	cout << "在第9个元素前插入1000后的链表:" << endl;
	cout << "链表长度为: " << getLength(head) << endl;
	printLNode(head);
	cout << "-----------------------------" << endl;
	int e, x;
	cout << "请输入要删除几号结点" << endl;
	cin >> x;
	ListDelete(head, x, e);
	cout << "删除后的链表为:" << endl;
	printLNode(head);
	return 0;
}

运行结果:

1 2 3 4 5 6 7 8 9 10 0
输入的链表为:---------------
第1个元素为:1
第2个元素为:2
第3个元素为:3
第4个元素为:4
第5个元素为:5
第6个元素为:6
第7个元素为:7
第8个元素为:8
第9个元素为:9
第10个元素为:10
-----------------------------
链表的长度为10
-----------------------------
在第9个元素前插入1000后的链表:
链表长度为: 11
第1个元素为:1
第2个元素为:2
第3个元素为:3
第4个元素为:4
第5个元素为:5
第6个元素为:6
第7个元素为:7
第8个元素为:8
第9个元素为:1000
第10个元素为:9
第11个元素为:10
-----------------------------
请输入要删除几号结点
9
1000
删除后的链表为:
第1个元素为:1
第2个元素为:2
第3个元素为:3
第4个元素为:4
第5个元素为:5
第6个元素为:6
第7个元素为:7
第8个元素为:8
第9个元素为:9
第10个元素为:10
Hit any key to close this window...
[数据结构]链表之单链表 单链表是一种常见的线性数据结构,由若干个节点组成,每个节点包含两部分:数据元素和指向下一个节点的指针。每个节点只有一个指针,通常称为 next 指针,它指向该节点的后继节点。头节点是第一个节点前面额外添加的一个节点,它不包含数据元素,但是包含对第一个节点的指针。单链表可以表示任意长度的序列,可以动态地插入、删除节点,使其具有灵活性和高效性。但由于每个节点只有一个指针,因此单链表只能从前往后遍历,不能反向遍历。以下是单链表常用的操作:创建链表:创建一个空链表,可选是否带有头节点。 阅读详情

相关推荐

Ollama-OCR实战:5分钟搞定PDF文档转Markdown(附qwen2.5vl模型配置)

本文详细介绍了如何利用Ollama本地部署多模态大模型qwen2.5vl,结合OCR技术,实现PDF文档到Markdown的端到端智能转换。通过解析传统OCR的局限与AI方案的优势,并提供从环境搭建、提示词工程到处理复杂表格的完整实战指南,帮助用户高效构建自动化文档处理流水线,彻底重塑文档处理工作流。

yog99的博客 604

【数据结构-单链表】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、什么是单链表?二、单链表有哪些特性?二、头结点1.什么是头结点?1.头结点有哪些特性?三、头指针1.什么是头指针?四、单链表的操作1.定义结点结构2.创建链表3.创建结点4.头插法(将新的结点插入到链表中)5.尾插法(将新的结点插入到链表中)6.任意位置插入结点7.删除指定数据的结点8.删除指定位置的结点9.求长度10.修改指定位置结点的数据11.遍历五、代码六、参考总结 前言 为什么需要单链表? 因为顺序表在插入和删除.

weixin_36348982的博客 1829

Android开发者必看:5分钟搞定MQTT客户端连接EMQX服务器(附完整代码)

本文为Android开发者提供了一份快速实现MQTT客户端连接EMQX服务器的实战指南。通过引入Eclipse Paho SDK,详细讲解了从项目配置、权限申请到核心连接、主题订阅与消息发布的完整流程,并附有即拿即用的Kotlin代码,帮助开发者在物联网应用中高效集成轻量级实时通信功能。

weixin_29228781的博客 270

每天作死一道题——【求单链表的长度】

6-3 求链式表的表长(10 分) 本题要求实现一个函数,求链式表的表长。 函数接口定义: int Length( List L ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrTo

GtNB的博客 5419

BioEmu:微软黑科技炸场!生成式AI重构蛋白质模拟:千倍效率碾压传统计算,新药研发周期砍半

BioEmu 是微软推出的生成式深度学习系统,可在单个 GPU 上每小时生成数千种蛋白质结构样本,支持模拟动态变化、预测热力学性质,并显著降低计算成本。

士多啤梨先生の博客 1097

mmsegmentation教程1:自定义数据集、config文件修改、训练教程

mmseg使用教程

weixin_42748439的博客 2万+

火影推荐程序连载72- 线性表的存储结构

今天开始线性表部分的梳理,线性表主要分为了基础概念和基本操作两大部分,由于某些过程或概念比较抽象,我添加了部分图示,希望能够把这些抽象的东西直观的表达出来。 基本操作模块重点主要在单链表和顺序表两部分,本文着重梳理了线性表插入、删除、查询等基础方法并搭配了部分实例供参考。 1 基本概念 对于线性表来说,它是一组相同元素的有限序列,元素的个数就是线性表的长度,当元素个数为 0 时,线性表就是空表。 数据结构包括逻辑结构、存储结构和算法。线性表的基本概念这里主要看线性表的逻辑结构和存...

li123128的博客 234

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互转(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互转,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 282

c语言起初,请问c 语言的单链表 index是从零开始,还是一开始?

慕斯709654#include"stdafx.h"#include<stdlib.h>//创建一个节点,data为value,指向NULLNode*Create(intvalue){Node*head=(Node*)malloc(sizeof(Node));head->data=value;head->next=NULL;returnhead;}//销毁链表boolDestroy_List(No...

weixin_35682327的博客 1159

YOLOv8 改进:添加 LSK 注意力机制

通过添加 LSK 注意力机制,YOLOv8 能够更有效地捕捉特征图上的重要信息,提高检测性能,尤其是在复杂场景下展现出色的表现。这种方法不仅适用于资源受限的设备,还能在丰富多样的实际应用中提供强劲支持。

走向CTO的路上... 1220

AI测试入门:基于 RAG 的 LLM 应用程序的测试方法「详细介绍」

一个典型的 RAG 架构包括一个检索器(对知识库进行矢量搜索检索上下文的组件)和一个生成器(从检索器中获取检索上下文以构建提示并生成自定义 LLM 响应作为最终输出的组件)。在大多数情况下, 知识库”由存储在向量数据库(如 ChromaDB)中的向量嵌入组成。

blues_C的博客 1869

数据结构——链表

轻松无痛玩转链表

HZzzzzLu的博客 1万+

YOLOv8独家原创改进:原创自研 | 自研独家创新DSAM注意力 ,基于BiLevelRoutingAttention注意力升级

提出新颖的注意力DSAM(Deformable Bi-level SpatialAttention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的Deformable Bi-level Attention+Spartial Attention

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1511

链表数据结构

链表数据结构1 历史2 结构2.1 单向链表2.2 双向链表2.3 循环链表3链表的应用 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间...

Yuqbd的博客 990

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【数据结构】链表

数据结构中的链表(Linked List)是一种极其重要的、灵活的、动态的数据结构,它允许元素(通常被称为节点)以非连续的方式在内存中存储,并通过指针或引用相互连接。链表在数据结构领域扮演着至关重要的角色,特别是在需要频繁进行插入和删除操作的场景中。

大雨淅淅的博客 1088

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C语言数据结构-链表

图中指针变量plist保存的是第一个结点的地址,我们称plist此时“指向”第一个结点,如果我们希望plist“指向”第二个结点时,只需要修改plist保存的内容为0x0012FFA0.在前面说的单链表中的“头结点”,该头结点是链表的首节点(第一个结点),实际这样的称呼是错误的,因为链表中存在一种链表叫做带头链表(不是指链表里第一个有效的结点),这里的头结点指的是,在这里直接使用plist来遍历结果也是一样的,重新创建个pcur指针,是为了避免由于指针指向的改变,导致无法重新找到链表的首结点。

2302_81072215的博客 2261

数据结构-链表篇

数据结构-链表篇

qq_16268979的博客 1万+

数据结构【链表】

是⼀种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。结点的组成主要有两个部分:当前结点要保存的数据和保存下⼀个结点的地址(指针变量)。给定的链表的结构,实现链表从头到尾的打印。

2401_84320036的博客 1653

链表-Java实现链表数据结构

链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向上 一个/或下一个节点的位置的链接(“links”) 链表(Linked list):是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数 据,而是在每一个节点里存到下一个节点的指针(Pointer)。 使用链表结构可以克服数组需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针 域,空间开销比较.

♾️ 2737
上一篇: 数据结构之线性表
下一篇: String to Integer(atoi)
_dingzhen
博客等级 码龄9年 120粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值