您的位置:首页 > 其它

线性表的顺序存储结构

2016-07-26 15:00 411 查看
//线性表的顺序存储的结构代码

#define MAXSIZE 20      /*存储空间初始分配量*/

typedef int ElemType;     /*ElemType 类型根据实际情况而定,这里假设为int,也可以为float,double等等*/

typedef struct

{

    ElemType date[MASIZE];    /*数组存储数据元素,最大值为MAXSIZE*/

    int length;               /*线性表当前长度*/

}SqList;

//typedef 类型定义符    相当于取别名

//地址计算方法  LOC(ai)=LOC(a1)+(i-1)*c

//===============================================================

//获得元素操作

#define OK 1

#define ERROR 0

#define TRUE 1

#define FAlSE 0

typedef int Status;

/*Status 是函数的类型,其值是函数结果状态代码 如OK等*/

/*初始条件:顺序线性表已经存在,1<=i<=ListLength(L)*/

/*操作结果:用e返回L中第i个数据元素的值*/

Status GetElem(SqList L,int i,ElemType *e)

{

     if(L.length==0||i<1||i>L.length)//空表或得到的元素非法

     return ERROR;

     *e=L.date[i-1];//注意线性表从1开始,而数组从0开始

     return OK;

}

//=================================================================

//=================================================================

//插入操作

/*初始条件:顺序线性表已经存在,1<=i<=ListLength(L)*/

/*操作结果:在L中第i位置之前插入新的数据元素e,L的长度加1*/

Status ListInsert(SqList *L,int i,ElemTyped e)

{

    int k;

    if(L->Length==MAXSIZE)          /*顺序线性表已经满*/

        return ERROR;

    if(i<1||i>L->length+1)/*当i不在范围时 此处为length+1是因为你要插入一个元素length会加1的 你可能插入的位置为length+1处即插入到最后*/

        return ERROR;

    if(i<=L->length) /*若插入位置不在表尾*/

    {

        for(k=L->length-1;k>=i-1;k--)/*还是一样顺序线性表从1开始 数组从0开始*/

        {

            L->date[k+1]=L->date[k]; /*将要插入位置后面的元素往后移动一位*/

        }

    }

    L->date[i-1]=e;/*插入新元素*/

    L->length++;

    return OK;

}

//==================================================================

//==================================================================

//删除操作

/*初始条件:顺序线性表已经存在,1<=i<=ListLength(L)*/

/*操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1*/

Status ListDelete(SqList *L,int i,ElemType *e)

{

    int k;

    if(L->length==0)    /*线性表为空*/

        return ERROE;

    if(i<1||i>Length)   /*删除位置不正确*/

        return ERROR;

    *e=L->date[i-1];   /*e返回被删除的元素*/

    if(i<L->length)    /*如果删除的不是最后位置*/

    {

        for(k=i;k<L->length;k++)  /*还是一样顺序线性表从1开始 数组从0开始*/

        {

            L->date[k-1]=L->date[k];/*将要删除位置后面的元素往前移动一位*/

        }

    }

    L->length--;

    return OK;

}

//====================================================================

线性表顺序存储结构的优缺点

》优点

1,无需为表示表中元素之间的逻辑关系而增加额外的存储空间

2,可以快速的存取表中任一位置的元素

》缺点

1,插入和删除操作需要移动大量元素

2,当线性表长度变化较大时,难以确定存储空间的容量

3,造成存储空间的“碎片”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: