本文概要
本篇文章主要介绍数据结构中单向链表各种操作,适合有C语言基础的同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧!
个人简介
☀️大家好!我是新人博主朦胧的雨梦,希望大家多多关照和支持
大家一起努力,共同成长,相信我们都会遇到更好的自己
期待我的文章能给各位带来知识的收获和解决问题的灵感
大家的三连是我不断更新的动力
文章要点速览
- 本文概要
- 个人简介
- 学习目标
- ✨一.单向链表
- 1.单向链表的定义
- ✨二.单向链表的创建
- ✨三.单向链表的各种操作
- 1.增加元素
- 2.查找元素
- 1.根据下标查找元素
- 2.根据数据查找元素
- 3.修改元素数据
- 根据下标修改元素数据
- 4.删除元素
- ✨四.结语
- 往期好文推荐
学习目标
1.了解单向链表的结构特点;
2.掌握单向链表的创建;
3.掌握单向链表的各种操作。
✨一.单向链表
1.单向链表的定义
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。乍一看的意思就像是乍一看,每个字都认识,连在一起就成这样了:
其实,很简单,我用一张图来解释单向链表的结构:
是不是一下就清楚什么是单向链表了,关于头指针head和终端结点:
单链表中每个结点的存储地址是存放在其前趋结点Pnext域中,而开始结点无前趋,故应设头指针head指向开始结点。链表由头指针唯一确定,单链表可以用头指针的名字来命名。
终端结点无后继,故终端结点的指针域为空,即NULL。
✨二.单向链表的创建
1.首先,我们需要定义一个结构体来装着元素和指向下一个元素节点的指针
#include//定义结构体struct Mystruct {int data;struct Mystruct *pnext; };
2.接下来,我们创建一个无空头的链表,首先定义头尾指针(方便对链表进行
操作)
#include//定义结构体struct Mystruct {int data;struct Mystruct *pnext; };int main(void){//定义头尾指针struct Mystruct *phead = NULL;struct Mystruct *pend= NULL;return 0;}
3.以尾添加(尾插)为例,因为需要改变指针的指向,必须传递二级指针,现在写出我们的第一个链表
void end_add(struct Mystruct **phead,struct Mystruct **pend,int add_data){//参数合法性检测if (NULL == phead || NULL == pend)return;//申请新节点struct Mystruct* new_pdode = (struct Mystruct*)malloc(sizeof(struct Mystruct));//检测是否申请成功if (NULL == new_pdode){printf("空间申请失败");return;}//新节点赋值new_pdode->data = add_data;new_pdode->pnext = NULL;//连接//无节点的情况if (NULL == *phead && NULL == *pend){*phead = new_pdode;}//有节点情况else{(*pend)->pnext = new_pdode;}*pend = new_pdode;}
✨三.单向链表的各种操作
1.增加元素
上面讲了尾插,所以就该讲头插了:
void head_add(struct Mystruct** phead, struct Mystruct** pend, int adddata){//参数合法性检测if (NULL == phead || NULL == pend)return;//创造新节点struct Mystruct* new_pdode = (struct Mystruct*)malloc(sizeof(struct Mystruct));//合法性检测if (NULL == new_pdode){printf("空间申请失败");return;}//新节点赋值new_pdode->data = adddata;new_pdode->pnext = NULL;//连接//无节点的情况if (NULL == *phead && NULL == *pend){*pend = new_pdode;}//有节点的情况else{new_pdode->pnext = *phead;}*phead = new_pdode;}
2.查找元素
1.根据下标查找元素
struct Mystruct* index_find(struct Mystruct* phead, int index){//参数合法性检测if (NULL == phead || index < 0)return NULL;//记录头指针struct Mystruct* p = phead;for (int i = 0; i < index; i++){p = p->pnext;}return p;}
2.根据数据查找元素
void data_find(struct Mystruct* phead, int designated_data){//参数合法性检测if (NULL == phead)return;//记录头指针struct Mystruct* ptemp = phead;while (ptemp != NULL){if (ptemp->data == designated_data){printf("找到了");break;}ptemp = ptemp->pnext;}return;}
3.修改元素数据
根据下标修改元素数据
void index_change(struct Mystruct *phead,int index, int change_data){//参数合法性检测if (index < 0)return;//调用下标查找函数struct Mystruct* p = index_find(phead, index);//更改数据p->data = change_data;}
4.删除元素
void freelist(struct Mystruct* phead){//记录头指针struct Mystruct* pt = phead;//开始删除while (pt != NULL){struct Mystruct* p = pt;pt = pt->pnext;free(p);}}
✨四.结语
单向链表的操作非常重要,对于新手来说。可能需要重复捋几遍思路,一旦掌握就会觉得非常简单,相信大家通过这篇文章已经可以掌握了单向链表的操作,今天就分享到这里,谢谢大家的观看,有什么想法记得评论区告诉我!拜拜~✨ ✨ ✨
往期好文推荐
TOP.AI工具究竟是帮手还是对手?❤️❤️❤️❤️❤️❤️
TOP.Python爬虫 | 利用python爬虫获取想要搜索的数据(某du)❤️❤️❤️❤️❤️❤️
TOP.ChatGPT | 一文详解ChatGPT(学习必备)❤️❤️❤️❤️❤️❤️