线性表的顺序存储结构
线性表一般有两种存储方式,一种是顺序映像,这种存储方式的表被称为顺序表。另一种是链式映像,这种存储方式被称为链式表。
一 顺序表 顺序表的存储结构使用一组地址连续的存储单元依次存储线性表中的各个元素,假设每个数据元素占d个存储单元,第一个数据元素的存储地址为Loc(a0)
那么第i个数据元素的存储单元是Loc(ai)=Loc(a0)+d*i
1,在C语言中的数组就是一片连续的存储空间,所以可以借助c语言中的数组来表示线性表的顺序存储结构。
即:
#define maxsize 1024
typedef struct
{
dataType data[maxsize]; //表的存储空间
int last; //当前表尾指针
} sqllist,*sqllink;
sqllink L;
L=(sqllink)malloc(sizeof(sqllist));
(1) 插入
int ListInsert(sqllink L, int i, datatype e)
{
int j;
if (L->last > maxsize - 1)
{
printf("Not enough memory");
return 0;
}
else if (i < 0||i>L->last+1)
{
printf("wrong parameter");
return 0;
}
else
{
for (j = L->data[L->last + 1]; j > i; j--)
{
L->data[j] = L->data[j - 1];
}
L->data[i] = e;
}
}
(2)删除
int ListDel(sqllink L, int i)
{
if (i < 0 || i>L->last)
{
return 0;
}
int j;
for (j = i; j < L->last; j++)
{
L->data[j] = L->data[j + 1];
}
L->last--;
return 1;
}
(3)定位
int LocateItem(sqllink L, datatype e)
{
int i = 0;
for (i; i <= L->last; i++)
{
if (L->data[i] == e)
{
return i;
}
}
return 0;
}
2,顺序存储结构的基本特点
优点:
(1)表的逻辑结构与存储结构的相似性使得理解和编辑算法非常直接
(2)存储密度高,定义存储密度D=(数据结构中数据元素所占的存储空间)/数据结构所占的存储空间)
缺点:
(1)顺序存储需要连续的地址空间,当系统的资源紧张时,数据元素比较多时,需求不一定能够得到满足
(2)数据元素的最大个数需要预先确定
(3)表中的数据元素连续分布,导致删除或者插入都需要移动大量的数据,会影响系统的速度
浙公网安备 33010602011771号