(不完整版)利用C语言实现顺序表(插入,删除)(数据结构)

线性表的类型定义

线性表是常用且最简单的一种数据结构。一个线性表是n个将数据元素的有限序列。线性表是一个灵活的数据结构,它的长度可根据需要增长或缩短,插入与删除。

线性表的插入删除查找

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

#define MAX_SIZE 100

// 初始化顺序表
void initList(int list[], int* length) {
    *length = 0;
}

// 查找数据
int searchList(int list[], int length, int data) {
    for (int i = 0; i < length; i++) {
        if (list[i] == data) {
            return i; // 返回数据所在位置
        }
    }
    return -1; // 若未找到返回 -1
}

// 插入数据
void insertList(int list[], int* length, int pos, int data) {
    if (pos < 0 || pos > *length) {
        printf("插入位置超出范围\n");
        return;
    }

    if (*length == MAX_SIZE) {
        printf("顺序表已满\n");
        return;
    }

    // 将插入位置后的数据依次后移
    for (int i = *length - 1; i >= pos; i--) {
        list[i + 1] = list[i];
    }

    list[pos] = data;
    (*length)++;
}

// 删除数据
void deleteList(int list[], int* length, int pos) {
    if (pos < 0 || pos >= *length) {
        printf("删除位置超出范围\n");
        return;
    }

    // 将删除位置后的数据依次前移
    for (int i = pos; i < *length - 1; i++) {
        list[i] = list[i + 1];
    }

    (*length)--;
}

void printList(int list[], int length) {
    for (int i = 0; i < length; i++) {
        printf("%d ", list[i]);
    }
    printf("\n");
}

int main() {
    int list[MAX_SIZE];
    int length;
    int n, searchPos, insertPos, insertData, deletePos;

    printf("请输入样本总数目:");
    scanf("%d", &n);

    printf("请输入 %d 个样本:", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &list[i]);
    }
    length = n;

    int list1[MAX_SIZE];
    for (int i = 0; i < length; i++) {
        list1[i] = list[i];
    }

    printf("请输入要查找的数据的位置:");
    scanf("%d", &searchPos);

    int searchData = list[searchPos];
    int searchResult = searchList(list, length, searchData);
    if (searchResult != -1) {
        printf("数据 %d 位于顺序表的位置 %d\n", searchData, searchResult);
    }
    else {
        printf("未找到数据 %d\n", searchData);
    }

    printf("请输入要插入的数据的位置和数据:");
    scanf("%d %d", &insertPos, &insertData);
    insertList(list, &length, insertPos, insertData);

    int list2[MAX_SIZE];
    for (int i = 0; i < length; i++) {
        list2[i] = list[i];
    }

    printf("请输入要删除的数据的位置:");
    scanf("%d", &deletePos);
    deleteList(list, &length, deletePos);

    int list3[MAX_SIZE];
    for (int i = 0; i < length; i++) {
        list3[i] = list[i];
    }

    printf("顺序表创建后,数据数组按顺序排列的全部数据:");
    printList(list1, length);

    printf("插入新数据后,数据数组按顺序排列的全部数据:");
    printList(list2, length);

    printf("删除一个数据后,数据数组按顺序排列的全部数据:");
    printList(list3, length);
   

    return 0;
}

以下是逐步解释:

1. 定义了一个常量 MAX_SIZE,表示顺序表的最大容量。

#define MAX_SIZE 100

2. 定义了初始化顺序表的函数 initList,用于将顺序表的长度初始化为0。 

void initList(int list[], int* length) {
    *length = 0;
}

3. 定义了查找数据的函数 searchList,在顺序表中查找指定数据,并返回其位置。

int searchList(int list[], int length, int data) {
    for (int i = 0; i < length; i++) {
        if (list[i] == data) {
            return i; // 返回数据所在位置
        }
    }
    return -1; // 若未找到返回 -1
}

4. 定义了插入数据的函数 insertList,在指定位置插入新的数据。

void insertList(int list[], int* length, int pos, int data) {
    if (pos < 0 || pos > *length) {
        printf("插入位置超出范围\n");
        return;
    }

    if (*length == MAX_SIZE) {
        printf("顺序表已满\n");
        return;
    }

    // 将插入位置后的数据依次后移
    for (int i = *length - 1; i >= pos; i--) {
        list[i + 1] = list[i];
    }

    list[pos] = data;
    (*length)++;
}

 5. 定义了删除数据的函数 deleteList,在指定位置删除数据。

void deleteList(int list[], int* length, int pos) {
    if (pos < 0 || pos >= *length) {
        printf("删除位置超出范围\n");
        return;
    }

    // 将删除位置后的数据依次前移
    for (int i = pos; i < *length - 1; i++) {
        list[i] = list[i + 1];
    }

    (*length)--;
}

6. 主函数 main 中,首先声明了一些变量和数组。

int list[MAX_SIZE];
int length;
int n, searchPos, insertPos, insertData, deletePos;

7. 接下来,通过用户的输入初始化顺序表。

printf("请输入样本总数目:");
scanf("%d", &n);

printf("请输入 %d 个样本:", n);
for (int i = 0; i < n; i++) {
    scanf("%d", &list[i]);
}
length = n;

8. 用户输入要查找的数据位置,调用 searchList 函数查找数据并输出结果。

printf("请输入要查找的数据的位置:");
scanf("%d", &searchPos);

int searchData = list[searchPos];
int searchResult = searchList(list, length, searchData);
if (searchResult != -1) {
    printf("数据 %d 位于顺序表的位置 %d\n", searchData, searchResult);
} else {
    printf("未找到数据 %d\n", searchData);
}

9. 用户输入要插入的数据的位置和数据,调用 insertList 函数进行插入操作 

printf("请输入要插入的数据的位置和数据:");
scanf("%d %d", &insertPos, &insertData);
insertList(list, &length, insertPos, insertData);

10. 用户输入要删除的数据的位置,调用 deleteList 函数进行删除操作。

printf("请输入要删除的数据的位置:");
scanf("%d", &deletePos);
deleteList(list, &length, deletePos);

 11. 最后,输出顺序表创建后的全部数据、查找的数据、插入新数据后的全部数据以及删除一个数据后的全部数据。

printf("顺序表创建后,数据数组按顺序排列的全部数据:");
for (int i = 0; i < length; i++) {
    printf("%d ", list[i]);
}
printf("\n");

printf("输出查找的数据:%d\n", searchData);

printf("插入新数据后,数据数组按顺序排列的全部数据:");
for (int i = 0; i < length; i++) {
    printf("%d ", list[i]);
}
printf("\n");

printf("删除一个数据后,数据数组按顺序排列的全部数据:");
for (int i = 0; i < length; i++) {
    printf("%d ", list[i]);
}
printf("\n");

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值