当前位置: 首页 > news >正文

[数据结构]:顺序表(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语言实现记录,内有不足,可留言,可讨论。

http://www.lryc.cn/news/13859.html

相关文章:

  • 【大厂高频必刷真题100题】《有序矩阵中第 K 小的元素》 真题练习第27题 持续更新~
  • 两年外包生涯做完,感觉自己废了一半....
  • 02- OpenCV绘制图形及图像算术变换 (OpenCV基础) (机器视觉)
  • 猜数字大小 II
  • CCNP350-401学习笔记(251-300题)
  • 掌握MySQL分库分表(二)Mysql数据库垂直分库分表、水平分库分表
  • 算法训练营 day50 动态规划 单词拆分 多重背包理论基础
  • 一文3000字用Postman从0到1实现UI自动化测试
  • 2023年美国大学生数学建模C题:预测Wordle结果建模详解+模型代码(一)
  • spring-boot 整合 前端框架 React 增删改查(附源码)
  • 未来的城市:智慧城市定义、特征、应用、场景
  • Qt线程池QThreadPool使用示例
  • 【Spring】难理解的Aop编程 | 入门?
  • 2 月 25 日,论道京城 | 云原生开源项目应用实践报名开启
  • 第五、六章 贪心算法、回溯算法
  • k8s-kubectl命令
  • 36、基于51单片机频率计 LCD 1602显示系统设计
  • 【vue】elemente-ui table toggleRowSelection 默认选择无效[已解决]
  • SpringMVC DispatcherServlet源码(5) HttpMessageConverter扩展
  • day16_API
  • 十二月券商金工精选
  • JUnit
  • MySQL学习笔记4-乐观锁和悲观锁
  • 踩大坑:json格式存储wav二进制内容
  • 加入CSDN的一年,我收获了这些……
  • 【Python学习笔记】44.Python3 MongoDB和urllib
  • LVS中的keepalived高可用
  • 【Vue3】组件数据懒加载
  • 基于 SmartX 分布式存储的 iSCSI 与两种 NVMe-oF 技术与性能对比
  • Anaconda 安装 Pytorch