线性表的顺序表示【顺序表】

顺序表的优缺点

优点 缺点

1. 可以随机存取(根据表头元素地址和元素序号)表中任意一个元素

2. 存储密度高,每个节点只存储数据元素。

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

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

3. 存储空间分配需要一段连续的存储空间,不够灵活。

顺序表的插入

#include 

#define MaxSize 50
typedef int ElemType;//让顺序表存储其他类型元素时,可以快速完成代码修改
typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

//顺序表的插入,因为L会变,因此要引用
bool ListInsert(SqList &L, int i,ElemType element){
    //判断i是否合法
    if(i < 1 || i > L.length + 1){
        return false;
    }
    //判断存储空间是否满了,不能插入
    if(L.length == MaxSize){
        return false;
    }
    for(int j = L.length; j >= i; j--){
        L.data[j] = L.data[j - 1];
    }
    L.data[i - 1] = element;
    L.length++;
    return true;
};

void printList(SqList L){
    for (int i = 0; i < L.length; i++) {
        printf("%3d",L.data[i]);
    }
    printf("\n");
}
int main()
{
    SqList  L;
    bool ret;//ret用来装函数的返回值
    L.data[0] = 1;
    L.data[1] = 2;
    L.data[2] = 3;
    L.length = 3;
    ret = ListInsert(L,2,60);
    if(ret){
        printf("insert sqlist success\n");
        printList(L);
    }else{
        printf("insert sqlist failed\n");
    }
    return 0;
}

结果:

线性表的顺序表示【顺序表】_第1张图片

顺序表的删除

#include 

#define MaxSize 50
typedef int ElemType;//让顺序表存储其他类型元素时,可以快速完成代码修改
typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

//删除顺序表
bool ListDelete(SqList &L,int i,ElemType &e){
    //判断删除元素的位置是否合法
    if(i < 1 || i > L.length){
        return false;
    }
    e = L.data[i-1];//保存要删除元素的值
    for (int j = i; j < L.length; j++) {
        L.data[j-1] = L.data[j];
    }
    L.length--;
    return true;
}


void printList(SqList L){
    for (int i = 0; i < L.length; i++) {
        printf("%3d",L.data[i]);
    }
    printf("\n");
}

int main()
{
    SqList  L;
    ElemType del;
    bool ret;//ret用来装函数的返回值
    L.data[0] = 1;
    L.data[1] = 2;
    L.data[2] = 3;
    L.length = 3;
    ret = ListDelete(L,1,del);
    if(ret){
        printf("delete sqlist success\n");
        printf("del element = %d\n",del);
        printList(L);
    }else{
        printf("delete sqlist failed\n");
    }
    return 0;
}

结果:

线性表的顺序表示【顺序表】_第2张图片

顺序表的查询

#include 

#define MaxSize 50
typedef int ElemType;//让顺序表存储其他类型元素时,可以快速完成代码修改
typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

int LocalElement(SqList L,ElemType element){
    for (int i = 0; i < L.length; i++) {
        if(element == L.data[i]){
            return i+1;//因为i是数组的下标,+1以后才是顺序表的下标
        }
    }
    return 0;//循环结束没找到
}

int main()
{
    SqList  L;
    L.data[0] = 1;
    L.data[1] = 2;
    L.data[2] = 3;
    L.length = 3;
    int pos = LocalElement(L,1);
    if(pos){
        printf("find this element\n");
    }else{
        printf("don't find this element\n");
    }
    return 0;
}

结果:

线性表的顺序表示【顺序表】_第3张图片

习题

线性表的顺序表示【顺序表】_第4张图片

答案:A

        本题易误选B。注意,存取方式是指读写方式。顺序表是一种支持随机存取的存储结构,根 据起始地址加上元素的序号,可以很方便地访问任意一个元素,这就是随机存取的概念。

答案:D

线性表的顺序表示【顺序表】_第5张图片

答案:C

线性表的顺序表示【顺序表】_第6张图片

答案:C

答案:C

        线性表元素的序号是从1开始,而在第n+1个位置插入相当于在表尾追加。

你可能感兴趣的:(数据结构,算法)