单链表的创建以及基本操作函数详解(C语言)

C语言单链表实现初始化、创建、增、删、查等基本操作(详细) C语言单链表实现初始化、创建、增、删、查等基本操作 #include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int ElemType; //定义单链表结构 typedef struct Node { ElemType data;//数据域 struct Node *next;//指针域 } LinkList; //初始化 LinkList *initList(LinkList * 阅读详情

单链表是带有头结点的单链表,讲解及注释在代码中:

#define _CRT_SECURE_NO_WARNINGS
#pragma once//防止头文件重复包含
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define ElemType int
typedef struct {
	ElemType data;
	struct LNode* next;
}LNode,*Link;
int Creat(Link* L) {//结构体指针地址改变,需作用到外面,故需要使用二级指针
	*L = (LNode*)malloc(sizeof(LNode));
	if (*L == NULL) {
		printf("内存开辟失败\n");
		return ERROR;
	}
	(*L)->next = NULL;
	(*L)->data = 0;
	return OK;
	//LNode node; 
	//*L = &node;//这种方式开辟内存出函数内存就被销毁
};
void Append_lian(Link L, ElemType e) {//尾插法添加
	while (L->next)//next为NULL时停止循环表示找到了
	{
		L = L->next;
	}//找到链表的最后一个结构体
	Link p;//创建一个临时的结构体指针,将两块结构体缝补到一起,离开函数指针消失
	Creat(&p);//获取临时地址
	p->data = e;//添加值
	L->next = p;//将p的临时地址赋予next,至此p的任务圆满完成,离开函数p消失
}
int Lenth(Link L) {//求链表长度,不包含头结点
	int len = 0;
	while (L->next)
	{
		L = L->next;
		len++;
	}
	return len;
}
int Search(Link L, int p) {//根据下标找值(类似python中列表的索引)从1开始,支持-1作为倒数第一个,0作为头节点位置
	if (p == 0) {
		printf("头结点不存储数据\n");
		return ERROR;
	}
	else if (p > 0 && p <= Lenth(L)) {
		while (p )//移动到下标p位置
		{
			L = L->next;
			p--;
		}
		return L->data;
	}
	else if(p < 0 && p >= -Lenth(L))
	{
		int count = Lenth(L) + 1 + p;
		while (count)//移动到下标p位置
		{
			L = L->next;
			count--;
		}
		return L->data;
	}
	else
	{
		printf("超出链表长度\n");
		return ERROR;
	}
}

int Insert(Link L, int p, ElemType e) {//p表位置从1开始,e表元素,在选定位置插入,也可用此方法创建链表,p的值为1就是头插法
	if (p > Lenth(L)+1) return ERROR;
	Link q;
	Creat(&q);
	while (p-1)//移动到下标p的前一个元素的位置
	{
		L = L->next;
		p--;
	}
	q->data = e;
	q->next = L->next;
	L->next = q;
	return OK;

}
int Del_index_lian(Link L, int p) {//根据下标删除,删除成功返回删除的元素值
	if (p == 0) {
		printf("头结点不可删除\n");
		return ERROR;
	}
	else if (p > 0 && p <= Lenth(L)) {
		while (p-1)//移动到下标p的前一个元素的位置
		{
			L = L->next;
			p--;
		}
		
	}
	else if (p < 0 && p >= -Lenth(L))
	{
		int count = Lenth(L) + p;
		while (count)//移动到下标p的前一个元素的位置
		{
			L = L->next;
			count--;
		}
		
	}
	else
	{
		printf("超出链表长度\n");
		return ERROR;
	}
	Link q = L;
	L = L->next;
	q->next = L->next;
	free(L);
	return L->data;

}
void Print_List(Link L) {

	while (L->next)
	{
		L = L->next;
		printf("%d\n", L->data);
	}

}
int Find_elem_lian(Link L, int e) {
	int n = 0;
	while (1)
	{
		if (L->data == e) return n ;
		else if (L->next == NULL)
		{
			printf("查无此元素\n");
			return ERROR;
		}
		else
		{
			L = L->next;
		}
		n++;
	}

}
int Del_elem(Link L, int e) {
	Link q = L;//拷贝一份用来查找
	int n =Find_elem_lian(q, e);
	Del_index_lian(L, n);
	return OK;

}

测试代码:

int main() {
	Link list;
	Creat(&list);
	for (int i = 0; i < 10; i++)
	{
		Append_lian(list, i + 1);
	}
	Del_elem(list, 5);
	Del_index_lian(list, 5);
	Insert(list, 5, 55);
	printf("%d\n", Search(list, 5));
	Print_List(list);

	return 0;
}

创建链表及简单例题--C语言描述 创建单向链表 输出链表 输出尾节点的值 输出节点个数 输出奇数节点的个数 求最大值 逆向输出链表 本链表以储存一整型数据为例,用C语言实现 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define N 5 typedef struct node { int date; struct node * next; }Ele... 阅读详情

相关推荐

C语言建立顺序链表:输入n,建立n位数的简单顺序链表

建立简单顺序链表,初学者简单易懂。   #include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;malloc.h&gt; using namespace std; struct student { int num; struct student *next; }; void creat_List(struct ...

lizizhenglzz的博客 3457

完整链表程序学习

①读取数据 ②生成新结点 ③将数据存入结点的成员变量中 ④将新结点插入到链表中。重复上述操作直到输入结束。

lhyrobert0的博客 449

C语言--单链表的创建及使用详解

单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。每个节点只能访问其后继节点,而无法访问前驱节点。链表的头节点是第一个节点,尾节点是最后一个节点,尾节点的指针指向空值。

2301_77637225的博客 3372

数据结构 链表建立和相关操作函数的编写

#include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Node/*我们先创立一个结点的数据类型,其中包括一个整型数据和一个和自己同类的指针 变量*/ { int data; struct Node * pNext; }NODE,*PNODE;/*typedef用于给建立的数据类型和其地址进行定名,这里.

Tokai_teiorunner的博客 797

建立带头结点的单链表

【问题描述】 设有头结点单链表,实现单链表建立算法。 【输入形式】 第一行输入一个N(N大于等于1,小于1000); 第二行输入N个整数,以空格作为分隔,创建长度为N的单链表。 【输出形式】 输出建立的单链表。

AIGC 2411

Matlab App Designer自学笔记(六):坐标轴控件axis函数绘图方法

作用: 绘制函数显示 显示图像(jpg png tiff) 颜色选项: r(红色) g(绿色) b(蓝色) w(白色) k(黑色) 其他 一、坐标区控件及设置 可以对坐标去进行设计: 二、功能实现及编程 功能:点击“绘图按钮”,能显示曲线。 实现:对按钮设置回调函数 若要多个图像显示在一个坐标系中,需要语句:hold(app.UIAxes,"on"); app.UIAxes是这个坐标轴的名字。 function ButtonP...

陶小桃Blog 3万+

C语言实现单链表的创建及基本操作

C语言实现单链表的创建及基本操作 往期文章:C语言实现顺序表的创建及基本操作 这次主要是分享一下数据结构中单链表的创建及基本操作,这一部分也是属于比较基础的内容。但是越基础的东西我们越要投入精力去学习,不能眼高手低。我在编写这一部分的内容时就出现了许多错误,这也算是一次查漏补缺的博客吧,下面我们正式开始。 单链表的结构定义 首先我们先来看一下常规定义的单链表,一般情况下会包含数据域和指针域。例...

weixin_43954729的博客 4万+

别再拿空气标定法糊弄了!手把手教你搞定水下相机标定(附Python代码)

本文详细解析水下相机标定的关键技术,揭示传统空气标定法失效原因,并提供基于单视点模型(SVP)的完整Python解决方案。通过折射效应分析、标定板设计优化和代码实战演示,帮助读者掌握水下标定核心方法,有效提升水下视觉系统测量精度。

weixin_30530939的博客 208

【链表】单链表的基本操作详解(C语言)

本文是单链表的C语言实现方法,包括创建单链表结点、创建单链表、显示链表的数据、获取链表长度、在链表指定位置插入结点、删除指定位置的结点、查找链表中指定的数据、修改链表中指定位置结点的值、修改链表中指定数据的值。

HongKnight的博客 4万+

BEVFusion实战:从零搭建LiDAR-Camera融合的3D目标检测环境(附避坑指南)

本文提供了BEVFusion实战指南,详细讲解如何从零搭建LiDAR-Camera融合的3D目标检测环境。内容涵盖环境配置、数据预处理、模型训练与性能优化等关键步骤,并附有实用的避坑技巧,帮助开发者高效部署这一先进的BEV感知算法。

p4q5r6s7t的博客 514

RK3399快速上手 | 01- 开发环境搭建(固件烧写、编译工具链安装、kernel编译)

一、编译工具链 编译工具链使用gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu。 下载地址: https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/ wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabi

Mculover666的博客(嵌入式) 8835

C语言实现单链表的基本操作

王道c语言版数据结构--实现单链表的基本操作

weixin_46625488的博客 9705

企业如何开展BI建设--指标体系建设

很多企业的数字化转型工作都是从做BI项目开始的,很多企业认为,BI就是做指标大屏,所以做了很多的驾驶舱,也做了很多指标,有从系统取的,有手工填报的,甚至手工填报的比例占到了70%,最终BI沦为了填报系统,业务认为BI就是把从线下的微信沟通转到了线上录入展示,并没有给业务代来任何提升,久而久之,BI大屏就没人关心,公司高层也认为数据都是填报的,都经过了加工处理,这种数据不可信,不能反映业务开展的实际。其实在BI系统建设之前,我们首先要做的就是要梳理企业的指标,到底我们要展示哪些指标?

263

单链表的基本操作C语言详解

1. 单链表:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 2. 头指针:是指向头结点的指针,无论链表是否为空,头指针均不为空。 3. 头结点:放在第一个结点之前的结点(“零结点”),数据域可以不存放东西,也可以存放链表信息(如链表长度)。 单链表的存储结构 typedef struct Node //单链表的存储结构,Node是结构体类型名,"s...

学习笔记,仅供参考 6742

vue2/3 - element表格组件el-table实现懒加载树型(上下级)数据、默认展开和隐藏层级,支持对表格进行修改|新增|删除,解决完成操作后树节点不刷新问题(提供示例代码,一键复制开箱即用

vue2,vue3,elementui,elementPlus,el-table,Table表格组件,表格懒加载数据,element table表格数中的树形结构懒加载,增加后数据不同步更新问题,el-table树形与el-tree树形结构的一键折叠与展开,elementui中el-tree懒加载数据 默认展开最外层节点,Element-plus Table组件树表结构默认展开一级目录,vue实现element table表格树形结构-使用懒加载时-解决子节点增删改后,不刷新子节点数据问题,解决el-tre

✅ 精选推荐文章 1万+

《深入掌握PostgreSQL数据库》 - 专栏介绍和目录

本专栏系统讲解PostgreSQL数据库的全栈知识,涵盖基础入门到高级实战。内容分为语言基础与进阶、核心原理、高可用架构、性能优化、运维管理、扩展开发等多个模块。从安装配置、数据类型选择到窗口函数、CTE等高级特性,再到索引优化、执行计划分析等性能调优技巧,全面解析PostgreSQL的核心功能。同时深入探讨MVCC机制、WAL日志、并发控制等底层原理,并分享高可用架构设计、备份恢复等运维实践。适合各层次开发者系统学习PostgreSQL,掌握这一强大开源数据库的关键技术。

数据知道的博客 3455

【C语言】链表及单链表基本操作

1、什么是链表?链表的分类? 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 数据结构中: 2、链表的分类 共有8种链表结构 ...

swag_wg的博客 12万+

面经-2023-联发科MTK-数字芯片设计

面经-2023-联发科MTK-数字芯片设计

w0shishabi的博客 2944

数据结构-单链表基本操作-C语言代码

单链表基本操作 1.头插法建立单链表 2.尾插法建立单链表 3.查找结点 3.修改结点 4.插入结点 5.删除结点 本篇只有c语言代码,具体思路讲解请看这篇博客:数据结构-线性结构-单链表 1.头插法建立单链表 #include<stdio.h> #include<stdlib.h> //单链表的结构定义 typedef struct LNode { int data...

suxiaorui的博客 6万+

温度PID控制PLC程序

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C语言创建两个递增单链表,并合并成递增单链表

创建两个递增单链表,并合并成递增单链表 实现要求: (1)任意顺序输入5个整数,按有序插入的要求生成两个有序单链表,将该链表输出显示。 (2)将这两个有序单链表使用两个单链表的原有空间进行合并,合并成一个有序单链表,将生成的有序单链表输出显示。 实现方法 首先定义单链表的结构 typedef struct node{ //单链表的结构定义 int data; //数据域 struct node *next; //指针域 }node,*LinkList;

weixin_44512370的博客 1万+

NTscan扫描工具

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

C语言实现单链表创建、删除、查找、插入

本文将详细的介绍C语言单链表的创建、删除、查找、插入以及输出功能一、创建#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; typedef int ElemType; /*结构体部分*/ typedef struct Node { ElemType data; //数值域 struct Node *next; //指针域 }Li...

qq_36806987的博客 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【数据结构】单链表的基本操作 (C语言版)

【数据结构】单链表的基本操作 (C语言版)

weixin_56814370的博客 5656

C语言单链表创建,插入,删除,遍历

C语言单链表创建,插入,删除,遍历 首先需要创建链表结点结构 在这里插入代码片 创建链表 在这里插入代码片

前行者的博客 1万+

单链表基本操作(C语言)

目录 一、链表的介绍 二、单链表的实现 1、定义单链表 2、接口函数 1)打印函数 2)创建结点 3)尾插 4) 头插 5) 尾删 6)头删 7) 查找 8) 修改 9) 指定位置前插入 10)删除指定位置节点 11)指定位置后插入节点 12) 删除指定位置后的节点 首先我们回顾一下线性表的两种存储方式--顺序存储和链式存储 在中已经讲解过了顺序存储的方式,对于顺序表的优缺点总结来说就是,查找方便,增删复杂。 而链表...

weixin_65132948的博客 7888

【数据结构】C语言实现单链表的基本操作

【数据结构】第二章——线性表(6) 详细介绍了通过C语言实现单链表的基本操作……

蒙奇D索大的博客 2664

创建单链表详解之C语言版

链表是用一组任意的存储单元存储数据元素。如果是存储线性表中的元素,则称为线性链表。 链表中的结点地址在内存中可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此链表中结点的逻辑顺序和物理顺序不一定相同。 如果链表的结点中只有一个指针域,则该链表称为单链表,这也是常用的线性表的存储模式。 单链表适合于比较频繁的增加或者删除线性表中元素,不需要移动元素。

sunnyoldboy博客 7141
上一篇: 二分法查找,以及查找不到将其插入原数组使其仍保持有序(C语言)
下一篇: 用递归算法以及循环算法,删除不带头结点的单链表L中所有值为x的结点(C语言)
星空的你
博客等级 码龄5年 193粉丝 57原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值