数据结构-C语言 || 线性表的总结

数据元素的结构——逻辑结构和物理结构

逻辑结构:数据元素之间的关系

物理结构:数据元素在计算机存储器中的位置 

目录

1.线性表

a) 线性表的顺序存储——顺序表

b) 线性表的链式存储——链表、循环链表、双向链表

▏▶ 何时选用顺序表,何时选用链表作为线性表的存储结构合适?

2.线性表的创建 

a) 顺序表的创建——初始化、查找、插入、删除 

 b) 双链表的创建——初始化、查找、插入、删除、删除重复元素 

 c) 单链表的创建——初始化、合并链表、逆序输出


1.线性表

定义:由n个数据元素组成的有限序列

特点:具有相同类型的数据元素,因此数组是线性表数据元素逻辑结构的体现。

分类:以数据元素的存储方式分为——线性表的顺序存储、线性表的链式存储

a) 线性表的顺序存储——顺序表

定义:用一组地址连续的存储单元依次存储线性表的数据元素

特点:数据的逻辑结构和物理结构一致,即数据元素之间的关系是以元素在计算机中“物理位置相邻”来体现的。

分类:动态顺序表、静态顺序表 (对应动态数组【使用realloc函数给数组扩容】、静态数组)

描述方式:一维数组

typedef struct {
	ElemType* e;       //存储空间的基地址
	Length len;        //当前顺序表长度
	Length Listsize;   //分配的存储容量——总长度
}Sqlist;

b) 线性表的链式存储——链表、循环链表、双向链表

定义:用一组任意的存储单元存储线性表数据元素 

描述方式:指针

▎  链表

特点:①数据元素的逻辑结构和物理结构不一定一致;②在定义上,链表的定义包括数据元素的取值后继结点的指针定义(数据域和指针域)

分类:动态链表、静态链表

        ☞ 动态链表:大小不固定的存储(使用malloc函数随时分配内存的)

        ☞ 静态链表:大小固定的内存存储

typedef struct Lnode{  //结点
	ElemType data;     //数据域
    typedef struct* next;   //后继指针域 
}Lnode;

▎  循环链表

特点:表中最后一个结点的指针域指向头结点(构成一个闭

分类:单循环链表、双向循环链表

  • 单:沿着一个方向找其他结点
  • 双:从结点的任意位置向任意方向都能找到其他结点

▎  双向链表

特点:有两个指针域,一个指向结点的直接前驱,一个指向结点的直接后继,具有双向性。

typedef struct Lnode{  //结点
	ElemType data;     //数据域
    typedef struct* next;   //后继指针域 
    typedef struct* prior;   //前驱指针域 
}Lnode;

▏▶ 何时选用顺序表,何时选用链表作为线性表的存储结构合适?

      首先要明白顺序表和链表各自的特点——

顺序表:元素顺序存储,有一个连续的内存块来存储数据,则对顺序表按“位”访问快(对固定元素的随机存取很方便),而插入删除等大量元素移动操作慢

链表:元素链式存储,数据存储在任意内存单元,通过指针进行勾链串成一个线性表,则对链表插入删除等大量元素移动操作快(只需要改变插入删除位置两边结点指针的指向即可),而按“位”访问慢(对于元素的随机存取则需要遍历查找)。

综上所述

☞对于少量元素操作,随机存取、查找元素需求更多,修改次数多的时候 选择顺序表;

☞对于大量元素操作,增、改、删、查等操作进行较多的时候 选择链表。

2.线性表的创建 

a) 顺序表的创建——初始化、查找、插入、删除 

68948b7a5f9445d68ee9d63ce130c5f5.jpeg

具体实现方法、代码及时间/空间复杂度分析见

数据结构-C语言-线性表 || 顺序表的实现_◎菜澜子的博客-CSDN博客


  408b582c92a54dbb8740c138c8dd30b6.jpeg

 b) 双链表的创建——初始化、查找、插入、删除、删除重复元素 

插入 

8a2d15ce0eac45b089067008fe528449.png

 删除:

a89bc2354cec43122ee5ab29cbdcee03.png

 具体实现方法、代码及时间/空间复杂度分析见

数据结构-C语言-线性表 || 双向链表的实现_◎菜澜子的博客-CSDN博客


  c) 单链表的创建——初始化、合并链表、逆序输出

 初始化

2158526a881168a3089bf85a0280e5eb.png

删除

a7a7f07c600dd59a113a16d1f30cd000.png

具体实现方法、代码及时间/空间复杂度分析见 

数据结构-C语言-线性表 || 单链表的实现_◎菜澜子的博客-CSDN博客


总结于10.1~10.4 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值