广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >详解C语言之单链表
  • 173
分享到

详解C语言之单链表

2024-04-02 19:04:59 173人浏览 独家记忆
摘要

目录一、思路步骤1. 定义结构体2.初始化3.求当前数据元素的个数4.插入5.删除6.释放内存空间二、代码总结 一、思路步骤 1. 定义结构体 a.数据域:用来存放数据 b.指针域

一、思路步骤

1. 定义结构体

a.数据域:用来存放数据

b.指针域:用来存放下一个数据的位置

2.初始化

申请头结点,并将其初始化为空

3.求当前数据元素的个数

在这里插入图片描述

a.设置一个指针变量p指向头结点和计数变量size等于0

b.循环判断p->next是否为空,如果不为空,就让指针p指向它的直接后继结点,并让size自增

c.返回size

4.插入

插入

a.设置两个指针,一个指向头结点,另一个要动态申请内存空间存放要插入的数
b.找到要插入位置的前一位,并判断插入位置是否正确
c.生成新结点,给新结点数据域赋值,执行步骤①,在执行步骤②

5.删除

删除

a.设置两个指针p、q,p指向头结点,q指向要被删除的结点

b.找到要删除位置的前一位,并判断删除位置是否正确、存在

c.q指向被删除的结点,将被删除结点的数据域赋值给x,p指向被删除结点的下一个结点,释放q的内存空间

6.释放内存空间

最后记得将头结点置空哦!要不然容易出现野指针。

二、代码


#include <stdio.h>
#include <stdlib.h>
typedef int DataType;//给int起个别名,方便以后修改
typedef struct node
{
	DataType data;//数据域
	struct Node *next;//指针域
}SLNode;
//初始化
void ListInit(SLNode **head)
{
	*head = (SLNode *)malloc(sizeof(SLNode));//申请头结点
	(*head)->next = NULL;
}
//求当前数据元素个数
int ListLength(SLNode *head)
{
	SLNode *p = head;
	int size = 0;
	while (p->next != NULL)
	{
		p = p->next;
		size++;
	}
	return size;
}
//插入
int ListInsert(SLNode *head, int i, DataType x)
{
	SLNode *p, *q;
	int j;
	p = head;
	j = -1;
	while (p->next != NULL && j < i - 1)
	{
		p = p->next;
		j++;
	}
	if (j != i - 1)
	{
		printf("插入参数位置错误!!!\n");
		return 0;
	}
	q = (SLNode *)malloc(sizeof(SLNode));//生成新结点
	q->data = x;
	q->next = p->next;
	p->next = q;
	return 1;
}
//删除
int ListDelete(SLNode *head, int i, DataType *x)
{
	SLNode *p, *q;
	int j;
	p = head;
	j = -1;
	while (p->next != NULL && p->next->next != NULL && j < i - 1)
	{
		p = p->next;
		j++;
	}
	if (j != i - 1)
	{
		printf("删除位置参数错误!!!\n");
		return 0;
	}
	q = p->next;
	*x = q->data;
	p->next = p->next->next;
	free(q);//释放被删除结点的内存空间
	return 1;
}
//按位取
int ListGet(SLNode *head, int i, DataType *x)
{
	SLNode *p;
	int j;
	p = head;
	j = -1;
	while (p->next != NULL && j < i)
	{
		p = p->next;
		j++;
	}
	if (j != i)
	{
		printf("取出位置参数错误!!!\n");
		return 0;
	}
	*x = p->data;
	return 1;
}
//释放
void ListDestroy(SLNode **head)
{
	SLNode *p, *q;
	p = *head;
	while (p != NULL)
	{
		q = p;
		p = p->next;
		free(q);
	}
	*head = NULL;
}

int main()
{
	SLNode *head;
	int i, x;
	ListInit(&head);
	for (i = 0; i < 10; i++)
		ListInsert(head, i, i + 10);
	ListDelete(head, 9, &x);
	for (i = 0; i < ListLength(head); i++)
	{
		ListGet(head, i, &x);
		printf("%d ", x);
	}
	ListDestroy(&head);
	system("pause");
	return 0;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 详解C语言之单链表

本文链接: https://www.lsjlt.com/news/157596.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解C语言之单链表
    目录一、思路步骤1. 定义结构体2.初始化3.求当前数据元素的个数4.插入5.删除6.释放内存空间二、代码总结 一、思路步骤 1. 定义结构体 a.数据域:用来存放数据 b.指针域...
    99+
    2022-11-12
  • C语言链表与单链表详解
    链表是什么及链表的优势 链表是一种介于数组的另外一种数据结构: 我们知道数组可以存放很多的元素,这些元素都是呈线性排列,也就是一个挨着一个连续存放 但是当元素足够多时,还能继续正常的...
    99+
    2022-11-13
  • C语言线性表之双链表详解
    目录定义1.删除2.插入3.建立4.查找总结定义 链表是通过一组任意的存储单元来存储线性表中的数据元素,每一个结点包含两个域:存放数据元素信息的域称为数据域,存放其后继元素地址的域称...
    99+
    2022-11-13
  • C语言数据结构之单链表存储详解
    目录1、定义一个链表结点2、初始化单链表3、输出链表数据4、完整代码如果说,顺序表的所占用的内存空间是连续的,那么链表则是随机分配的不连续的,那么为了使随机分散的内存空间串联在一起形...
    99+
    2022-11-13
  • C语言数据结构之单链表操作详解
    目录1、插入操作2、删除操作3、查找操作4、修改操作5、完整代码1、插入操作 (1)创建一个新的要插入的结点 (2)将新结点的 next 指针指向插入位置后的结点 (3)将插入位置前...
    99+
    2022-11-13
  • C语言数据结构之单向链表详解分析
    链表的概念:链表是一种动态存储分布的数据结构,由若干个同一结构类型的结点依次串连而成。 链表分为单向链表和双向链表。 链表变量一般用指针head表示,用来存放链表首结点的地址。 每个...
    99+
    2022-11-12
  • C语言实现无头单链表详解
    目录链表的结构体描述(节点)再定义一个结构体(链表) 断言处理 & 判空处理创建链表创建节点头插法打印链表尾插法 指定位置插入 头删法尾删法&n...
    99+
    2022-11-13
  • C语言学习之链表的实现详解
    目录一、链表的概念二、链表的结构三、顺序表和链表的区别和联系四、链表的实现一、链表的概念 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次...
    99+
    2022-11-13
    C语言 链表实现 C语言 链表
  • C语言数据结构之双链表&循环链表&静态链表详解
    目录单链表 VS 双链表双链表双链表的初始化(带头结点)双链表的插入双链表的删除双链表的遍历循环单链表循环双链表循环双链表的初始化循环双链表的插入循环双链表的删除静态链表什么是静态链...
    99+
    2022-11-13
  • C语言算法学习之双向链表详解
    目录一、练习题目二、算法思路1、设计浏览器历史记录2、扁平化多级双向链表3、展平多级双向链表4、二叉搜索树与双向链表一、练习题目 题目链接难度1472. 设计浏览器历史记录★★★☆☆...
    99+
    2022-11-13
  • C++编程语言实现单链表详情
    目录一、单链表简单介绍二、下面我们先实现单链表的初始化。 三、实现单链表的插入与删除数据一、单链表简单介绍 首先,我们再回顾一下线性表的两种存储方式——顺序存储与链式存储 上图左边...
    99+
    2022-11-12
  • C语言实现单链表的基本功能详解
    1.首先简单了解一下链表的概念: 要注意的是链表是一个结构体实现的一种线性表,它只能从前往后,不可以从后往前(因为next只保存下一个节点的地址).在实现单链表的操作时,需要用指针...
    99+
    2022-11-12
  • 详解C语言之顺序表
    目录一、思维导图二、步骤1.初始化2.求表长3.插入数据元素4.删除数据元素5.取出数据元素按位查找按位查找所有代码总结 一、思维导图 二、步骤 1.初始化 代码如下: voi...
    99+
    2022-11-12
  • C语言数据结构之顺序表和单链表
    一、顺序表的创建、删除和插入 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> struct sqlist { ...
    99+
    2022-11-12
  • C语言类的双向链表详解
    目录前言双向链表的定义双向链表的创建节点的创建双向链表节点查找双向链表的插入双向链表的节点删除双向链表的删除总结前言 链表(linked list)是一种这样的数据结构,其中的各对象...
    99+
    2022-11-12
  • C语言数据结构超详细讲解单向链表
    目录1.链表概况1.1 链表的概念及结构1.2 链表的分类2. 单向链表的实现2.1 SList.h(头文件的汇总,函数的声明)2.2 SList.c(函数的具体实现逻辑)2.2.1...
    99+
    2022-11-13
  • Go语言数据结构之单链表的实例详解
    目录任意类型的数据域实例01快慢指针实例02反转链表实例03实例04交换节点实例05任意类型的数据域 之前的链表定义数据域都是整型int,如果需要不同类型的数据就要用到 interf...
    99+
    2022-11-11
  • C语言数据结构之单链表的实现
    目录一.为什么使用链表二.链表的概念三.链表的实现3.1 创建链表前须知3.2 定义结构体3.3 申请一个节点3.4 链表的头插3.5 链表的尾插3.6 链表的尾删3.7 链表的头删...
    99+
    2022-11-13
  • C语言数据结构与算法之单链表
    目录基本概念读取数据元素获取第i个结点的数据元素插入数据元素 初始化链表打印链表顺序表查空顺序表的删除 删除第i个结点及其数据元素情况1:当删除的是第一个元素情况2:除第一个结点外完...
    99+
    2022-11-12
  • 详解Go语言中单链表的使用
    目录链表单链表结构创建节点遍历链表头插法尾插法遍历方法链表长度链表转数组数组转链表链表 一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作