顺序表基本操作实现

2023-12-24 20:39:53
#include <stdio.h>

#define MAX_SIZE 100

// 定义顺序表的元素类型
typedef int ElementType;

// 定义顺序表结构体
typedef struct {
    ElementType data[MAX_SIZE];
    int length;
} SeqList;

// 初始化顺序表
void InitList(SeqList *L) {
    L->length = 0;
}

// 插入操作
int ListInsert(SeqList *L, int position, ElementType e) {
    if (position < 1 || position > L->length + 1) {
        // 插入位置不合法
        return 0;
    }

    if (L->length >= MAX_SIZE) {
        // 顺序表已满
        return 0;
    }

    // 将插入位置后的元素依次后移
    for (int i = L->length - 1; i >= position - 1; i--) {
        L->data[i + 1] = L->data[i];
    }

    // 插入新元素并更新顺序表长度
    L->data[position - 1] = e;
    L->length++;

    return 1;  // 插入成功
}

// 删除操作
int ListDelete(SeqList *L, int position) {
    if (position < 1 || position > L->length) {
        // 删除位置不合法
        return 0;
    }

    // 将删除位置后的元素依次前移
    for (int i = position; i < L->length; i++) {
        L->data[i - 1] = L->data[i];
    }

    // 更新顺序表长度
    L->length--;

    return 1;  // 删除成功
}

// 查找操作
ElementType GetElem(SeqList L, int position) {
    if (position < 1 || position > L.length) {
        // 查找位置不合法
        return -1;  // 可以根据实际情况返回一个特殊值或处理错误
    }

    return L.data[position - 1];
}

// 按值查找操作
int LocateElem(SeqList L, ElementType e) {
    for (int i = 0; i < L.length; i++) {
        if (L.data[i] == e) {
            // 找到元素,返回位置(从1开始)
            return i + 1;
        }
    }

    // 未找到元素
    return 0;
}

// 打印顺序表
void PrintList(SeqList L) {
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.data[i]);
    }
    printf("\n");
}

int main() {
    SeqList myList;
    InitList(&myList);

    ListInsert(&myList, 1, 10);
    ListInsert(&myList, 2, 20);
    ListInsert(&myList, 1, 30);

    printf("顺序表元素:");
    PrintList(myList);

    ListDelete(&myList, 2);

    printf("删除第2个元素后:");
    PrintList(myList);

    printf("第1个元素是:%d\n", GetElem(myList, 1));

    int position = LocateElem(myList, 20);
    if (position != 0) {
        printf("元素20的位置是:%d\n", position);
    } else {
        printf("元素20未找到\n");
    }

    return 0;
}

文章来源:https://blog.csdn.net/2303_80475208/article/details/135185937
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。