| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> [C语言]动态链表及其基本操作 -> 正文阅读 |
|
[数据结构与算法][C语言]动态链表及其基本操作 |
目录 引入:当需要存储一些数据的时候,首先想到的肯定是定义一个数组来存储这些数据。但它有很多缺点: 第一、在输入数据之前不知道这组数据有多少个,所以我们很难确定要定义多大的一个数组,而且数组在定义之后就不能改变其大小,定义多了造成空间的浪费,定义少了又导致程序不能正常运行。 第二、在数组中间插入或删除一个数据时需要移动大量元素,需要耗费很多时间。 为了解决这个问题,我们想一下能不能构造一种数据结构:当存储一些数据时,能不能让每一个元素都知道他下一个元素的位置,这样,就可以通过前一个元素访问到下一个元素,以此类推,就可以把一整组数据遍历完。 如图: ? ?为了表示每个数据元素a i与其后继数据a i+1之间的逻辑关系,对于数据元素a i来说,除了存储本身的信息之外,还需存储一个指示其直接后继的信息(即后继元素的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继元素位置的域称为指针域,这两部分组成的一个整体,叫做结点。 一般定义一个结构体来存储一个结点,上图:
?当多个结点链结在一起时就组成了一个链表。 对于链表来说,也需要有头有尾。在链表的头部我们需要一个指针head指向链表的最开始,并且链表的最后一个结点的指针域为“空”。 上图: 链表的创建:1、定义一个头指针; 2、创建第一个结点(即头结点)使头指针指向头结点,头结点的指针域为空; 3、创建结点,使上一个结点的指针指向这个结点,这个结点的指针域为空(循环); (注:头结点是为了更方便地对链表进行操作,在链表的第一个结点前设置一个结点,称为头结点,头结点的数据域可以不存储任何信息,也可以存储链表的长度等附加信息。) 代码实现:
上面这段代码在加入一个新的结点时,始终让新的结点都放到最后,这种算法称之为尾插法。 在添加新的结点时还有一种思路就是将新的结点插入到链表的最前端,这种算法简称为头插法。 来吧,展示!
链表的插入:在将一个新的结点插入到链表中间的某一个位置时,只需要对需要插入的地方的前一个结点的指针域进行修改即可,无需对后面的元素操作。 若要将一个新的结点s插入到一个链表的第i个元素时(假设原链表中元素的个数大于等于i个),算法思路如下: 1、声明一个指针p指向链表的第一个结点,初始化j从1开始计数; 2、当j<i时就遍历链表,让p的指针向后移动,不断指向下一个节点; 3、将s的指针指向p的指针指向的结点,将p的指针指向s。s->next=p->next;p->next=s; 图解: 代码展示:
链表的删除:单链表删除第i个结点的算法思路: 1、声明一个指针指向第一个结点,初始化j=1; 2、当j<i时遍历链表,让p的指针向后移动,不断指向下一个节点; 3、将要删除的点p->next赋值给q;将q->next赋值给p->next;释放q结点。 代码展示:
单链表的整表删除:算法思路: 1、声明两个指针p和q; 2、将第一个结点赋值给p; 3、将下一个结点赋值给q,释放p,将q赋值给p,将下一个结点赋值给q(依次循环直至将整个链表全部删除); 代码展示:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 14:58:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |