数据结构1.1 - 线性表 基础

声明:大部分内容来自 - 《2019天勤数据结构高分笔记》

1. 线性结构 VS 非线性结构

线性结构非线性结构
1 线性表
2 栈
3 队列
4 串
1 数组
2 广义表
3 树
4 图

线性结构 ( 逻辑特征 / 逻辑关系 )
仅一个表头元素、仅一个表尾元素,表头无前驱、表尾无后继
除了表头和表尾外的元素 仅一个前驱 和 一个后继
即:1 对 1 的关系

非线性结构
不是 1 对 1 的关系!

为什么数组是非线性结构?
数组是有序的元素序列(√)
但其元素并非只能是 基本数据类型,还能是结构、枚举、类。因此,数组不属于线性结构

2. 线性表

2.1 线性表:相同特征 元素 的有限序列(有序、无序 均可)

其长度为 元素个数n,n ≥ 0,n = 0 时 为空表

3. 线性表存储结构

顺序存储 - 顺序表:连续的存储空间
链式存储 - 链表

3.1 顺序表和链表的比较:

空间 和 时间的比较

(1)空间

1.1 存储空间分配
顺序表:一次性分配连续的存储空间
链表:存储空间多次分配
1.2 存储密度 = 节点值域所占存储量 / 节点结构所占存储量:
顺序表:= 1
链表: <1

(2)时间

1.1 存取方式:
顺序表:一般是随机存取,也可顺序存取(极少)
链表:顺序存取
1.2 插入、删除元素
顺序表:平均需要移动一半的元素,复杂度为O(n)
链表:不需要移动元素,仅修改指针就行

4. c/c++代码定义

4.1 顺序表

简约版:当数组为顺序表

int main()
{
	int data[maxsize];
	int length;
}

正式版:

typedef struct
{
	int data[maxsize]; //数组 
	int length;        //数组长度 
}sqlist;

4.2 单链表

typedef struct LNode
{
	int data;           //结点数据域 
	struct LNode *next; //指向后继结点的指针 
}*link,LNode;

LNode * = link

4.3 双链表

typedef struct DLNode
{
	int data;
	struct DLNode *prior; //指向前继的指针 
	struct DLNode *next;  //指向后继的指针 
}DLNode;

4.4 分配链表空间

LNode *a = (LNode*)malloc(sizeof(LNode));
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1403034144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值