数据结构——线性表
前言
本节将会学习到线性表的基础知识,以及顺序表和链表的理论知识,具体代码实现以及练习题将在后续博客中学习到。
一、线性表
1.预备知识:
(1)线性表是数据结构的逻辑结构。
(2)线性结构:一个数据集合中的数据元素的有序集(次序)。
①基本路线:序偶 <前驱,后继>
②基本要求:只能存放同类型的数据元素。
③特征: i>有且只有一个元素无前驱,称为首元节点(第一个元素);
ii>有且只有一个元素无后继,称为微元素(最后元素);
iii>除以上两种,其余元素向前都只有一个前驱,向后只有一个后继。
2.定义:满足线性结构的数据集合。
3.类型定义:
(1)图例法
(2)二元组法
4.抽象类型定义(ADT):
二、顺序表
1.定义
逻辑结构:线性表
物理存储结构:存储结构——用连续的地址用来存储元素
①满足线性表的特征
②顺序表要用顺序地址映像——地址可计算,可随机访问
2.顺序存储地址可计算
a
3 | 2 | 5 | 8 | 4 | 7 | 6 | 9 |
---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 7 | 8 |
①a≡&a[0]
②ADD(a[i])=ADD(a[0])+1*sizeof(ElemSN)
「在C语言中不用计算字节数,只需要下标(偏移量)(&a[i] = a+i)」
三、链表
1.定义
逻辑结构:线性表
物理存储结构:链式存储影像——用零散的空间换时间效率
(1)顺序存储——单位连续——地址可计算——CPU
(2)链式存储特点:
①利用内存零散空间——单元不连续
②单元地址必须存储
(3)结果:链表并没有节省空间,只是利用零散空间。
2.术语
(1)结点:存储每个数据元素的存储单元
(2)定义:
typedef struct Node{
int data;
struct Node *next;
}ElemSN,*List;
类型名:struct Node,ElemS N,*List;
struct Node *p;
ElemSN *p;
*List l;
动态单元分配:(ElemSN *)malloc(sizeof(ElemSN));
结点释放:free(p);
(3)结点成员引用:
struct Node S1;
ElemSN S2;
struct Node *p;
S1.data=3;
S2.data=2;
p->data;
p->next;
(4)链表图例
(5)头指针head:用来指向首元节点
特点:
①他的值首元节点的地址
②head没有data和next