目录
1.线性表基础知识
1.线性表是什么?
线性表:零个或多个数据元素的有限序列。
2.线性表的顺序存储结构
指的是用一段地址连续的存储单元依次存储线性表的数据元素。
代码:
#define MAXSIZE 20 //存储空间的初始分配量
/*define在此处的作用是将MAXSIZE与20联结起来,联结起来之后,编译器在预处理程序时,会将程序中所有的MAXSIZE用20来替换 */
typedef int ElemType //typedef的作用是定义一个类型的别名
//在此处,typedef的作用是定义int的别名为ElemType
//那么 int data;等价于 ElemType data;
typedef struct{
Elemtype data[MAXSIZE]; //数组,存储数据元素
int length; //线性表当前长度
}SqList;
2.线性表的抽象数据类型
Operation
InitList(*L):初始化操作,建立一个空的线性表L;
ListEmpty(L):若线性表为空,返回true,否则返回false;
ClearList(*L):将线性表清空;
GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e;
LocateElem(L,e):将线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号;否则,返回0,代表失败;
ListInsert(*L,i,e):在线性表L中的第i个位置插入新元素e,线性表长度加1;
ListDelete(*I,i,*e):删除线性表L中第i个元素位置,并用e返回其值,线性表长度减1;
ListLength(L):返回线性表L的元素个数;
endADT
3.顺序存储结构的插入与删除
1.获得元素操作
代码:
#define OK 1
#define ERROR 0
typedef int Status; //Status是函数的类型,其值是函数结果状态代码,如OK,ERROR等
/* 初始条件:顺序线性表L已存在,1<=i<=ListLength(L) */
// 操作结果:用e返回L中第i个数据元素的值,i是指位置,第1个位置的数组是从0开始
Status GetElem(SqList L, int i, ElemType *e) /* ElemType的含义就是“数据元素的类型”,代表
所有可能的数据类型,简单明了的概括了整体。 在算法中,除了特别的说明外,规定了ElenType默认是int型 */
{
if(L.length==0 || i<1 || i>L.length) //线性表为空或者想要获取元素的位置不合法
return ERROR;
*e=L.data[i-1]; //下标从0开始,第i个元素,下标为i-1
return OK;
}
2.插入操作
//初始条件:线性表已存在,1<=i<=ListLength(L)
//操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1
Status ListInsert(Sqlist *L,int i,ElemType e)
{
int k;
if(L->length==MAXSIZE) //代表线性表容量已满
return ERROR;
if(i<1 || i>L->length+1) //当i比第一位位置小或者比最后一位位置后一位置还要大
return ERROR;
if(i<=L->length) //可以等于是因为可以插入在线性表的最后一位
{
for(K=L->length-1;k>=i;k--) //要插入的第i个元素下标为i-1
//将要插入的元素位置后的元素全部向后移一位
}
L->data[i-1]=e; //新元素插入
L->length++;
return OK;
}
3.删除操作
代码:
//初始条件:顺序线性表L已存在,且1<=i<=ListLength(L)
//操作结果:删除L的第i个数据元素,并用e返回其值,L的长度需减1
Status ListDelete(SqList *L, int i,ElemType *e)
{
int k;
if(L->length==0) //线性表为空
return ERROR;
if(i<1 || i>L->length) //删除的位置不合法
return ERROR;
*e=L->data[i-1];
if(i<L->length) //如果删除的位置不是最后一个
{
for(k=i;k<L->length;k++)
L->data[k-1]=L->data[k]; //被删除元素的后继元素位置全部前移
}
L->lenght--;
return OK;
}