数据结构---线性表的顺序存储
线性表的顺序存储结构是指用一段地址连续的存储单元依次存储线性表的存储元素。
一般用一维数组来实现顺序存储结构。
1.顺序存储结构需要三个属性:①数组data②数组最大存储容量maxsize③线性表长度length
结构代码:
#define MaxSize 20
typedef struct list{
int data[ManSize];
int length;
}sqlist;
2. 顺序存储结构的初始化
int InitList(sqlist *L)
{
L = (sqlist*)malloc(sizeof(sqlist));
L->length = 0;
return OK;
}
3.获取第i个元素值
int GetElem(sqlist *L,int i,int *e)
{
if((L->length < i)||(i<1))
return ERROR;
*e = L->data[i-1];
return OK;
}
4.插入元素
int ListInsert(sqlist *L,int i,int 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;k>=i;k--)
L->data[k] = L->[k-1];
}
L->data[i-1] = e;
L->length++;
return OK;
}
5.删除元素
int ListInsert(sqlist *L,int i,int *e)
{
int k;
if(L->length == 0)
return ERROR; //线性表表不为空
if((i<1)||(i>L->length)) //i的位置要合理
return ERROR;
*e = L->data[i-1] //将要删除的元素通过指针返回
for(k=i-1;k<L->length-1;k++)
L->data[k] = L->[k+1];
L->length--;
return OK;
}
2. 线性表顺序存储的优点:
①可以快速读取表中任意位置的元素;
②不必为表示表中数据间的逻辑关系而增加额外的存储空间。
3. 线性表顺序存储的缺点:
①插入删除操作需要移动大量的元素;
②难以确定存储空间的容量;
③造成存储空间的“碎片”。