C语言学习历程(十六)数据结构-单双向链表

本文深入讲解了数据结构的基础概念,包括线性表、顺序表和链表等,并详细对比了顺序表与链表的不同特性,如存储分配方式、存储密度及时间复杂度等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构
1.线性表
定义:使用指针将地址链接起来,但是在内存区的物理地址并不一定是连续的。
遍历:必须从头开始走到我们需要的地方;

2.顺序表
定义:在内存区内定义一块连续的内存,通过数组的方式来存取,在地址上是连续的。
遍历:顺序访问,可以随机存取;

3.链表
*单链表
typedef struct Node
{
类型 类型名;
}LNode;
当然,类型可以int ,double,char,也可以是另一个结构,甚至是结构本身
typedef struct Node
{
类型 类型名
如: LNode date;
ElemType *next;
} ElemType;//想要定义的结构名

1.表前插入法
*生成新的结点,需要使用malloc,分配动态内存;
*每次都在表头(head空表)后面加入新的结点;
*会逆顺序输入;
特点:可以逆序输入一个链表信息;或者将一个链表改为逆序;

  1. 表后插入法
    *每次在表尾后面插入一个新的结点;
    *每次设置一个尾指针r,总是指向表中最后一个结点;

*静态链表
*循环链表
*双向链表

4.顺序表与链表的比较
* 存储分配的方式
顺序表的存储空间是静态分配的
链表的存储空间是动态分配的
* 存储密度 = 结点数据本身所占的存储量/结点结构所占的存储总量
顺序表的存储密度 = 1
链表的存储密度 <= 1
* 基于时间的比较(时间复杂度)
*存取方式
顺序表可以随机存取,也可以顺序存取
链表只能顺序存取
* 插入/删除时移动元素个数
顺序表平均需要移动一半元素
链表不需要移动元素,只需要修改指针
若插入/删除仅发生在表的两端,宜采用带尾指针的循环链表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值