赞
踩
数据元素的结构——逻辑结构和物理结构
逻辑结构:数据元素之间的关系
物理结构:数据元素在计算机存储器中的位置
目录
▏▶ 何时选用顺序表,何时选用链表作为线性表的存储结构合适?
b) 双链表的创建——初始化、查找、插入、删除、删除重复元素
定义:由n个数据元素组成的有限序列
特点:具有相同类型的数据元素,因此数组是线性表数据元素逻辑结构的体现。
分类:以数据元素的存储方式分为——线性表的顺序存储、线性表的链式存储。
定义:用一组地址连续的存储单元依次存储线性表的数据元素
特点:数据的逻辑结构和物理结构一致,即数据元素之间的关系是以元素在计算机中“物理位置相邻”来体现的。
分类:动态顺序表、静态顺序表 (对应动态数组【使用realloc函数给数组扩容】、静态数组)
描述方式:一维数组
- typedef struct {
- ElemType* e; //存储空间的基地址
- Length len; //当前顺序表长度
- Length Listsize; //分配的存储容量——总长度
- }Sqlist;
定义:用一组任意的存储单元存储线性表数据元素
描述方式:指针
▎ 链表
特点:①数据元素的逻辑结构和物理结构不一定一致;②在定义上,链表的定义包括数据元素的取值和后继结点的指针定义(数据域和指针域)。
分类:动态链表、静态链表
☞ 动态链表:大小不固定的存储(使用malloc函数随时分配内存的)
☞ 静态链表:大小固定的内存存储
- typedef struct Lnode{ //结点
- ElemType data; //数据域
- typedef struct* next; //后继指针域
- }Lnode;
▎ 循环链表
特点:表中最后一个结点的指针域指向头结点(构成一个闭环)
分类:单循环链表、双向循环链表
▎ 双向链表
特点:有两个指针域,一个指向结点的直接前驱,一个指向结点的直接后继,具有双向性。
- typedef struct Lnode{ //结点
- ElemType data; //数据域
- typedef struct* next; //后继指针域
- typedef struct* prior; //前驱指针域
- }Lnode;
▏▶ 何时选用顺序表,何时选用链表作为线性表的存储结构合适?
首先要明白顺序表和链表各自的特点——
☑顺序表:元素顺序存储,有一个连续的内存块来存储数据,则对顺序表按“位”访问快(对固定元素的随机存取很方便),而插入删除等大量元素移动操作慢。
☑链表:元素链式存储,数据存储在任意内存单元,通过指针进行勾链串成一个线性表,则对链表插入删除等大量元素移动操作快(只需要改变插入删除位置两边结点指针的指向即可),而按“位”访问慢(对于元素的随机存取则需要遍历查找)。
综上所述
☞对于少量元素操作,随机存取、查找元素需求更多,修改次数多的时候 选择顺序表;
☞对于大量元素操作,增、改、删、查等操作进行较多的时候 选择链表。
具体实现方法、代码及时间/空间复杂度分析见
数据结构-C语言-线性表 || 顺序表的实现_◎菜澜子的博客-CSDN博客
插入
删除:
具体实现方法、代码及时间/空间复杂度分析见
数据结构-C语言-线性表 || 双向链表的实现_◎菜澜子的博客-CSDN博客
初始化
删除
具体实现方法、代码及时间/空间复杂度分析见
数据结构-C语言-线性表 || 单链表的实现_◎菜澜子的博客-CSDN博客
总结于10.1~10.4
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。