线性表的顺序存储结构:在内存中找到一块空间,把一定的内存空间占了,然后把相同数据类型的数据元素依次存放在这块空间中,这也就是顺序表。今天带大家一起来学习顺序表的基本操作:顺序表空、顺序表满、插入元素、删除元素、查找元素。
1.顺序表特点
a)逻辑上相邻的元素在物理位置上也相邻。
b)随机访问效率高,插入和删除操作效率低。
2.顺序表的定义
#defineMAX_SIZE64//线性表最大长度
typedefstruct
{
typedata[MAX_SIZE];//元素数组,type为元素的实际类型
intlength;//元素个数
}SeqList;
注:这里为减少复杂度和更好的理解,使用固定的长度,避免了动态分配。
3.基本数据操作
a)顺序表为空
intListEmpty(SeqList*list)
{return(list-length==0?1:0);}
b)顺序表满
intListFull(SeqList*list)
{return(list-length==MAX_SIZE?1:0);}
c)插入元素
//成功插入返回0,出错返回-1
intListInsert(SeqList*list,inti,typenewData)
{
//有效性检测
if(NULL==list
list-length=MAX_SIZE
i0
i=MAX_SIZE)
{return-1;//error}
//元素后移
for(intj=list-length-1;j=i;j--)
{list-data[j+1]=list-data[j];}
//插入新元素
list-data=newData;
list-length+=1;
return0;
}
d)删除元素
//成功返回0,出错返回-1
intListDelete(SeqList*list,inti)
{
//参数有效性检查
if(NULL==list
list-length==0
i0
ilist-length-1)
{return-1;//error}
//删除元素
for(intj=i;jlist-length-1;j++)
{list-data[j]=list-data[j+1]}
list-length-=1;
return0;
}
e)查找元素
//查找第一个元素key的索引,没找到返回-1
intListFind(SeqList*list,typekey)
{
if(NULL==list)
{return-1;}
for(inti=0;ilist-length;i++)
{
if(list-data==key)
{returni;}
}
return-1;
}
有关数据结构中的顺序表我们今天就讲到这里啦!欢迎继续