用C语言实现静态数组顺序表相关算法

使用了静态数组来存储数据。具体来说,SeqList 结构体中的 data 数组被定义为一个固定大小的数组(int data[MAX_SIZE];),其大小在编译时就确定了为 MAX_SIZE(在代码中定义为100)。

静态数组 vs 动态数组
静态数组:

在编译时分配内存,大小固定。
例如,在你的代码中,data 数组的大小为 MAX_SIZE,在整个程序运行期间不会改变。
优点:简单,访问速度快;缺点:内存使用不灵活,可能浪费空间或不够用。

功能

初始化顺序表:创建一个空的顺序表,设置其长度为0。

插入元素:在指定位置插入一个新元素。用户可以输入插入的位置和要插入的值。如果插入位置不合法或顺序表已满,插入操作将失败。

删除元素:删除指定位置的元素。如果删除位置不合法,删除操作将失败。

查找元素:查找顺序表中是否存在某个值,并返回其索引。如果未找到该元素,则返回-1。

打印顺序表:显示顺序表当前的所有元素。如果顺序表为空,则提示用户。

用户交互:通过命令行界面,用户可以选择不同的操作(插入、删除、查找、打印、退出),并根据提示输入相应的数据。

具体功能说明
插入元素:用户可以选择在0到当前长度之间的任意位置插入元素。插入时,原有元素会向后移动以腾出空间。

删除元素:用户可以选择删除0到当前长度-1之间的任意位置的元素。删除时,后面的元素会向前移动以填补空缺。

查找元素:用户可以输入一个值,程序会返回该值在顺序表中的索引。

打印顺序表:用户可以随时查看顺序表的内容。

退出程序:用户可以选择退出程序,结束操作。

错误处理
程序中包含了对用户输入的错误处理,如输入无效、位置不合法等情况,确保程序的健壮性和用户体验。

int main() {
    SeqList list;
    initSeqList(&list);

    int choice, index, value;
    while (1) {
        printf("1. 插入元素\n2. 删除元素\n3. 查找元素\n4. 打印顺序表\n5. 退出\n");
        printf("请输入你的选择: ");

        if (scanf("%d", &choice) != 1) {
            printf("输入无效,请输入数字 1-5。\n");
            while (getchar() != '\n'); // 清空输入缓冲区
            continue;
        }

        switch (choice) {
            case 1:
                printf("请输入插入位置(0 到 %d)和元素值,使用空格分隔: ", list.length);
                if (scanf("%d %d", &index, &value) != 2) {
                    printf("输入无效,请确保输入两个整数,并用空格分隔。\n");
                    while (getchar() != '\n'); // 清空输入缓冲区
                    break;
                }
                if (insertSeqList(&list, index, value) == 0) {
                    printf("插入成功!\n");
                } else {
                    printf("插入失败!位置不合法或顺序表已满。\n");
                }
                printSeqList(&list); // 显示当前顺序表内容
                break;

            case 2:
                printf("请输入删除位置(0 到 %d): ", list.length - 1);
                if (scanf("%d", &index) != 1) {
                    printf("输入无效,请输入一个整数。\n");
                    while (getchar() != '\n'); // 清空输入缓冲区
                    break;
                }
                if (deleteSeqList(&list, index) == 0) {
                    printf("删除成功!\n");
                } else {
                    printf("删除失败!位置不合法。\n");
                }
                printSeqList(&list); // 显示当前顺序表内容
                break;

            case 3:
                printf("请输入查找的元素值: ");
                if (scanf("%d", &value) != 1) {
                    printf("输入无效,请输入一个整数。\n");
                    while (getchar() != '\n'); // 清空输入缓冲区
                    break;
                }
                index = findSeqList(&list, value);
                if (index != -1) {

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值