线性表-顺序表

351 阅读2分钟
  • 线性表和线性结构的特点

    • 存在唯⼀一的⼀一个被称作”第⼀一个”的数据元素;
    • 存在唯⼀一的⼀一个被称作”最后⼀一个"的数据元素
    • 除了了第⼀一个之外,结构中的每个数据元素均有⼀一个前驱
    • 除了了最后⼀一个之外,结构中的每个数据元素都有⼀一个后继
  • 顺序表定义

    顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。

  • 顺序表初始化

    不同于链式存储结构,顺序存储结构需要在初始化的时候就创建一段地址连续的存储单元用于存放数据
#define MAX 10
#define OK 1
#define ERROR 0

typedef int Status;
typedef int ElemType;

typedef struct {
    ElemType *data;
    int length;
} Sqlist;

//初始化
Status initList(Sqlist *L){
    //在创建的时候就申请一个连续的存储空间
    L->data = malloc(sizeof(ElemType) * MAX);
    if(L->data == NULL) return ERROR;
    L->length = 0;
    return OK;
}
  • 顺序表插入

    1. 将插入位置后面的元素全部往后移动一个位置(空出需要插入的位置)
    2. 将待插入的值赋值给待插入位置
    3. 长度加一
//插入
//1.将插入位置后面的元素全部往后移动一个位置(空出需要插入的位置)
//2.将待插入的值赋值给待插入位置
//3.长度加一
Status insert(Sqlist *L, int place, ElemType num){
    if(place < 1 || place > L->length+1) return ERROR;
    if(L->length >= MAX) return ERROR;
    if(place <= L->length){
        for(int i = L->length-1; i >= place-1; i --){
            L->data[i+1] = L->data[i];
        }
    }
    L->data[place-1] = num;
    ++L->length;
    return OK;
}

  • 顺序表删除

    1. 将删除位置后的元素全部向前移动一个位置
    2. 长度减一
//删除
//1.将删除位置后的元素全部向前移动一个位置
//2.长度减1
Status delete(Sqlist *L,int place){
    if(L->length <= 0) return ERROR;
    if(place < 1 || place > L->length) return ERROR;
    for(int i = place; i < L->length; i++){
        L->data[i - 1] = L->data[i];
    }
    L->length--;
    return OK;
}
  • 顺序表取值

//取值
Status getElem(Sqlist L,int place,ElemType * result){
    if(place > L.length || place < 1) return ERROR;
    *result = L.data[place-1];
    return OK;
}
  • 顺序表清空

只需要将顺序表的长度置0就好

//清空
Status clearList(Sqlist *L){
    L->length = 0;
    return OK;
}