一、线性表的定义及特点
1)线性表(list)定义:包含若干个具有相同数据特征的数据元素构成的线性序列。
线性表L可以用二元组形式描述:L=(D,R),其中D为数据集合(data),R为关系集合(relation)。
2)线性表的特点:在线性表的数据集合D中,除第一个元素外,每一个元素有且只有一个直接前驱元素,除了最后一个元素外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。
例,设有一个顺序表L={1,2,3,4,5,6},则它的关系如图所示
使用L=(D,R) 表示,则D = {1,2,3,4,5,6}(n=6)
R = {<1,2><2,3><3,4><4,5><5,6>}
二、线性表的顺序存储结构
1、线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种存储结构的线性表称为顺序表。
2、顺序存储的特点:逻辑上相邻的两个元素,在存储位置上也是相邻的。
顺序存储的不足:插入和删除操作的时间复杂度大
特点:逻辑上相邻的两个数据元素,其物理位置也是相邻的。
3、顺序表的存储结构
在c语言当中,可以借助一维数组来描述顺序表L:
#define maxsize 100//顺序表的最大长度typedef int datatype;//datatype的类型根据实际情况而定,这里假定为int
typedef struct
{datatype data[maxsize];int last;
}sqlist,*sqlink;
4、创建一个空的顺序表L:
sqlink list_create()
{sqlink L;if((L = malloc(sizeof(sqlist))) == NULL) {printf("malloc failed\n");return L;}//初始化顺序表memset(L,0,sizeof(sqlist));//引用memset函数,要引用"stdlib.h"头文件L->last = -1;return L;
}
5、清空顺序表
//ret 0-清除成功 -1-清除失败
int list_clear(sqlink L) {if(L == NULL)return -1;memset(L,0,sizeof(sqlist));L->last = -1;return 0;
}
6、查找数据元素位置
int list_locate(sqlink L)
{int list_locate(sqlink L, data_t value){int i;for(i = 0;i <= L->last;i++) {if(L->data[i] == value)return i;}return -1;
}
7、判断顺序表是否为空
8、求线性表长度