动态链表的创建

简介: 动态链表的创建

一、内存的两种访问方式


1、随机访问方式

对于数组来说,他的所有元素在内存中是连续存储的,因而很容易计算出每个元素的内存地址,从而可以直接访问数组中的任意一个元素。


2、顺序访问方式

对于链表来说,不同的结点在内存中存储的位置是随机的,因而无法计算出每个结点的内存地址,从而只能从第一个结点开始依次访问。

因此,需要将第一个结点的地址保存起来。


二、如何保存第一个结点的地址?

1、带头结点的链表

若是将第一个结点的地址存储到一个专门的结点的指针域中,那么这种链表称为带头结点的链表。image.png

这个专门的结点称为头结点,头结点的数据域中不存储任何有效数据。

这种链表也有头指针,不过此时的头指针变量中存储的是头节点的地址。

看起来头结点似乎多余,实际上引入头结点能够简化链表的创建、插入和删除等操作。


为何要创建一个函数

原因:需要返回头指针的地址,便于后面遍历、删除等操作

image.png


image.png

时刻谨记这张图!

因为指针p一直表示末指针,所以创建一个新指针,利用之后,此刻就变成了末指针

相关文章
|
5月前
|
算法
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
48 0
|
1月前
|
存储 C语言 索引
你真的了解线性表中的顺序表了吗?(静态与动态顺序)
你真的了解线性表中的顺序表了吗?(静态与动态顺序)
44 0
|
5月前
|
存储
数据结构学习记录——堆的插入(堆的结构类型定义、最大堆的创建、堆的插入:堆的插入的三种情况、哨兵元素)
数据结构学习记录——堆的插入(堆的结构类型定义、最大堆的创建、堆的插入:堆的插入的三种情况、哨兵元素)
37 2
|
6月前
|
存储
建立动态链表
建立动态链表
51 1
|
6月前
|
存储
建立简单的静态链表
建立简单的静态链表
41 1
|
5月前
|
算法
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
32 0
静态顺序表及基本操作具体实现 2
静态顺序表及基本操作具体实现
42 0
静态顺序表及基本操作具体实现 1
静态顺序表及基本操作具体实现
52 0
|
存储 C++
7.2 C/C++ 实现动态链表
动态链表是一种常用的动态数据结构,可以在运行时动态地申请内存空间来存储数据,相比于静态数组和静态链表,更加灵活和高效。在动态链表中,数据元素被组织成一条链表,每个元素包含了指向下一个元素的指针,这样就可以通过指针将所有元素串联起来。使用动态链表存储数据时,不需要预先申请内存空间,而是在需要的时候才向内存申请。当需要添加新的元素时,可以使用`malloc`函数动态地申请内存空间,然后将新的元素插入到链表中;当需要删除元素时,可以使用`free`函数释放元素占用的内存空间,然后将链表中的指针重新连接。
229 0
|
C语言
二叉树的建立,遍历,销毁(C语言)
二叉树的建立,遍历,销毁(C语言)
90 0