顺序表的插入操作

目录

什么是顺序表,它的定义和特点有哪些。

如何实现顺序表的插入操作。

        定义一个顺序表

        定义insert函数

                判断顺序表是否已满

                插入位置的有效性

                开始插入操作

        主函数实现功能举例:

                为SequenceList L赋值

                打印顺序表

                调用insert函数传参实现插入操作

                打印插入后的顺序表

完整代码如下:

补充注意事项

错误写法:



什么是顺序表,它的定义和特点有哪些。

顺序表是一种线性数据结构,它由一组有序的数据元素组成。顺序表中的数据元素是按照一定顺序存储的,并且可以通过数据元素的位置来访问它们。

顺序表有以下几个特点:

  1. 顺序表的查找效率高,可以通过数组下标直接访问顺序表中的任意一个数据元素。

  2. 顺序表的插入和删除效率较低,因为这些操作需要移动大量的数据元素。

  3. 顺序表的空间利用率较低,因为顺序表的大小是固定的,如果空间不够用,就需要重新分配一块新的内存空间,将数据复制过去,这样就会浪费一些空间。

  4. 顺序表的内存空间是连续的,这样可以提高缓存命中率,从而提高访问效率。

总之,顺序表是一种简单且常用的线性数据结构,它的查找效率高,但是插入和删除效率较低,空间利用率较低。

如何实现顺序表的插入操作。

        定义一个顺序表

typedef struct {
    int data[MAX_SIZE];
    int length;
}SequenceList;

上述代码中的 typedef 声明了一个类型别名 SequenceList,用来表示一个结构体类型。这个结构体类型包含两个成员:一个整型数组 data 和一个整型变量 length

这样使用 typedef 声明后,就可以像使用系统定义的类型一样使用 SequenceList 类型,而不用再使用 struct 关键字。例如,可以直接声明一个 SequenceList 类型的变量,使用 typedef 声明类型别名的主要目的是为了使代码更加简洁,方便维护。

        定义insert函数

                判断顺序表是否已满

 if (L->length == MAX_SIZE){
        printf("Error: the SequenceList if full.\n");
        return;
    }

                插入位置的有效性

if(index < 0 || index > L->length){
            printf("Error index");
            return;
    }

                开始插入操作


        for (int i = L->length - 1; i >= index; i--){

         L->data[i+1] = L->data[i];
        }
        L->data[index] = element;
        L->length++;

将顺序表中插入位置及之后的数据元素向后移动一个位置,从而腾出插入位置。然后,将新的数据元素插入到插入位置,并将顺序表的长度加 1。这样,就完成了顺序表的插入操作。当i == index时,需要将index下标位置的元素向后移一位,这就是要写等于的原因.

        主函数实现功能举例:

                为SequenceList L赋值

SequenceList L = {{1,2,3,4,5,6},6};

有六个元素{1,2,3,4,5,6},length=6

                打印顺序表

 printf("Original sequence list length: %d and element: ",L.length);
    for (int i = 0; i < L.length; i++){
        printf("%d ", L.data[i]);
    }

                调用insert函数传参实现插入操作

 insert(&L,3,7);

在下表为3的位置上插入元素7

                打印插入后的顺序表

 printf("After insertion sequence list length: %d and element: ",L.length);
    
    for (int i = 0; i <L.length; i++){
        printf("%d ",L.data[i]);
    }

完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
    int data[MAX_SIZE];
    int length;
}SequenceList;
void insert(SequenceList *L,int index,int element){
    if (L->length == MAX_SIZE){
        printf("Error: the SequenceList if full.\n");
        return;
    }
    if(index < 0 || index > L->length){
            printf("Error index");
            return;
    }
        for (int i = L->length - 1; i >= index; i--){

         L->data[i+1] = L->data[i];
        }
        L->data[index] = element;
        L->length++;
}
int main(){
    SequenceList L = {{1,2,3,4,5,6},6};
    printf("Original sequence list length: %d and element: ",L.length);
    for (int i = 0; i < L.length; i++){
        printf("%d ", L.data[i]);
    }
    printf("\n");

    insert(&L,3,7);

    printf("After insertion sequence list length: %d and element: ",L.length);
    
    for (int i = 0; i <L.length; i++){
        printf("%d ",L.data[i]);
    }
    printf("\n");

    system("pause");
    return 0;
}

补充注意事项

在主函数中,L是一个结构体变量,不是指针。在访问它的成员时不能使用->运算符,会导致编译器报错。

错误写法:

int main(){
    sqlist L = {{1,2,3,4,5,6},6};
    printf("before insert length = %d,element:",L->length);
    for (int i = 0; i < L->length; i++)
    {
        printf("%d ",L->data[i]);
    }
    printf("\n");
    insert(&L,3,5);

    printf("after insert length = %d,element:",L->length);
    for (int i = 0; i < L->length; i++)
    {
        printf("%d ",L->data[i]);
    }
    printf("\n");
    
    system("pause");
    return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值