Quick actions

cmd+k|ctrl+k

Navigation

Languages

顺序表基本操作 -- 插入删除

Snippet info

Language

Cpp

Visibility

public

Author

qwas

Created

2024-05-15T15:50:16.753223Z

Updated

2024-05-15T16:40:39.14457Z

#include <stdio.h>
#define MaxSize 10 // 定义最大长度

/**
 * 静态顺序表的基本操作
 */

typedef struct
{
    int data[MaxSize]; // 用静态的 “数组” 存放数据元素
    int length;
} SeqList;

// 初始化顺序表

void InitList(SeqList &L)
{
    for (int i = 0; i < MaxSize; i++)
        L.data[i] = 0; // 将所有的元素设置为默认初始值
    L.length = 0;      // 顺序表初始长度为 0
}

// // 数据插入 在位序i的位置插入数据(数组索引 i-1的位置)
// void ListInsert(SeqList &L, int i, int e)
// {
//     // 判断 i 的合法值 1<i<length

//     for (int j = 0; j < L.length; j--)
//     {
//         L.data[j] = L.data[j - 1];  // 将第i个元素及之后的元素后移
//     }
//     L.data[i - 1] = e; // 在i的位置插入 e
//     L.length++;        // 长度加 1
// }

bool ListInsert(SeqList &L, int i, int e)
{
    if (i < 1 || i > L.length + 1)
    {
        return false;
    }
    if (L.length >= MaxSize) // 存储空间满了
    {
        return false;
    }
    for (int j = L.length; j >= i; j--)
    {
        L.data[j] = L.data[j - 1]; // 将第i个元素及之后的元素后移
    }
    L.data[i - 1] = e; // 在i的位置插入 e
    L.length++;        // 长度加 1
    return true;
}

/// @brief
/// @param L 要删除的数据表
/// @param i 删除的索引
/// @param e 返回删除的那个数据元素
/// @return
bool ListDelete(SeqList &L, int i, int &e)
{
    if (i < 1 || i > L.length)
    {
        return false;
    }
    e = L.data[i - 1];
    for (int j = i; j < L.length; j++)
    {
        L.data[j - 1] = L.data[j];
    }

    L.length--;
    return true;
}
//  查找 (此处 i为位序)
int GetElem(SeqList L, int i)
{
    return L.data[i - 1];
}

// 查找第一个元素值等于e的元素,并返回其位序
int LocateElem(SeqList L, int e)
{
    for (int i = 0; i < L.length; i++)
    {
        if (L.data[i] == e)
        {
            return i + 1;
        }
        return 0;
    }
}

int main()
{

    SeqList L;   // 声明一个顺序表
    InitList(L); // 初始化顺序表

    printf("%d\n", ListInsert(L, 1, 2));
    ListInsert(L, 2, 4);
    ListInsert(L, 3, 6);
    ListInsert(L, 4, 8);
    ListInsert(L, 5, 10);
    ListInsert(L, 6, 11);
    ListInsert(L, 7, 12);
    ListInsert(L, 8, 13);
    ListInsert(L, 9, 14);

    for (int i = 0; i < MaxSize; i++)
    {
        printf("data[%d]=%d\n", i, L.data[i]);
    }

    int e = -1;

    if (ListDelete(L, 3, e))
        printf("已经删除第三个元素,删除元素值为= %d\n", e);
    else
        printf("位序 i不合法,删除失败 %d\n", e);

    printf("\n\n删除后表中保存的值:\n");

    for (int i = 0; i < L.length; i++)
    {
        printf("data[%d]=%d\n", i, L.data[i]);
    }


    LocateElem(L, 11);  // 在表 L中,查找值为11的位序

    return 0;
}
INFO