线性表是数据结构的一种,线性表中数据元素之间的关系是一对一的关系。除了第一个元素和最后一个元素之外,每一个元素有且只有一个前驱和一个后继,第一个元素没有前驱,最后一个元素没有后继。
线性表可以分为顺序存储和链式存储
- 顺序存储:顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像。
- 链式存储:用一组任意的存储单元存储线性表中的数据元素,称为线性表的链式存储结构。它的存储单元可以是连续的,也可以是不连续的。
线性表的基本操作
InitList(*L): //初始化操作,建立一个空的线性表L。
ListEmpty(L)://判断线性表是否为空表,若线性表为空,则返回ture,否则返回false。
ClearList(*L)://清空线性表。
GetElem(L,i,*e)://将线性表的第i个元素值返回给e。
LocateElem(L,e)://在线性表L中查找与给定值e相关的元素,如果查找成功,返回该元素表中序号表示成功;否则,返回0表示失败。
ListInsert(*L,i,e)://在线性表L中第i个元素位置插入新元素e。
ListDelete(*L,i,*e)://删除线性表L中第i个位置元素,并用e返回其值。
//数组data[]:线性表存储空间的存储位置
线性表的存储结构
获取线性表L的长度
//静态链表中使用
#define Max 500 //定义数组的长度
int ListLength(StaticLinkList L )
{
int j = 0;
int i = L[MAX-1].cur; // cur指游标
while(i)
{
i = L[i].cor;
j++;
}
return j;
}
- 顺序存储结构
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
typedef int status1; //status 表示状态 Status i;类似于 int i;
//顺序存储初始化
status1 GetElem(SqList L, int i, ElemType *e)
{
if( L.length==0 || i<1 || i>L.length ) //线性表为空 或 i不存在
{
return ERROR;
}
*e = L.data[i - 1]; //将线性表L的第i个元素赋值给e
return OK;
}
- 链式存储结构
#define OK 1
#define TRUE 1
#