C语言链表详解(通俗易懂,超详细)

C语言链表详解(通俗易懂,超详细)前言:想要很好的学好链表,我们首先要了解链表的优缺点(面试)优点:1.插入删除不需移动其他元素,只需改变指针;2:链表各个节点在内存中空间不要求连续!空间利用率高缺点:1.访问数组元素效率低;2:数组的存储空间连续,内存空间利用率低1.单链表通俗讲就是结构体变量与结构体变量链接在一起.链表结构体变量:一般由数据域(任何数据)和指针域组成。也就是所说的结点。结点组成:stru…

前言:想要很好的学好链表,我们首先要了解链表的优缺点(面试)
在这里插入图片描述

优点:1.插入 删除 不需移动其他元素, 只需改变指针;2:链表各个节点在内存中空间不要求连续!空间利用率高
缺点:1.访问数组元素效率低;2:数组的存储空间连续,内存空间利用率低
重要!!!欢迎对撸代码有兴趣的同学一起交流,大学生也可!!!带你一起写项目致富!QQ:1324252797
视频讲解:https://space.bilibili.com/440581684

1.单链表

通俗讲就是结构体变量与结构体变量链接在一起.
链表结构体变量:一般由 数据域(任何数据)和指针域 组成。也就是所说的结点。
结点组成:

struct Node 
{ 
   
 int data;               //数据域
 struct Node* next;      //指针域
};

链表
其实通俗来讲链表就像一列火车,每一借车厢里面装载的货物就是各种各样的数据,而连接他们的就是通过指针。
2.如何连接他们呢?

#Include<stdio.h>
struct Node
{ 
   
	int data;
	struct Node* next; 
}
int main()
{ 
   
	struct Node Node1={ 
   1,NULL};		//Node1,其数据域里面存放1,指针域为空
	struct Node Node1={ 
   2,NULL};
	struct Node Node1={ 
   3,NULL};		//定义好了车厢,接下来要连接车厢
	Node1.next=&Node2;		//将Node2的地址发送给Node1,完成链接
	Node2.next=&Node3;
}

此为静态链表(不经常使用)

3.动态链表
这种链表在初始时不一定分配足够的空间, 但是在后续插入的时候需要动态申请存储空间,并且存储空间不一定连续, 在进行插入和删除时则不需要移动元素, 修改指针域即可,所以仍然具有链表的主要优点,链表结构可以是动态地分配存储的,即在需要时才开辟结点的存储空间,实现动态链接。(来自百度百科)
3.1如何建立动态链表?
步骤:
**1.创建链表(造个火车头)
2.创建结点
3.插入结点
4.删除结点

struct Node*createList()
{ 
   
//火车头
	struct Node*headNode=(struct Node*)malloc(sizeof(struct Node));
	//此处malloc作用是向系统申请内存
	//初始化变量
	headNode->next=NULL;
	return headNode;
}

之后在主函数中调用 struct Node*createList() 函数

接下来创建结点:

```c
struct Node*createList(int data)//创建结点区别在于多了数据域
{ 
   
	struct Node*newNode=(struct Node*)malloc(sizeof(struct Node));//动态内存申请
	newNode->data=data;
	newNode->next=NULL;//初始化变量

}

结点的插入方法一般有:头插法;尾插法
我们先来讲链表的打印
链表的打印可以看作,火车到站,装卸工人从你选择的地方拿着记录本,依次往后记录着每节车厢的货物。

void printList(struct Node*headList)
{ 
   
	struct Node* pMove=headNode->next;//pMove就是装卸工人
	while(pMove)
	{ 
   
		printf("%d",pMove->data);//记录
		pMove=pMove->next;//向下一节车厢移动
	}
	printf("\n");
}

插入函数(头插法)

void insertNodeByhead(struct Node* headNode)
{ 
   
	struct Node*newNode=createNode(data);//创建结点
	newNode->next=headNode->next;
	headNode->next=newNode;
}

注:此处不懂可以观看此视频第30分钟:https://www.bilibili.com/video/av35425556?from=search&seid=642529453300322955
本文章大多灵感来源于此,鸣谢作者!
重要!!!欢迎对撸代码有兴趣的同学一起交流,大学生也可!!!带你一起写项目致富!QQ:1324252797

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37109.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注