一、线性表定义
线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,记作(a1,a2,a3…an)
其中n为表长,当n=0时称为空表
ai-1称为ai的前继节点,ai+1称为ai的后继节点,线性表的第一个节点没有前继节点,最后一个节点没有后继节点
线性表的特点:
- 有序性。线性表中相邻的数据元素之间存在这序偶关系
- 有穷性。线性表由有限个数据元素组成
- 同一性。线性表由相同数据类型组成,每个ai必须属于同一种数据类型
线性表的基本操作
二、创建一个线性表
基本操作:
(1) InitList(&L)。
操作结果:构造-个空的线性表 L。
2) DestroyList(&L)。
初始条件:线性表L已存在。
操作结果:销毁线性表L
(3) ListEmpty(&L)。
初始条件:线性表L已存在。
操作结果:若L为空表,则返回TRUE,否则返回FALSE.
(4) ListLength(&L)。
初始条件:线性表L已存在。
操作结果:返回L中的元素个数。
(5) GetElem(L,e, i)。
初始条件:线性表L已存在,1<=i<=ListLength(L)。
操作结果:用e返回L中第i个数据元素的值。
(6) LocateElem(L, e)。
初始条件:线性表L已存在。
操作结果:返回L中第1个与e相等的元素的位置序号。若此元素不存在,则返回值为0。
(7) ClearList(&L)。
初始条件:线性表L已存在。
操作结果:将L重置为空表。
(8) ListInsert(&L, i, e)。
初始条件:线性表L已存在,1≤i≤ListLength(L) +1。
操作结果:在L的第i个数据元素之前插入新的元素e, L的长度增1.
(9) ListDelete(&L, i, &e)。
初始条件:线性表L已存在且非空,1≤i<ListLength(L)。
操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1。
//构造一个空的线性表
int InitList(seqList *L)
{
L->data=(Datatype *)malloc(sizeof(Datatype)*LIST_SIZE);
//malloc:这个函数原意是,在内存开辟一段地址,这段地址的首地址存在返回的那个指针变量里
if(L->data==null)//判断线性表是否为空
return -1;
L->length=0;//清空线性表
L->listsize=LIST_SIZE;//定义表的长度
printf("initial finish\n");
return 0;
}
三、线性表的顺序存储及实现
用c语言定义线性表的顺序结构存储结构
#define MAXSIZE 100
typedef struct{
ElemType data[MAXSIZE];
int length; //length+1为表长
}SeqList;
//ElemType为了描述的统一而自定义的,属于抽象数据类型
//表名为SeqList
SeqList *L;//定义一个指针L来访问顺序表
//例如要访问一个i元素
L->data[i-1]//访问的是ai,L->length+1为表长
初始化一个顺序表\
SeqList *init_Seqlist(){
SeqList *L;
L=new SeqList;//申请顺序表的存储空间
if(L){
L->length=-1;
return L;//申请成功返回顺序表的存储地址
}
else return-1;//不成功返回-1
}
初始化线性表即定义一个空表,先动态分配存储空间,然后把表的length指向-1,length+1=0也就是空表长