线性表的顺序存储

线性表的顺序存储

//线性表的顺序存储结构代码
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
    ElemType data[MAXSIZE];
    int length;
}SqlList;

//获得元素操作
#define OK 1
#define ERROR 0
#define TRUE 1
#define FLASE 0
typedef 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;

}

//删除元素
//删除算法思路:如果删除元素位置不合理,抛出异常;取出元素;从取出元素位置开始一直遍历到最后一个元素,所有元素位置前移一位,表长减1

Status 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. 造成存储空间的碎片

猜你喜欢

转载自blog.csdn.net/m0_37591671/article/details/78368959