[数据结构]:01-顺序表(数组)(C语言实现)

目录

前言

顺序表实现

01-开发环境

02-文件布局

03-代码

01-主函数

02-头文件

03-SeqListCommon.cpp

04-SeqListPositionOperation.cpp

05-SeqListValueOperation.cpp

结语

前言

        此专栏包含408考研数据结构全部内容,除其中使用到C++引用外,全为C语言代码。使用C++引用主要是为了简化指针的使用,避免二重指针的出现。

顺序表实现

01-开发环境

        语言:C/C++14

        编译器:MinGW64

        集成开发环境:CLion2022.1.3

02-文件布局

        请在CLion集成开发环境中创建C++可执行程序,否则无法运行,原因上面已解释。

                        

03-代码

01-主函数

        用于测试和初始化顺序表。

#include "./Head/SeqListData.h"
#include "./Source/SeqListCommon.cpp"
#include "./Source/SeqListPositionOperation.cpp"
#include "./Source/SeqListValueOperation.cpp"

int main() {
    // 定义与初始化
    SeqList List;
    List.data[0] = 1;
    List.data[1] = 2;
    List.data[2] = 3;
    List.data[3] = 4;
    List.data[4] = 2;
    List.data[5] = 3;
    List.length = 6;

    // 位置操作
    // 插入
    int position = 1, value = 60;
    SeqListInsertPosition(List, position, value);
    SeqListPrint(List);
    printf("----------------------\n");
    // 删除
//    position = 1;
//    SeqListDeletePosition(List, position);
//    SeqListPrint(List);
//    printf("----------------------\n");
    // 修改
//    position = 2;
//    value = 20;
//    SeqListModifyPosition(List, position, value);
//    SeqListPrint(List);
    // 查找
//    position = 1;
//    SeqListSearchPosition(List, position, value);
//    printf("%d at position %d", value, position);

    // 内容操作
    SeqListPrint(List);
    printf("----------------------\n");
    // 删除
//    int value = 2, position = 0;
//    SeqListDeleteAllContent(List, value);
//    SeqListPrint(List);
    // 查找
//    value = 3;
//    position = 0;
//    SeqListSearchContent(List, value, position);
//    SeqListPrint(List);

//    value = 3;
//    int positionList[MAXSIZE];
//    SeqListSearchAllContent(List, value, positionList);
//    SeqListPrint(List);
    // 修改
//    int sourceValue = 2, modifyValue = 20;
//    SeqListModifyAllContent(List, sourceValue, modifyValue);
//    SeqListPrint(List);
//    SeqListInsertAllContent(List, 2, 20);
//    SeqListPrint(List);
//    printf("%d\n", List.length);
    return 0;
}

02-头文件

        用于存储结构体和常量等。

//
// Created by 24955 on 2023-02-19.
//

#ifndef SEQLIST_SEQLISTDATA_H
#define SEQLIST_SEQLISTDATA_H
// 头文件
#include <stdio.h>

// 常量
#define MAXSIZE 50
#define ElemType int

// SeqList结构体定义
typedef struct {
    ElemType data[MAXSIZE];
    int length;
} SeqList;
#endif //SEQLIST_SEQLISTDATA_H

03-SeqListCommon.cpp

        用于存储公共函数。

//
// Created by 24955 on 2023-02-19.
//
void SeqListPrint(SeqList List) {
    for (int i = 0; i < List.length; i++) {
        printf("%3d", List.data[i]);
    }
    printf("\n");
}

04-SeqListPositionOperation.cpp

        用于存储按位置操作的函数。

//
// Created by 24955 on 2023-02-19.
//
// 插入操作
void SeqListInsertPosition(SeqList &List, int position, ElemType value) {
    /*
     * 1. 判断插入位置是否合法,数组是否已满
     * 2. 后移数据
     * 3. 插入,长度+1*/
    if (position >= 1 && position <= List.length + 1 && List.length != MAXSIZE) {
        for (int i = List.length; i >= position; i--) {
            List.data[i] = List.data[i - 1];
        }
        List.data[position - 1] = value;
        List.length++;
        printf("Insert Success.\n");
    } else {
        printf("Illegal input, please re-enter.\n");
    }
}

// 删除操作
void SeqListDeletePosition(SeqList &List, int position) {
    /*
     * 1. 判断删除位置是否合法
     * 2. 移动数据*/
    if (position >= 1 && position <= List.length) {
        for (int i = position; i < List.length; i++) {
            List.data[i - 1] = List.data[i];
        }
        List.length--;
        printf("Delete Success.\n");
    } else {
        printf("Illegal input, please re-enter.\n");
    }
}

// 修改操作
void SeqListModifyPosition(SeqList &List, int position, ElemType value) {
    /*
     * 1. 判断修改位置是否合法
     * 2. 修改数据*/
    if (position >= 1 && position <= List.length) {
        List.data[position - 1] = value;
        printf("Modify Success.\n");
    } else {
        printf("Illegal input, please re-enter.\n");
    }
}

// 查找操作
void SeqListSearchPosition(SeqList List, int position, ElemType &value) {
    if (position >= 1 && position <= List.length) {
        value = List.data[position - 1];
        printf("Search Success.\n");
    } else {
        printf("Illegal input, please re-enter.\n");
    }
}

05-SeqListValueOperation.cpp

        用于存储按值操作的函数。

//
// Created by 24955 on 2023-02-19.
//
// 在第一个匹配元素位置处插入一个元素
void SeqListInsertContent(SeqList &List, ElemType value, ElemType insertValue) {
    /*
     * 1. 匹配内容所在位置
     * 2. 调用SeqListInsertPosition函数插入数据*/
    bool ret = true;
    for (int i = 0; i < List.length; i++) {
        if (List.data[i] == value) {
            SeqListInsertPosition(List, i + 1, insertValue);
            ret = false;
            break;
        }
    }
    if (ret) {
        printf("Don't find %d, please re-enter.\n", value);
    } else {
        printf("Insert %d success.\n", insertValue);
    }
}

// 在全部匹配元素位置处插入一个元素
void SeqListInsertAllContent(SeqList &List, ElemType value, ElemType insertValue) {
    /*
     * 1. 匹配内容所在位置
     * 2. 调用SeqListInsertPosition函数插入数据并将i+1
     * 3. 插入后匹配内容后移,因此需i+1跳过上次匹配值*/
    bool ret = true;
    for (int i = 0; i < List.length; i++) {
        if (List.data[i] == value) {
            SeqListInsertPosition(List, i + 1, insertValue);
            i++;
            ret = false;
        }
    }
    if (ret) {
        printf("Don't find %d, please re-enter.\n", value);
    } else {
        printf("Insert %d success.\n", insertValue);
    }
}

// 删除第一个匹配元素
void SeqListDeleteContent(SeqList &List, ElemType value) {
    /*
     * 1. 匹配删除位置
     * 2. 调用SeqListDeletePosition函数删除数据并中断循环*/
    bool ret = true;
    for (int i = 0; i < List.length; i++) {
        if (List.data[i] == value) {
            SeqListDeletePosition(List, i + 1);
            ret = false;
            break;
        }
    }
    if (ret) {
        printf("Don't find %d, please re-enter.\n", value);
    } else {
        printf("Delete %d success.\n", value);
    }
}

// 删除全部匹配元素
void SeqListDeleteAllContent(SeqList &List, ElemType value) {
    /*
     * 1. 匹配删除位置
     * 2. 调用SeqListDeletePosition函数删除数据*/
    bool ret = true;
    for (int i = 0; i < List.length; i++) {
        if (List.data[i] == value) {
            SeqListDeletePosition(List, i + 1);
            ret = false;
        }
    }
    if (ret) {
        printf("Don't find %d, please re-enter.\n", value);
    } else {
        printf("Delete %d success.\n", value);
    }
}

// 修改第一个匹配内容
void SeqListModifyContent(SeqList &List, ElemType sourceValue, ElemType modifyValue) {
    /*
     * 1. 匹配修改元素位置
     * 2. 修改元素*/
    bool ret = true;
    for (int i = 0; i < List.length; i++) {
        if (List.data[i] == sourceValue) {
            List.data[i] = modifyValue;
            ret = false;
            break;
        }
    }
    if (ret) {
        printf("Don't find %d, please re-enter.\n", sourceValue);
    } else {
        printf("Modify Success.\n");
    }
}

// 修改所有匹配内容
void SeqListModifyAllContent(SeqList &List, ElemType sourceValue, ElemType modifyValue) {
    /*
     * 1. 匹配修改元素位置
     * 2. 修改元素*/
    bool ret = true;
    for (int i = 0; i < List.length; i++) {
        if (List.data[i] == sourceValue) {
            List.data[i] = modifyValue;
            ret = false;
        }
    }
    if (ret) {
        printf("Don't find %d, please re-enter.\n", sourceValue);
    } else {
        printf("Modify Success.\n");
    }
}

// 查找第一个匹配元素,并返回其所在位置
void SeqListSearchContent(SeqList List, ElemType value, int &position) {
    /*
     * 1. 匹配查找内容
     * 2. 返回内容所在位置*/
    bool ret = true;
    for (int i = 0; i < List.length; i++) {
        if (List.data[i] == value) {
            position = i + 1;
            ret = false;
            break;
        }
    }
    if (ret) {
        printf("Don't find %d, please re-enter.\n", value);
    } else {
        printf("Search Success, %d at position %d.\n", value, position);
    }
}

// 查找全部匹配元素,并返回其所在位置
void SeqListSearchAllContent(SeqList List, ElemType value, int position[MAXSIZE]) {
    /*
     * 1. 匹配查找内容
     * 2. 返回所有匹配位置,用数组接收*/
    bool ret = true;
    int index = 0;
    for (int i = 0; i < List.length; i++) {
        if (List.data[i] == value) {
            position[index] = i + 1;
            index++;
            ret = false;
        }
    }
    if (ret) {
        printf("Don't find %d, please re-enter.\n", value);
    } else {
        for (int j = 0; j < index; j++) {
            printf("Search Success, %d at position %d.\n", value, position[j]);
        }
    }
}

结语

        此博客主要用于408考研数据结构C语言实现记录,内有不足,可留言,可讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chandni.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值