just do it and waiting

(一)数据结构:顺序存储线性表

2019-12-16


顾名思义,顺序存储的线性表就是存储方式是在内存中安装先后顺序依次存储、逻辑结构为线性结构的一种数据结构。 其存储方式如下图所示: listlinear 各个储存单元都是顺序排放的。为了顺序存储数据,需要为一个顺序存储线性表指定长度。 下面是顺序存储的线性表结构代码

#define LIST_LENGTH_MAX 20
struct listlinear_t {
    int data[LIST_LENGTH_MAX];
    int length;
}listlinear;

为了指示对线性表的操作后的返回状态,可以作如下定义

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

线性表初始化

void InitList(listlinear *list)
{
    for(int i=0; i<LIST_LENGTH_MAX; i++)
        list->data[i] = 0;
    list->length = 0;
}

查询数据

查询线性表中的第loc个数据,由于顺序存储的线性表按照先后顺序存储在存储单元内,因此支持随机查询数据, 代码的实现如下

status GetElim(listlinear list, int loc, int *e){
    if(list.length == 0 || loc > list.length)
        return ERROR;
    *e = list.data[loc];
    return OK;
}

插入数据

顺序存储的方式使线性表在需要插入数据时要重新排放存储单元的数据,但要在第loc处插入数据时,loc后的数据需要在当前的存储单元后移个位置,如下图,在data[2]处插入数据,则原来data[2]处的数据需要向后存放致data[3]处,后面的数据依次后移。 listinsert 代码实现如下:

status InsertList(listlinear *list, int loc, int e){
    if(loc > list->length) return ERROR;
    if(list->length == 0){
        list->data[0] = e;
        list->length++;
        return OK;
    }
    for(int i=list->length; i>loc; i--)
        list->data[i] = list->data[i-1];
    list->date[loc] = e;
    list->length++;
    return OK;
}

移除数据

与插入数据相反,移除数据时,移除位置处之后的数据需要往前移动一个存储单元 listremove 代码实现如下

status RemoveList(listlinear *list, int loc){
    if(list->length == 0 || loc > list->length) return ERROR;
    if(list->length == 1)
    {
        list->data[0] = 0;
        list->length--;
        return OK;
    }
    for(int i=loc; i<list->length; i++)
        list->data[i] = list->data[i+1];
    list->data[list->length-1] = 0;
    list->length--;
    return OK;
}

完整代码