数据结构1

2023-05-16

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159


   

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

/*

* 2.1

线性表:零个或多个数据元素的有限序列

特点:数据元素有序的

数据元素是一对一的关系

数据元素个数是有限的

注意:数据元素的个数为0是空表

线性表有哪些常见操作?

创建和初始化 查找 插入 删除 清空(增删改查)

ADT 线性表(SequenceList)

Data

1.线性表的数据元素是一个集合{a_1....a_n},数据元素的类型DataType

2.除了第一个元素a_1无直接前驱元素外,每一个元素有且仅有一个直接的前驱元素

3.后继最后一个元素a_n外,每一个元素有且仅有一个直接的后继元素

4。每个数据元素之间的关系是一一对应的关系

Operation

初始化线性表,创建一个空的线性表List

InitList(*List)

插入 在线性表List的index下标处插入元素elem

InsertElement(*List,index,elem)

删除 删除线性表List表中第i个元素,并返回删除元素的指针e

DeleteElement(*List,index,*elem)

长度

GetLength(*List)

线性表是否为空

IsEmpty(*List)

查找 给了下标返回数据

ClearList(*List,index,*elem)

endADT

*2.2

线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表的数据元素{数组}

程序实现:

1.我们需要定义线性表的最大空间

#define MAX_SIZE 255

2.线性表里需要有统一类型的元素集合

typedef int ElementType;

typedef struct{

int id;

char *name;

}ElementType;

3.定义顺序结构

typedef struct{

ElementType datas[MAX_SIZE];

int length;

}Sqlist;

描述线性表的顺序存储结构的三个要素

存储空间的起始位置:数组datas的存储位置

线性表的最大存储容量:数组的长度MAX_SIZE

线性表的当前长度:length

地址的计算方法:

第n个数据元素的内存地址=数组的内存地址+第n个元素的下标n-1

<=>datas+i

访问元素*(datas+n-1);

postion 位置,从1开始

index 下标,从0开始

2.3

*/

#define MAX_SIZE 255

//typedef int ElementType;

typedef struct {

int id;

char * name;

}ElementType;

typedef struct {

ElementType datas[MAX_SIZE];

int length;

}SeqList;

/**

*初始化顺序表

* seqlist 要初始化的是顺序表

* elemArray 初始化要添加的元素内存数组

* length 初始化要添加的元素个数

*/

int test();

int InsertElement(SeqList* seqlist, int index, ElementType element);

int InitList(SeqList* seqlist, ElementType* elemArray, int length);

int InitList(SeqList* seqlist, ElementType * elemArray, int length)

{

if (length > MAX_SIZE)

{

printf("越界,超出数组的最大容量,初始化失败\n");

return 0;

}

seqlist->length = 0;//初始化之前顺序表长度置0

int m;

for ( m = 0; m < length - 1; m++)//每次循环都在下标i处插入数据

{

InsertElement(seqlist, m, elemArray[m]);

}

printf("初始化成功\n");

}

//实现任意位置添加

/*像顺序表中的index下标处插入元素

*seqlist 要插入的是顺序表

* index 要插入的下标

* element 要插入的元素

*/

/*

假设在第i个位置插入一个元素

*下标i以及i以后的所有数据元素后移

注意:除非i=n+1,否则必须移动数据元素的位置来适应逻辑结构的改变

*下标i的位置放入数据元素a

注意:

1.数据元素后的顺序表长度为n+1

2.插入元素后,最后一个元素的下标变为n

3.c语言数组实现规则,顺序表续航都不能超过它的最大长度

*/

int InsertElement(SeqList * seqlist, int index, ElementType element)

{

/*插入算法的举例解释

index=2插入888//index:下标

从length-1开始,到index,前面一个元素赋值给后面一个元素将插入的元素赋值给下标为index的元素

45,89,90,111,112

45,89,888,90,111,112

*/

/*算法描述*/

//1.插入后的元素空间是否超过最大空间MAX_SIZE

//2.index的值是否合法(0,MAX_SIZE-1)

//3.插入的index应该在length之内

//4.从length-1开始复制到length元素

if (seqlist->length + 1 >= MAX_SIZE)//length顺序表的长度是从1开始的

{

printf("无法插入,空间不足,数组已经满了\n");

return 0;

}

if (index<0 || index>MAX_SIZE - 1)

{

printf("要插入的位置不合法\n");

printf("只能插入允许的下标内的范围%d这样大\n", MAX_SIZE - 1);

return 0;

}

for (int j = seqlist->length; j >= index; j--)//seqlist->length是已经加1的数组最后一个元素

seqlist->datas[j] = seqlist->datas[j - 1];

seqlist->datas[index] = element;//将元素element插入到index位置

seqlist->length + 1; //表长加1

return 0;

}

int printlist(SeqList* seqlist)

{

for (int i = 0; i < seqlist->length; i++)

{

printf("%d \t %s \n", seqlist->datas[i].id, seqlist->datas[i].name);

}

return 0;

}

ElementType elemArray[] = { { 1,},{2,}, {3,}};

int main()

{

SeqList seqlist;

// InitList(&seqlist,elemArray,3);

InitList(&seqlist,elemArray,sizeof(elemArray)/sizeof(elemArray[0]));

printlist(&seqlist);

return 0;

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构1 的相关文章

  • Wireshark网络抓包疯狂聊天程序

    文章目录 一 疯狂聊天环境配置二 使用wireshark进行抓包三 分析抓包四 参考文献 一 疯狂聊天环境配置 下载好疯狂聊天软件后 xff0c 打开计算机管理 xff0c 设备管理器 网络适配器中需要禁用这几项 xff0c 否则无法双向通
  • 游戏客户端编程

    文章目录 一 代码框架二 新建项目三 演示效果 一 代码框架 本次实验使用的网游客户端框架来自课堂老师的资料 链接 xff1a https pan baidu com s 1WSkrRTFPuN1N34BsySkeaQ 提取码 xff1a
  • 数学图形与机器视觉基础(1)

    文章目录 一 图片处理及分析1 修改图片位数和颜色并进行分析2 修改图片格式并进行分析 二 用奇异值分解 xff08 SVD xff09 对一张图片进行特征值提取 xff08 降维 xff09 处理三 采用图像的开闭运算 腐蚀 膨胀 xff
  • STM32之串口通信

    文章目录 一 串口通信与USART二 程序编写输出Hello Windows三 GPIO波形参考链接 一 串口通信与USART 二 程序编写输出Hello Windows 串口通信 串口通信是一种设备间非常常用的串行通行方式 xff0c 其
  • 【FPGA】UART串口通信

    文章目录 一 通信方式1 串行通信2 并行通信 二 UART串口通信1 模块设计与时序图2 代码实现 三 测试结果1 仿真结果2 上板验证 一 通信方式 1 串行通信 串行通信是指利用一条传输线将数据一位位地顺序传送 xff08 也就是说串
  • 【FPGA】基于状态机实现自动售货机模拟

    文章目录 一 售货机功能二 售货机状态分析及模块划分三 代码实现四 上板验证 一 售货机功能 此自动售货机模拟基于EP4CE6F17C8开发板实现 xff0c 用按键 xff0c led灯 xff0c 数码管表示各个输入输出 功能 xff1
  • 【FPGA】中值滤波处理BMP图片

    文章目录 一 中值滤波二 BMP图片格式三 功能实现1 代码设计思路2 shift IP核3 代码实现 四 结果测试参考博客 一 中值滤波 中值滤波法是一种非线性平滑技术 xff0c 它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点
  • C++常用库

    以下是常用的 C 43 43 库的分类和列表 xff1a 1 标准库 iostream xff1a 提供输入和输出函数 xff0c 如 96 cout 96 和 96 cin 96 string xff1a 提供字符串类型和操作函数 xff
  • ideal使用maven时候发生org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException

    第一次使用maven创建web项目 xff0c 在访问servlet时发生错误 原因是maven默认是用的是tomcat6而项目的jdk为1 8 xff0c 二者并不支持 所以需要将maven的tomcat版本换为tomcat7或更高 在项
  • vue 项目 axios 响应拦截器 统一判断401 (登录)过期

    背景 xff1a 为了模拟token 过期 xff0c 专门把token 设置错误 xff0c 为401 界面 把axios 官网里的 复制到拦截器里 放置到request js 里 在响应器里进行判断4 5 状态码错误 以下为代码 引入a
  • 异常和异常的处理方式

    异常 1 概述 异常是一些用来封装错误信息的对象 它由异常的类型 提示信息 报错的行号提示三部分组成 2 异常的继承结构 3 异常的处理方式 当程序中遇到了异常 通常有两种处理方式 捕获或者向上抛出 当一个方法抛出异常 调用位置可以不做处理
  • A1&AlienGo--通过realsense-viewer调用相机

    使用机器狗时 xff0c 有时需要通过NX 树莓派上的系统来查看调用相机 xff0c 可以通过realsense提供的realsense viewer来查看 但是机器狗自带的视觉程序会开机自启占用相机 xff0c 所以首先需要杀掉这个进程
  • 空管大数据分析平台——COSMOS

    产品简介 COSMOS是由ALTYS公司开发的专用于CNS ATM领域的一个灵活自适应航空大数据分析解决方案 xff0c 它将航空运输业带入了数字时代 系统利用飞机和地面CNS ATM系统以及其他航空系统生成的海量数据信息 xff0c 为用
  • 雷达采集卡/雷达信号采集单元 HPx-200

    产品简介 HPx 200是一款基于PCI的高性能雷达采集卡 雷达信号采集单元 xff0c 它可以捕获并处理一个到两个模拟或8比特的数字一次雷达视频 该卡可与板级支持库一起使用来采集基本的雷达信号 xff0c 或者与SPx程序库一起使用来满足
  • 雷达模拟器 SPx Radar Simulator

    产品简介 SPx Radar Simulator可产生模拟雷达视频数据 xff0c 还可以获得地形高程数据 xff0c 并利用这些数据计算模拟雷达回波 用户可自定义静态及动态目标 xff0c 将模拟雷达信号源置于某个静态位置或自定义运动轨迹
  • 无人机拉力测试台螺旋桨的正确安装方式

    在使用无人机拉力测试台测试螺旋桨的拉力 扭矩和效率时 xff0c 怎样正确安装螺旋桨才能得到最准确的测试结果 xff1f 下图示意了螺旋桨的正确安装方式 xff1a 这个测试台装置的背后理论 xff0c 经过实验验证由于测试台本身造成的障碍
  • 无人机设计过程中的计算和假设

    当我们想要设计一架新的无人机时 xff0c 首先要确定我们要设计一架什么样的无人机 xff0c 例如多大的起飞重量 几个旋翼 续航时间等 无人机工程过程通常作为 设计循环 运行 xff0c 指的是设计过程的循环性质 构建无人机的第一个版本依
  • 如何计算电机极数和无刷电机的Kv值?

    介绍 如果您正在制造无人机 遥控车或任何使用无刷直流 BLDC 电机的机器 xff0c 您可能会遇到电机极数和电机Kv值的概念 这两个参数对于表征您的电机和估计其性能都很有帮助 在本文中 xff0c 我们将介绍这些指标的含义 如何计算和衡量
  • 无人机拉力测试台:15kg级-Flight Stand 15

    产品简介 Flight Stand 15测试台是多年无人机动力系统开发经验和经历数千个用户使用反馈不断优化的成果 该测试台对无人机电机和螺旋桨的拉力 xff0c 扭矩 xff0c 转速 xff0c 电流 xff0c 电压 xff0c 温度
  • 教你编写Python抢购代码

    想买mate40 xff0c 但总是抢不到 xff0c 所以想试着能不能写个脚本代码 第一步 xff1a 把想要抢购的商品加进购物车 xff0c 注意 xff1a 脚本是对购物车内全部商品进行下单操作 xff0c 所以不够买的商品最好先从购

随机推荐

  • Linux C/C++UDP通信实现

    文章目录 一 UDP通信流程二 代码实现1 服务器2 客户端 一 UDP通信流程 二 代码实现 1 服务器 代码如下 xff08 示例 xff09 xff1a span class token macro property span cla
  • 无人机拉力测试台:75kg级-1780系列

    产品简介 1780系列测试台是专为无人机设计师的简化测试需求而设计 xff0c 同时配有易于使用的支持手动控制功能的操作软件 xff0c 并支持设计师使用定制的预编写脚本实现自动化测试 测量结果完成后可以实时保存并导出到 CSV格式文件 试
  • 无人机拉力测试台:5kg级-1580测试台

    产品简介 1580测试台对无人机动力系统的无刷电机和螺旋桨进行测试 xff0c 测量高达5kgf的拉力和2Nm的扭矩 xff0c 以及电压 xff0c 电流 xff0c 功率 xff0c 电机转速 xff0c 振动和效率 该测试台大大减少了
  • 共轴双旋翼无人机动力测试解决方案

    前言 与传统的多旋翼无人机架构相比 xff0c 共轴式多旋翼无人机具有结构紧凑 上下旋翼反转扭矩相消和良好的操控性等优势 xff0c 同时可以为整机提供更大的动力 xff0c 尤其在直升机领域 xff0c 共轴双旋翼的设计受到了越来越多军工
  • 航空数据链协议解析与仿真测试

    航空数据链概述 航空数据链通信是指飞机和地面站系统之间一种数字通信技术 该技术通过使用互连路由器和终端系统的航空电信网络 ATN xff0c 以及作为空中 地面数据链技术的VHF数字链路模式2 VDL mode 2 VDL2 来实现管制员与
  • 无人机拉力测试台研制&测试过程中的9个关键技术点

    随着近年来无人机行业的飞速迭代发展 xff0c 越来越多的相关从业人员选择使用拉力测试台来测试并优化无人机的动力系统 xff0c 本文尝试从无人机拉力测试台的研制和使用角度来阐述无人机拉力测试中的9个关键技术点 1 电磁干扰方面的考虑 测试
  • 无人机动力系统优化测试平台-15kg级-Flight Stand 15

    产品简介 通过Flight Stand 15测试台对电机和螺旋桨的拉力 xff0c 扭矩 xff0c 转速 xff0c 电流 xff0c 电压 xff0c 温度 xff0c 空速 xff0c 螺旋桨效率和电机效率的测量帮助您精准地描述和评估
  • 无人机飞行控制实验平台

    无人机在研制过程中需要不断地进行飞行测试 xff0c 而测试的过程不是万无一失的 xff0c 飞行过程中发生任何错误都有可能会导致无人机的损毁或破坏 xff0c 更严重地甚至会造成外界伤害 基于此我们推出了无人机的三旋转自由度 3 DOF
  • ADS-B教学实验方案

    ADS B教学系统是为了让学生学习ADS B原理 ADS B系统组成 ADS B信号处理技术 可以通过ADS B教学系统进一步研究分析ADS B位置的精度 准确性 稳定性 实时性 xff0c 设计基于ADS B的空中碰撞告警系统 xff0c
  • ROS系列:工作空间及功能包创建

    前言 分享一下ROS开发的基础教程 xff0c 全部自己手敲 xff0c 希望能帮到正在学习的你 ROS在WIKI上也有教程 xff0c 个人觉得太过臃肿 xff0c 可以简化点 xff0c 毕竟大家都赶着投胎 xff0c 哈哈哈哈哈 一
  • java UDP DatagramSocket接收不到数据

    今天联系这个通信 xff0c 接收端总是接收不到数据 xff01 排除代码本身有可能出现的错误 xff0c 比如地址 xff0c 数据宝包 我称它为数据宝宝 xff09 等等自己粗心的错误后还是不行 xff0c 我查看各种方法 xff0c
  • Python与爬虫有什么关系?

    爬虫一般是指网络资源的获取 xff0c 因为python的脚本特征 xff0c Python易于配置 xff0c 对字符的处理也非常灵活 xff0c 加上python有丰富的网络抓取模块 xff0c 所以两者经常联系在一起 接下来我们可以详
  • C++中struct和class的区别

    1 C 43 43 中struct和class的区别 C 43 43 中的struct其实是为了与C的兼容性而留下来的 C 43 43 的struct和class其实大部分都是相同的用法 xff0c 基本上可以用class做的事都可以用st
  • L298N驱动步进电机,有stm32代码亲测可用

    1 1 步进电机相关概念 相数 xff1a 产生不同对极N S磁场的激磁线圈对数 xff0c 常用 m 表示 例如 xff1a 二相四线电机 xff0c 就有两对极N S磁场的激磁线圈 xff0c 四个线圈 上图可知 xff0c A 43
  • C++成员初始化

    C 43 43 成员分为 xff1a 一般变量 xff0c const修饰变量 xff0c 引用类型成员 xff0c static成员 xff0c const staic成员 同static const xff0c 自定义类型对象 clas
  • HTTP协议解析

    目录 1 HTTP协议的概念 2 HTTP协议格式 3 HTTPS 1 HTTP协议的概念 在我们之前学习网络的过程中 xff0c 我们知道了目前主流网络分层模型共分为5层 xff0c 分别是物理层 xff0c 数据链路层 xff0c 网络
  • cmake编译opencv开源项目报错问题

    最近使用cmake在编译一个配置了opencv环境的c 43 43 开源项目时遇到如下问题 CMake Warning at D opencv4 OpenCVConfig cmake 176 message Found OpenCV Win
  • Ubuntu系统换源

    简单介绍一下源 xff0c 源就是一个大仓库 xff08 类似应用商店 xff09 xff0c 系统下载软件需要从这个仓库下载 xff0c 因为Ubuntu默认源是国外的 xff0c 所以在下载东西的时候会出现下载速度很慢的情况 xff0c
  • 字符串的简单介绍和字符串的大小比较

    以前就写过一篇关于String的文章 xff0c 今天再来写一篇 xff0c 更加深入了解一下String类 x1f550 1 String类的定义 x1f551 2 String类的创建 x1f552 3 字符串的大小比较 1 之前在C语
  • 数据结构1

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43