111111

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

#define LIST_INIT_SIZE 100

// 定义线性表元素类型
typedef int ElemType;

// 定义线性表结构体
typedef struct {
    ElemType *elem; // 存储空间基址
    int length;     // 当前长度
} SqList;

// 初始化一个线性表
void InitList(SqList *L) {
    L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if (!L->elem) {
        exit(EXIT_FAILURE); // 内存分配失败
    }
    L->length = 0;
}

// 创建一个包含n个正整数值的线性表
void CreateList(SqList *L, int n) {
    srand(time(NULL)); // 使用当前时间作为随机种子
    for (int i = 0; i < n; i++) {
        L->elem[i] = rand() % 100; // 生成0到99之间的随机整数
    }
    L->length = n;
}

// 在第i个元素前插入一个数x
void InsertElement(SqList *L, int i, ElemType x) {
    if (i < 1 || i > L->length + 1) {
        printf("插入位置不合法\n");
        return;
    }
    if (L->length >= LIST_INIT_SIZE) {
        printf("线性表已满,无法插入\n");
        return;
    }
    for (int j = L->length; j >= i; j--) {
        L->elem[j] = L->elem[j - 1];
    }
    L->elem[i - 1] = x;
    L->length++;
}

// 删除第i个元素,并输出删除元素的值
ElemType DeleteElement(SqList *L, int i) {
    if (i < 1 || i > L->length) {
        printf("删除位置不合法\n");
        exit(EXIT_FAILURE);
    }
    ElemType deleted = L->elem[i - 1];
    for (int j = i; j < L->length; j++) {
        L->elem[j - 1] = L->elem[j];
    }
    L->length--;
    return deleted;
}

// 查找指定元素e是否在线性表中存在,若存在返回此元素的位序,否则返回0
int LocateElement(SqList *L, ElemType e) {
    for (int i = 0; i < L->length; i++) {
        if (L->elem[i] == e) {
            return i + 1; // 返回位序,从1开始
        }
    }
    return 0; // 未找到
}

// 查找指定位置元素的值并输出
void GetElement(SqList *L, int i) {
    if (i < 1 || i > L->length) {
        printf("位置不合法\n");
        return;
    }
    printf("第%d个元素的值是:%d\n", i, L->elem[i - 1]);
}

// 输出线性表中所有元素
void PrintList(SqList *L) {
    if (L->length == 0) {
        printf("线性表为空\n");
        return;
    }
    printf("线性表内容为:");
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->elem[i]);
    }
    printf("\n");
}

int main() {
    SqList list;
    InitList(&list);

    // 创建一个包含n个正整数值的线性表
    int n;
    printf("请输入线性表的长度n:");
    scanf("%d", &n);
    CreateList(&list, n);

    // 输出初始线性表内容
    printf("初始线性表内容:\n");
    PrintList(&list);

    int choice;
    do {
        printf("\n选择操作:\n");
        printf("1. 插入元素\n");
        printf("2. 删除元素\n");
        printf("3. 查找元素\n");
        printf("4. 查找位置元素\n");
        printf("5. 输出线性表\n");
        printf("0. 退出\n");
        printf("请选择操作:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                {
                    int x, i;
                    printf("请输入要插入的元素和插入位置(用空格分隔):");
                    scanf("%d %d", &x, &i);
                    InsertElement(&list, i, x);
                    printf("插入后的线性表内容:\n");
                    PrintList(&list);
                    break;
                }
            case 2:
                {
                    int i;
                    printf("请输入要删除的元素位置:");
                    scanf("%d", &i);
                    ElemType deleted = DeleteElement(&list, i);
                    printf("删除的元素值为:%d\n", deleted);
                    printf("删除后的线性表内容:\n");
                    PrintList(&list);
                    break;
                }
            case 3:
                {
                    ElemType e;
                    printf("请输入要查找的元素值:");
                    scanf("%d", &e);
                    int position = LocateElement(&list, e);
                    if (position) {
                        printf("元素%d位于第%d个位置\n", e, position);
                    } else {
                        printf("元素%d不存在于线性表中\n", e);
                    }
                    break;
                }
            case 4:
                {
                    int i;
                    printf("请输入要查找位置的元素位置:");
                    scanf("%d", &i);
                    GetElement(&list, i);
                    break;
                }
            case 5:
                PrintList(&list);
                break;
            case 0:
                printf("程序退出\n");
                break;
            default:
                printf("无效的选项,请重新选择\n");
                break;
        }
    } while (choice != 0);

    // 释放线性表内存
    free(list.elem);

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值