一.线性表
1.线性表的逻辑关系
线性逻辑结构,也称为线性表,线性表中的所有元素之间满足一对一的线性逻辑关系,具体:
线性表中有且只有一个起始元素,其没有直接前驱,有且只有一个直接后继
线性表中有且只有一个末尾元素,其没有直接后继,有且只有一个直接前驱
线性表中的中间元素有且只有一个直接前驱和直接后继
2.线性表的定义
数据结构的定义包含两个部分:数据元素的集合D,数据元素之间的关系集合R
线性表L是包含若干元素的一个线性序列,线性表可以用二元组描述
L = (D,R)
表长n = 0时,L为空表,记为;关系符<ai,ai+1>在这里成为有序对,表示任意相邻两个元素之间的一种先后次序关系,当n<=1时,关系集R为空集。
3.线性表的存储结构
1.顺序存储结构
指的是在内存中开辟连续存储空间,并将线性表中的元素按照存储位置序号连续存储。此时构成的线性表成为顺序表
2.链式存储结构
指的是采用非连续存储空间存储线性表的所有数据元素,其中每个数据元素都需要存储当前元素的数据内容和后继数据元素的存储空间地址。可以通过数据元素存储空间的地址表示数据元素的逻辑关系。此时所构成的线性表成为链表。
二.顺序表
所谓的顺序指的是线性逻辑结构的顺序存储。
构建顺序表的数据类型
//对数据类型抽象的定义:需要存储数据元素的各个字段数据类型抽象并封装为整体
typedef struct Stu{
int id;
char name[32];
float score;
} data_t;//改抽象数据类型名
typedef struct s{//定义顺序表存储空间
data_t data[Num];//使用数组空间定义
int last;//存储最后一个元素存储空间序号,默认为顺序表从起始元素开始存储*/
} s_t;
创建顺序表
s_t *CreateSqList(void);
{
s_t *list;
//动态开辟顺序表存储空间(生命周期由使用者决定)
list = malloc(sizeof(s_t));
if(list == Null)
return Null;
memset(list, 0, sizeof(s_t));//初始化存储空间
list->last = -1;//所创建的顺序为空表,起始序号0的前一个位置,也就是-1
return list;
}