一、定义
1、线性表:零个元素或者多个元素组成的有限序列
2、定义一个抽象数据类型:
ADT 抽象数据类型名
DATA
元素之间逻辑关系的定义
Operation
操作
EndData
例如:我定一个抽象数据类型Point来描述游戏中人物的空间位置(x,y,z)。简单来说就是把基本数据类型(int、double…)捆绑起来。
二、操作
1、线性表置空
2、删除数据
3、插入数据
4、根据位序得到数据
三、线性表的顺序存储结构
1、地址连续的单元,事实上就是对数组的封装。顺序结构封装需要三个属性①存储空间起始位置 :数组data(就像是电影院的座位)②线性表最大存储容量:数组的长度Maxsize(就像买的maxsize张电影票)③线性表的当前长度:length(来了length个人)
注意:数组的长度是存放线性表的存储空间总长度,初始化后一般不变。线性表的当前长度是线性表中元素的个数,会发生改变。
2、地址计算方法。线性表从1开始计数,数组从0开始计数。一般跟电脑交流的时候就是从0开始。排兵布阵的时候从开始
loc()获取存储位置的函数。,c表示ElemType占用的c个字节,那么线性表第ai+1和ai之间的内存关系:
Loc(ai+1)=Loc(ai)+c
对于第i个元素的内存位置可以根据a1的内存位置推出来
Loc(ai)=Loc(a1)+(i-1)*c
3、获取元素操作GetElem:将线性表的第i个元素返回,对于数组来说返回下标为i-1的数据
typedef int Status;
Status GetElem(sqList L,int i,ElemType *e)//i表示线性表L的第i个元素
{
if(L.length==0||i<1||i>L.length
{
return ERROR;
}
*e=L.data(i-1);
return OK;
}
4、插入操作InsertElem:
Status ListInsert(sqList *L,int i,ElemType e)
{
int k;
if(L->length==MAXSZIE)
{
return ERROR;
}
if(i<