一:顺序存储,利用数组来实现顺序存储的.
注:线性表长度是线性表数据元素的个数,所以恒小于或等于数组长度
二:顺序存储结构代码
#define maxsize 20
typedef int ElemType;//
typedef struct //具体typedef用法见博客
{
ElemType data[maxsize];
int length; //线性表当前长度
}SqList;
三:推算线性表的存储位置
LOC(ai+1)=LOC(ai)+c //LOC是获得该位置的函数,c指该变量占的存储单元
==>LOC(ai)=LOC(a1)+(i-1)*c
四:线性表与数组区别
线性表定义从1开始而数组从0开始,所以线性表的i位置就是数组i-1的位置
五:线性表获取元素操作
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status
/*status是函数类型,其值是函数结果状态代码,如ok等*/
i>=1&&i<=ListLength
操作结果:用e返回L中第i个数据元素的值
Status GetElem(SqList L,int i,ElemType *e) //L为结构体变量
{
if(L.length==0||i<1||i>L.length)
return ERROR; //return了之后就退出了
*e=L.data[i-1];
return ok;
}六:顺序存储结构插入操作
思路:1.插入位置是否合理
2.数组和线性表长度问题
3.表长加1
一个元素插入到线性表i位置
操作结构
Status ListInsert(SqList *L,int i,ElemType e)
{
int k;
if(L->length==maxsize)
return ERROR;
if(i<1||i>L->length+1)
return ERROR;
if(i<=L->length)
{
for(k=L->length-1;k>=i-1;k--) //将数组i-1位置之后元素向后移1
L->data[k+1]=L->data[k];
}
L->data[i-1]=e; //插入数据
L->length++; //表长加1
return OK;
}
七.顺序存储结构删除操作
思路:1.删除位置是否合理
2.取出删除数据元素
3.从删除元素位置开始遍历到最后一个元素分别向前移动1个位置
4.表长减1
删除线性表i位置的数据元素
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++) //将数组i-1位置之后元素向前移一个位置
L->data[k-1]=L->data[k];
}
L->length--; //表长减1
return OK;
}
八.线性表顺序存储结构缺点:
1.插入和删除操作需要移动大量元素
2.当线性表长度变化大时,难以确定存储空间的容量(数组大小)
3.造成存储空间的“碎片”
本文详细介绍了线性表的顺序存储方式,包括利用数组实现的顺序存储结构、线性表与数组的区别、获取元素、插入及删除操作的实现代码,并分析了顺序存储结构的局限性。
648

被折叠的 条评论
为什么被折叠?



