顺序表的实现

实现顺序表的插入、删除、查看等操作。

操作菜单要求:

  • 插入:输入插入的位置和数据,输出插入后的数据;
  • 删除:输入要删除的位置,输出删除后的数据;
  • 查看:查看当前顺序表的数据;
  • 退出。

该实验内容以“int”作为顺序表数据元素的数据类型即可。

顺序表的定义

typedef struct {
    ElemType data[MaxSize];
    int length;
} SqList; // 顺序表类型

实现的基本运算
插入运算
删除运算
显示运算
初始化运算/建立顺序表

#include <stdio.h>
#include <stdlib.h>

#define MaxSize 100 // 定义最大长度

typedef struct {
    int data[MaxSize]; // 存储数据的数组
    int length=0; // 当前顺序表的长度
} SqList; // 顺序表类型

// 初始化运算/建立顺序表
void InitList(SqList *L) {
    int n, i;
    printf("请输入顺序表的初始长度:");
    scanf("%d", &n);
    printf("请输入顺序表的初始数据(以空格或者回车分隔):\n");
    for (i = 0; i < n; i++) {
        scanf("%d", &L->data[i]);
    }
    L->length = n;
}

// 插入运算
void InsertList(SqList *L, int i, int e) {
    if (L->length == MaxSize) {
        printf("顺序表已满,无法插入!\n");
        return;
    }
    if (i < 1 || i > L->length + 1) {
        printf("插入位置不合法!\n");
        return;
    }
    for (int j = L->length; j >= i; j--) {
        L->data[j] = L->data[j - 1];
    }
    L->data[i - 1] = e;
    L->length++;
}

// 删除运算
void DeleteList(SqList *L, int i) {
    if (L->length == 0) {
        printf("顺序表为空,无法删除!\n");
        return;
    }
    if (i < 1 || i > L->length) {
        printf("删除位置不合法!\n");
        return;
    }
    for (int j = i; j < L->length; j++) {
        L->data[j - 1] = L->data[j];
    }
    L->length--;
}

// 输出显示
void DisplayList(SqList L) {
    if (L.length == 0) {
        printf("顺序表为空!\n");
        return;
    }
    for (int i = 1; i <= L.length; i++) {
        printf("%d ", L.data[i - 1]);
    }
    printf("\n");
}

int main() {
    SqList L;
    
    int choice,n, i, j, e;
    printf("====================================\n");
    printf("请选择要执行的操作:\n");
    printf("1. 初始化顺序表\n");
    printf("2. 插入数据\n");
    printf("3. 删除数据\n");
    printf("4. 显示顺序表\n");
    printf("5. 退出\n");
    printf("====================================\n");
    scanf("%d", &choice);
    while (choice != 5) {
        switch (choice) {
        case 1:
            InitList(&L); // 初始化顺序表
            break;
        case 2:
            printf("请输入要插入的数据个数:");
            scanf("%d", &n);
            printf("请输入要插入的数据位置:");
            scanf("%d", &j);
            printf("请依次输入要插入的数据(以空格或者回车分隔):\n");
            for (i = 0; i < n; i++) {
                scanf("%d", &e);
                InsertList(&L, j, e); // 在位置j插入数据e
            }
            DisplayList(L); // 显示顺序表
            break;
        case 3:
            printf("请输入要删除的位置:");
            scanf("%d", &i);
            DeleteList(&L, i); // 删除位置i的数据
            DisplayList(L); // 显示顺序表
            break;
        case 4:
            DisplayList(L); // 显示顺序表
            break;
        default:
            printf("无效的选择,请重新输入!\n");
            break;
        }
        printf("====================================\n");
        printf("请选择要执行的操作:\n");
        printf("1. 初始化顺序表\n");
        printf("2. 插入数据\n");
        printf("3. 删除数据\n");
        printf("4. 显示顺序表\n");
        printf("5. 退出\n");
        printf("====================================\n");
        scanf("%d", &choice);
    }
    return 0;
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值