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

news2024/9/24 13:24:56

目录

前言

顺序表实现

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语言实现记录,内有不足,可留言,可讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

node+vue微信小程序的社区后勤报修系统

社区后勤报修系统小程序进行总体设计和详细设计。总体设计主要包括小程序功能设计、小程序总体结构设计、小程序数据结构设计和小程序安全设计等&#xff1a;详细设计主要包括社区后勤报修系统小程序数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对社区后…

目标检测论文阅读:DETR算法笔记

标题&#xff1a;End-to-End Object Detection with Transformers 会议&#xff1a;ECCV2020 论文地址&#xff1a;https://link.springer.com/10.1007/978-3-030-58452-8_13 官方代码&#xff1a;https://github.com/facebookresearch/detr 作者单位&#xff1a;巴黎第九大学、…

【Linux】进程替换

文章目录进程程序替换替换原理替换函数函数返回值函数命名理解在makefile文件中一次生成两个可执行文件总结:程序替换时运行其它语言程序进程程序替换 程序要运行要先加载到内存当中 , 如何做到? 加载器加载进来,然后程序替换 为什么? ->冯诺依曼 因为CPU读取数据的时候只…

【原创】java+swing+sqlserver药品管理系统设计与实现

之前数据库都是用的mysql&#xff0c;今天我们使用sqlserver在配合swing来开发一个药品管理系统。方便医院工作人员进行药品的管理&#xff0c;基础功能基本都是一些增删改查操作。 功能分析&#xff1a; 药品管理系统主要提供给管理员和员工使用&#xff0c;功能如下&#x…

[python]win10安装gym

anconda3里面安装&#xff1a; pip install gym[atari,accept-rom-license]0.26.1 AutoRom 测试结果&#xff1a; import gym envgym.make(Assault-v4,render_modehuman) env.reset() for _ in range(100000): actionenv.action_space.sample() env.step(action) env.c…

数据结构——算法的时间复杂度

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;生命中曾经有过的所有灿烂&#xff0c;都终究需要用寂寞来偿还。——《百年孤独》 目录 一、前言 二、正文 1.算法效率 1.1如何衡量一个算法的好坏 1.2算法的复杂度 2. 时间复杂度 2.1时间复杂度的…

元胞自动机

文章目录前言文献阅读摘要主要贡献方法框架实验结论元胞自动机元胞自动机是什么&#xff1f;构成及规则案例及代码实现总结前言 This week,the paper proposes a Multi-directional Temporal Convolutional Artificial Neural Network (MTCAN) model to impute and forecast P…

部署dapr的辛酸历程

前言dapr大概的了解&#xff0c;个人理解他就是一个分布式服务的管理&#xff0c;把微服务常用的组件(缓存&#xff0c;消息中间件、分布式锁、安全id4等)和监控以及服务注册、发现等等一系列功能以一个很抽象的方式管理起来。可能我们部署微服务用consul、ocelot、polly套件、…

DDD单根 聚合根 实体 值对象

前言2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software &#xff08;领域驱动设计&#xff09;&#xff0c;简称Evans DDD。快二十年的时间&#xff0c;领域驱动设计在不断地发展&#xff0c;后微服务时代强调的东西&#xff0c;在国…

Nginx网站服务及优化

Nginx网站服务及优化一、简介1、Nginx概述2、Nginx和Apache的优缺点比较3、Nginx和Apache最核心的区别二、Linux中的I/O三、Nginx编译安装详细1、关闭防火墙、安装依赖关系2、新建用户nginx便于管理3、将压缩包传入到/opt目录下&#xff0c;编译安装4、做软连接并启动nginx5、创…

软件测试简历个人技能和项目经验怎么写?(附项目资料)

目录 前言 个人技能 项目实战经验 项目名称&#xff1a;苏州银行项目&#xff08;webapp&#xff09; 项目描述&#xff1a; 项目名称&#xff1a;中国平安项目&#xff08;webapp&#xff09; 项目描述&#xff1a; 项目名称&#xff1a;苏宁易购项目&#xff08;webapp&a…

软件体系结构(期末复习)

文章目录软件体系结构软件体系结构概论软件体系结构建模软件体系结构风格统一建模语言基于体系结构的软件开发软件体系结构 软件体系结构概论 软件危机是指计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的表现: 软件危机的原因: 软件工程的基本要素&#xf…

轻松上手nacos使用

三步上手nacos使用1.为什么使用nacos?2.如何使用nacos1.为什么使用nacos? 1.服务发现中心。 微服务将自身注册至 Nacos&#xff0c;网关从 Nacos 获取微服务列表。 2.配置中心。 微服务众多&#xff0c;它们的配置信息也非常复杂&#xff0c;为了提高系统的可维护性&#xf…

每天一个linux命令---awk

awk命令 1. 简介 awk是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具&#xff0c;grep、sed、awk并称为shell中文本处理的三剑客。 AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho&am…

1.OCR--文本检测算法FCENet

文章目录1.简介2.主要工作2.1 傅里叶轮廓嵌入(Fourier Contour Embedding)2.2 FCE模型3.代码实现参考资料欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 论文:Fourier Contour Embedding for Arbitrary-Shaped Text Detection 1.简介 这…

设计模式之中介模式与解释器模式详解和应用

目录1 中介模式详解1.1 中介模式的定义1.1.1 中介者模式在生活场景中应用1.1.2 中介者模式的使用场景1.2 中介模式的通用实现1.2.1 类图设计1.2.2 代码实现1.3 中介模式应用案例之聊天室1.3.1 类图设计1.3.2 代码实现1.4 中介者模式在源码中应用1.4.1 jdk中Timer类1.5 中介者模…

logd守护进程

logd守护进程1、adb logcat命令2、logd守护进程启动2.1 logd文件目录2.2 main方法启动3、LogBuffer缓存大小3.1 缓存大小优先级设置3.2 缓存大小相关代码位置android12-release1、adb logcat命令 命令功能adb bugreport > bugreport.txtbugreport 日志adb shell dmesg >…

kafka-11-kafka的监控工具和常用配置参数

kafka官方文档 参考Kafka三款监控工具比较 1 查看kafka的版本 进入kafka所在目录&#xff0c;通过查看libs目录下的jar包。 2.11是scala的版本&#xff0c;2.0.0是kafka的版本。 测试环境 #systemctl start zookeeper #systemctl start kafkka 2 kafka的常用配置 Kafka使用…

SpringBoot2.x实战专题——SpringBoot2 多配置文件【开发环境、测试环境、生产环境】

SpringBoot2.x实战专题——SpringBoot2 多配置文件【开发环境、测试环境、生产环境】 目录SpringBoot2.x实战专题——SpringBoot2 多配置文件【开发环境、测试环境、生产环境】一、创建一个SpringBoot项目二、修改pom.xml中SpringBoot的版本三、配置文件3.1 application-dev.ym…

2.TCP/UDP什么时候选择,HTTP,使用TCP/UDP的协议有哪些,TCP三次握手四次挥手大概流程,为什么要三次握手.

文章目录1.什么时候选择 TCP,什么时候选 UDP?2. HTTP 基于 TCP 还是 UDP&#xff1f;3.使用 TCP 的协议有哪些?使用 UDP 的协议有哪些?4.TCP 三次握手和四次挥手&#xff08;非常重要、传输层&#xff09;5.为什么要三次握手?1.什么时候选择 TCP,什么时候选 UDP? UDP 一般…