笔记目录
1.1~1.4-数据结构基础概念和时间复杂度
2.1~2.8-顺序表、链表
6.4 -图的储存结构与创建
线性表
零个或多个数据元素的有限序列
数据元素:数据的基本单位-如:一个人
顺序表和链表是线性表的两种存储形式。
一、顺序存储——顺序表
#define MAXSIZE
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE]; // 用数组储存数据元素
int length;// 线性表当前长度
}SeqList;
物理地址连续存储线性表数据元素。逻辑连续。
1、地址计算
size是存储单元大小
loc(i) = loc(1) + (i-1)size
吃一个栗子:第 1 个数据元素地址是99,基本存储单元大小3,第34个数据元素的地址是:99+(34-1)x3=198
地址是存储单元的位置,一个存储单元对应一个地址
有关计算机如何存储数据:《计算机科学速成课》https://www.bilibili.com/video/BV1EW411u7th?p=6
2、插入
怎么做:
插入到位置 i
原来i位置及i以后的元素整体后移。
插入到原来在i的数据元素的前面。
2.1 插入需平均移动元素
长度为n的线性表中插入一个元素 保存原顺序不变 所需要移动元素的平均次数(个数)n/2
吃一个大栗子:长度为127的线性表中插入一个元素 保存原顺序不变 所需要移动元素的平均次数(个数)63.5!
3、删除
看插入;
3.1删除需平均移动元素
长度为n的线性表中删除一个元素 保存原顺序不变 所需要移动元素的平均次数(个数)(n-1)/2
二、链式存储——链表
1、单链表
typedef struct Node{
ElemType data;
struct Node *next;//下一元素
}Node;
p是指向当前ai节点指针;
p->next 也是指针!指向ai+1
2、循环链表
3、双向链表
三、二者比较
项目 | 顺序表 | 链表 |
---|---|---|
存储密度 | 1 | <1 |
读(存)取 | O(1) | O(n) |
增删 | O(n) | O(1) |