顺序表是简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以 快速定位第几个元素,中间不允许有空值,插入、删除时需要移动大量元素。
顺序表的三个要素:
用 elems 记录存储位置的基地址(数组的名字就是数组的起始地址)
分配一段连续的存储空间 size
用 length 记录实际的元素个数,即顺序表的长度
顺序表的定义
struct SqList{
int*elems;//存放对象的指针
int length;//当前储存的数据数量
int size;//一共可以存储的数据个数
}
顺序表的初始化
bool InitList(SqList&L)
{
L.elems=new int[Max];//开辟一个大小为max的空间
if(!L.elems)//如果指向空间的指针为空,就返回假
return false;
L.size=Max;//将顺序表的总大小初始化为max
L.length=0;//将顺序表的当前元素存储元素初始化为0
return true;
}
顺序表的插入(按照顺序插入)
bool insertList(SqList&L,int e)
{
if(L.length>=L.size)//如果当前存储数已经等于最大存存储数表示已经存满了,返回flase
return flase;
L.elems[L.length++]=e;//直接将要存放的值放入当前的下标中,并将下标加一
return true;
}
顺序表位置插入
bool insertList(SqList&L,int e,int dex)
{
if(L.length>=L.size)//如果当前存储数已经等于最大存存储数表示已经存满了,返回flase
return flase;
for(int i=L.length;i>=dex;i--)//将要插入的当前位置的索引向后移动
L.elems[i]=L.elems[i-1];
L.elems[dex-1]=e;//将数据插入指定的索引位置
L.length++;//更新顺序表中存储的数据元素个数
return true;
}
顺序表删除元素
bool DeleteList(SqList&L)
{
if(L.length>0)
{
L.length--;
return true
}
else
return flase;
}
顺序表删除指定元素
bool DeleteList(SqList&L,int dex)
{
if(L.length<0||L.length<dex)//判断传入的索引的合法性,和顺序表是否为空
return flase;
for(int i=dex;i<L.length;i++)//将数据从索引开始一次向前移动
L.elems[i-1]=L,elems[i]
L.length--;//更新当前顺序表中的元素个数。
return true;
}
顺序表的销毁
void CloceList(SqList&L)
{
if(L.elems)//判断指针是否为空,如果不为空这删除New空间
delete[]L.elsems;
L.size=L.length=0;//将顺序表中的总元素个数和当前元素个数置零
}