数据结构
1.线性表
定义:使用指针将地址链接起来,但是在内存区的物理地址并不一定是连续的。
遍历:必须从头开始走到我们需要的地方;
2.顺序表
定义:在内存区内定义一块连续的内存,通过数组的方式来存取,在地址上是连续的。
遍历:顺序访问,可以随机存取;
3.链表
*单链表
typedef struct Node
{
类型 类型名;
}LNode;
当然,类型可以int ,double,char,也可以是另一个结构,甚至是结构本身
typedef struct Node
{
类型 类型名
如: LNode date;
ElemType *next;
} ElemType;//想要定义的结构名
1.表前插入法
*生成新的结点,需要使用malloc,分配动态内存;
*每次都在表头(head空表)后面加入新的结点;
*会逆顺序输入;
特点:可以逆序输入一个链表信息;或者将一个链表改为逆序;
- 表后插入法
*每次在表尾后面插入一个新的结点;
*每次设置一个尾指针r,总是指向表中最后一个结点;
*静态链表
*循环链表
*双向链表
4.顺序表与链表的比较
* 存储分配的方式
顺序表的存储空间是静态分配的
链表的存储空间是动态分配的
* 存储密度 = 结点数据本身所占的存储量/结点结构所占的存储总量
顺序表的存储密度 = 1
链表的存储密度 <= 1
* 基于时间的比较(时间复杂度)
*存取方式
顺序表可以随机存取,也可以顺序存取
链表只能顺序存取
* 插入/删除时移动元素个数
顺序表平均需要移动一半元素
链表不需要移动元素,只需要修改指针
若插入/删除仅发生在表的两端,宜采用带尾指针的循环链表