顺序表的基本操作

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

#define maxsize 20
typedef int elemtype;
typedef struct {
    elemtype* elem; // 存储空间的基地址
    int length; // 当前长度
    int capacity; // 当前分配的存储容量
} seqList;

// 初始化顺序表
void ListInit(seqList* L) {
    L->elem = (elemtype*)malloc(maxsize * sizeof(elemtype));
    L->length = 0;
    L->capacity = maxsize;
}

// 获取顺序表的容量
int ListCapacity(seqList L) {
    return L.capacity;
}

// 判断顺序表是否为空
int ListIsEmpty(seqList L) {
    return L.length == 0;
}

// 查找元素 e 是否存在,存在返回 1,不存在返回 0
int ElemExist(seqList L, elemtype e) {
    for (int i = 0; i < L.length; i++) {
        if (L.elem[i] == e) {
            return 1;
        }
    }
    return 0;
}



// 获取指定位置的元素值
int GetElem(seqList L, int i, elemtype* e) {
    if (i < 1 || i > L.length) {
        return 0;
    }
    *e = L.elem[i - 1];
    return 1;
}

// 查找元素并返回其在表中的位置
int LocateElem(seqList L, elemtype e) {
    for (int i = 0; i < L.length; i++) {
        if (L.elem[i] == e) {
            return i + 1;
        }
    }
    return 0;
}

// 将第 i 个位置元素修改为 e,成功返回 1,失败返回 0
int ListModify(seqList* L, int i, elemtype e) {
    if (i < 1 || i > L->length) {
        return 0;
    }

    L->elem[i - 1] = e;

    return 1;
}


// 在指定位置插入元素
int ListInsert(seqList* L, int i, elemtype e) {
    if (i < 1 || i > L->length + 1 || L->length == L->capacity) {
        return 0;
    }
    for (int j = L->length - 1; j >= i - 1; j--) {
        L->elem[j + 1] = L->elem[j];
    }
    L->elem[i - 1] = e;
    L->length++;
    return 1;
}

// 删除指定位置的元素
int ListDelete(seqList* L, int i, elemtype* e) {
    if (i < 1 || i > L->length) {
        return 0;
    }
    *e = L->elem[i - 1];
    for (int j = i; j < L->length; j++) {
        L->elem[j - 1] = L->elem[j];
    }
    L->length--;
    return 1;
}

// 删除元素e
int ListRemove(seqList* L, elemtype e) {
    int i = 0;
    while (i < L->length && L->elem[i] != e) {
        i++;
    }
    if (i == L->length) {
        return 0; // 元素e不存在
    }
    for (int j = i + 1; j < L->length; j++) {
        L->elem[j - 1] = L->elem[j];
    }
    L->length--;
    return 1;
}

// 打印顺序表中的所有元素
void ListPrint(seqList L) {
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.elem[i]);
    }
    printf("\n");
}

int main() {
    seqList L;
    ListInit(&L);
    printf("容量: %d\n", ListCapacity(L));

    if (ListIsEmpty(L)) {
        printf("列表为空。\n");
    }
    else {
        printf("列表不为空。\n");
    }

    for (int i = 1; i <= 5; i++) {
        ListInsert(&L, i, i);
    }
    printf("插入 1-5: ");
    ListPrint(L);

    elemtype e;
    if (GetElem(L, 3, &e)) {
        printf("获取第3个元素: %d\n", e);
    }
    else {
        printf("有误\n");
    }

    if (ElemExist(L, 4)) {
        printf("4在表里\n");
    }
    else {
        printf("4不在表里\n");
    }

    int pos = LocateElem(L, 5);
    if (pos > 0) {
        printf("5的在表中的位置是: %d\n", pos);
    }
    else {
        printf("未找到。\n");
    }
    if (ListModify(&L, 4, 10)) {
        printf("将第4个元素改为10\n");
    }
    else {
        printf("未找到\n");
    }
    printf("修改第4个元素后: ");
    ListPrint(L);
    if (ListDelete(&L, 4, &e)) {
        printf("删除第4个元素: %d\n", e);
    }
    else {
        printf("没有该位置\n");
    }
    printf("删除第四个元素后: ");
    ListPrint(L);

    if (ListRemove(&L, 3)) {
        printf("删除元素3\n");
    }
    else {
        printf("未找到.\n");
    }
    printf("移除元素3: ");
    ListPrint(L);

    return 0;
}

运行结果
QQ截图20230315094240