如果我们现在有一组数,[1,2,3,4,5,6,7,8,9,10],需要剔除里面的某一个数的时候,可以用循环的方法剔除,但是效率不高,这个时候可以采用链表的方法

0.数组的剔除

有一种解决方法,就是数组的剔除,找出要剔除的下标,然后把后面的元素前移,这种情况下,如果剔除的元素在数组的开头,这样复杂度会非常高,导致设计出来的运行结果缓慢。

按值查询节点

1.链表的创建

1.0定义

定义结构体

typedef struct LNode {int  val;struct LNode* next;
}LNode, *LinkList;

1.1 初始化

LNode* initLNode()
{LNode* p = (LNode*)malloc(sizeof(LNode));//创建一个头结点LNode* temp = p;//声明一个指针指向头结点,用于遍历链表int num;printf("请输入链表长度\n");scanf_s("%d",&num);for (int i = 1; i < num; i++){LNode* a = (LNode*)malloc(sizeof(LNode));a->val = i;a->next = NULL;temp->next = a;temp = temp->next;}return p;
}

1.2 插入数据

插入数据有两种 头部插入法 还有尾部插入法,这里展示头部插入法

LNode* initLNode()
{LNode* p = (LNode*)malloc(sizeof(LNode));//创建一个头结点LNode* temp = p;//声明一个指针指向头结点,用于遍历链表int num;printf("请输入链表长度\n");scanf_s("%d",&num);for (int i = 1; i < num; i++){LNode* a = (LNode*)malloc(sizeof(LNode));a->val = i;a->next = NULL;temp->next = a;temp = temp->next;}return p;
}

2. 链表的剔除

剔除的方法=找到哪个节点+删掉结点并重新把链表组装好

节点的查询:有按值查询,有按照节点的位置查询

若剔除P1,分为两种:将p2的结构体里面的指向下一个节点的地址,指向P1的下一个,这样子就绕开了P1,最后再把p1释放掉,就完成了剔除

还有一种方法是把P1的值赋值给P2,然后把P2的指向后驱节点等于P1的后驱节点,然后释放P1

LNode* delElem(LinkList p, int add)
{LNode* temp = p;//遍历到被删除结点的上一个结点for (int i = 1; i < add; i++) {temp = temp->next;}LNode* del = temp->next;//单独设置一个指针指向被删除结点,以防丢失temp->next = temp->next->next;//删除某个结点的方法就是更改前一个结点的指针域free(del);//手动释放该结点,防止内存泄漏return p;
}

2.2 打印到控制台

void display(LinkList p)
{LNode* temp = p;//将temp指针重新指向头结点//只要temp指针指向的结点的next不是Null,就执行输出语句。while (temp->next) {temp = temp->next;printf("%d", temp->val);}printf("\n");
}

3. 主函数调用

int main()
{LNode* p = initLNode();display(p);printf("在第4的位置插入元素5:\n");p = insertElem(p, 5, 4);display(p);printf("删除元素3:\n");p = delElem(p, 3);display(p);return 0;
}

C语言 | 链表的建立和剔除相关推荐

  1. c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  2. Scratch 与C语言实现数据结构静态链表的建立及操作

    Scratch 实现数据结构静态链表的建立及操作 scratch操作 Scratch 实现数据结构静态链表的建立及操作 数据结构 初始化静态链表 添加数据代码 删除数据 回收空闲节点操作代码 计算静态 ...

  3. C语言数据结构 单链表的建立、遍历、查找、插入和删除操作

    参考文献 本博文为半摘记性质 -- 声明:全文主干部分摘自 [1] 杨智明. 数据结构(C语言版)[M]. 第一版. 北京:北京理工大学出版社, 2016. [2] 严蔚敏, 李冬梅, 吴伟民. 数据 ...

  4. c语言建立链表叫LNode,C语言链表基本操作

    链表的建立.插入.查找.倒置.删除等操作 //链表操作:建立.插入.删除.查找.倒置.删除等基本操作 //喜洋洋制作 #include #include typedefstructLNode { in ...

  5. c语言链表head的作用,c语言链表的用法

    c语言链表的用法 链表是数据结构中比较基础也是比较重要的类型之一,那么有了数组,为什么我们还需要链表呢!或者说设计链表这种数据结构的初衷在哪里?下面小编就为大家介绍下c语言链表的用法. c语言枚举的用 ...

  6. C语言——用户自己建立数据类型

    1 定义和使用结构体变量 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体.在其他一些高级语言中称为"记录" 可以在程序中自己建立一个结构体类型.例如: s ...

  7. c语言链表ppt,C语言链表及链表上机题.ppt

    C语言链表及链表上机题 第13讲 链表 链表概述(1) 所谓链表是指若干个数据项(每个数据项称为一个"结点")按一定的原则连接起来.每个数据项都包含有若干个数据和一个指向下一个数据 ...

  8. 一步一步教你从零开始写C语言链表(超详细)

    STM32 HAL开发完全指南 写文章 一步一步教你从零开始写C语言链表(超详细) 杨源鑫 嵌入式系统工程师.物联网创业合伙人,业务经理兼产品经理 285 人赞同了该文章 为什么要学习链表? 链表主要 ...

  9. C语言-用户自己建立数据类型

    目录 定义和使用结构体变量 自己建立结构体类型 定义结构体类型变量 结构体变量的初始化和引用 使用结构体数组 定义结构体数组 结构体数组的应用举例 结构体指针 指向结构体变量的指针 指向结构体数组的指 ...

最新文章

  1. 2022-2028年中国环保服务业投资分析及前景预测报告
  2. 用python玩转数据第四周答案_2020大学mooc用Python玩转数据课后答案
  3. 采用SIMULINK SimPowerSystems的光伏并网阵列仿真
  4. 多个动态包含一个JSF标签
  5. 海岸鸿蒙2018年标准物质,海岸鸿蒙——20年权威的标准物质研制单位
  6. 开挂的印度裔00后:7岁“出道”教编程,12岁成为IBM荣誉顾问
  7. 第一章:第三课 选择器-状态伪类选择器[四]
  8. 黑苹果mac未能安装在你的电脑上_mac电脑上全新视频剪辑软件安装包分享,让你剪辑视频从此无忧!...
  9. 华硕笔记本电脑突然失去WIFI功能
  10. linux怎么做ppapi工具,如何在Linux上构建PPAPI插件?
  11. altium designer绘制51单片机最小系统
  12. 产品经理的职责有哪些?该做什么?
  13. 2019个税计算公式(附最新个税计算器)
  14. python中data是什么意思_python中的data[:, :-1]和data[:, -1]什么意思?
  15. echarts实现地图飞线
  16. Ubuntu18.04安装显卡驱动重启后出现黑屏问题
  17. 互联网电影上线,手机电影院移动端就可以看电影
  18. 是否能任取前序、中序和后序两种序列建立二叉树?
  19. 静态库(lib)和动态库(dll)的使用
  20. HTML如何返回上一页?

热门文章

  1. 久等了,铁威马TOS 5内测招募来了
  2. 第三篇:动态 8位数码管显示---亚龙236电路
  3. css3实现向一个方向无缝连接滚动
  4. 简历被肆意贩卖,个人信息安全何在?
  5. WinMerge比较时未显示出全部文件
  6. Flowable流程引擎和各类表说明
  7. Deeplabv3+ Pytorch训练cityscapes数据集
  8. 【路径追踪】数学工具--蒙特卡洛方法(Monte Carlo)
  9. Yii 用户登陆机制
  10. G-dis - Mac中的Redis客户端