线性表的顺序存储

来源:互联网 发布:小说写作软件 编辑:程序博客网 时间:2024/06/03 18:41

线性表的顺序存储

//线性表的顺序存储结构代码#define MAXSIZE 20typedef int ElemType;typedef struct{    ElemType data[MAXSIZE];    int length;}SqlList;//获得元素操作#define OK 1#define ERROR 0#define TRUE 1#define FLASE 0typedef int Status;Status GetElem(SqlList L,int i,ElemType *e){    if (0 == L.length || i<1 || i>L.length)        return ERROR;    *e = L.data[i-1];    return OK;}//插入元素://插入算法的思路:如果插入的位置不合理,抛出异常;如果线性表的长度大于等于数组长度,则抛出异常或者动态增加数组长度;如果正常插入,则从第i个元素开始遍历,一直到最后一个,将他们的位置都向后移动一个;将要插入的元素放入到i位置,表长加1//初始条件 1<=i<=L;Status InsertElem(SqlList 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 = i; k < L.length; k++)            L.data[k] = L.data[k-1];    }    L.data[i - 1] = e;    L.length++;    return OK;}//删除元素//删除算法思路:如果删除元素位置不合理,抛出异常;取出元素;从取出元素位置开始一直遍历到最后一个元素,所有元素位置前移一位,表长减1Status DelElem(SqlList L, int i,ElemType *e){    int j;    //线性表为空    if (L.length == 0)        return ERROR;    //删除位置不正确    if (i<1 || i>L.length)        return ERROR;    *e = L.data[i-1];    if (i<=L.length)    {        for (j = i + 1; j <= L.length; j++)        {            L.data[j-2] = L.data[j-1];        }    }    L.length--;    return OK;}

优缺点

优点:

  1. 无需为表示表中数据的关系而增加额外的存储空间
  2. 可以快速的存取表中任意位置的元素

缺点:

  1. 插入和删除元素需要移动大量的数据
  2. 当线性表的长度变化较大时,难以确定存储空间的容量
  3. 造成存储空间的碎片