数据结构-数组篇

【雕爷学编程】一款功能强大、易于使用、适用范围广泛的嵌入式Python解释器:MicroPython 1、语法方面:Micropython与Python语法基本相同,但是由于Micropython是专门为嵌入式设备设计的,因此它对标准Python的功能进行了精简和优化,去掉了一些不必要的功能,同时增加了一些嵌入式系统特有的功能。3、库方面:Micropython与Python完全不同的是,它的标准库并不完全与Python的标准库一致,特别是一些底层库和硬件相关的库。5、丰富的库和工具支持:MicroPython有丰富的库和工具支持,如GPIO控制、网络连接、传感器数据采集等,可满足各种应用需求。 阅读详情

数组采取连续存储,代码定义了一个结构体,里面包含数组的信息,实现代码如下:

#include <stdio.h>
#include <malloc.h>

void init(struct array *arr, int length);  //初始化
int add(struct array *arr, int item);      //添加元素
int remove(struct array *arr, int address, int *removeItem);  //删除元素
void sort(struct array *arr);   //排序(升序)
void show(struct array *arr);   //显示所有元素
int insert(struct array *arr, int address, int item);  插入元素
int reverse(struct array *arr);   //倒序

struct array
{
	int *pBase;  //第一个元素的地址
	int len;     //数组的总长度
	int allnum;  //数组当前元素的个数
};

void main()
{
	struct array arr;
	int bo = 1;
	int choose;
	int length;
	int item;
	int address;
	int removeItem;
	while(bo == 1)
	{
		printf("对此数组提供以下功能:\n");
		printf("1. 初始化\n");
		printf("2. 添加元素\n");
		printf("3. 插入元素\n");
		printf("4. 删除元素\n");
		printf("5. 倒序\n");
		printf("6. 排序\n");
		printf("7. 显示所有元素\n");
		printf("请选择要进行的操作(选0退出):");
		scanf("%d", &choose);
		switch(choose)
		{
		case 1:
			printf("请输入要初始化的长度:");
			scanf("%d", &length);
			init(&arr, length);
			printf("初始化成功!\n\n");
			break;
		case 2:
			printf("请输入要添加的元素:");
			scanf("%d", &item);
			add(&arr, item);
			break;
		case 3:
			while(1)
			{
				printf("请输入要插入的位置: ");
				scanf("%d", &address);
				if(address > arr.allnum+1 || address <=0)
				{
					printf("不在范围内, 请重新输入!\n");
					continue;
				}
				break;
			}
			printf("请输入要插入的元素: ");
			scanf("%d", &item);
			insert(&arr, address, item);
			break;
		case 4:
			printf("请输入要删除的元素的位置:");
			scanf("%d", &address);
			if(address > arr.allnum || address <= 0)
			{
				printf("要删除的元素不在范围内!");
			}
			else
			{
				remove(&arr, address, &removeItem);
				printf("成功删除数字%d\n\n", removeItem);
			}
			break;
		case 5:
			reverse(&arr);
			break;
		case 6:
			sort(&arr);
			break;
		case 7:
			show(&arr);
			break;
		default:
			exit(-1);
		}
	}
}

//初始化
void init(struct array *arr, int length)
{
	arr->pBase = (int*)malloc(sizeof(int) * length);
	arr->len = length;
	arr->allnum = 0;
}

//添加元素
int add(struct array *arr, int item)
{
	if(arr->allnum < arr->len)
	{
		arr->pBase[arr->allnum] = item;
		arr->allnum++;
		printf("添加成功!\n\n");
		return 1;
	}
	else
	{
		printf("数组已满,无法添加!\n\n");
		return 0;
	}
}
//插入元素
int insert(struct array *arr, int address, int item)
{
	int i;
	if(arr->allnum < arr->len)
	{
		for(i=arr->allnum; i>=address; i--)
		{
			arr->pBase[i] = arr->pBase[i-1];
		}
		arr->pBase[address-1] = item;
		printf("插入成功!\n\n");
		arr->allnum++;
		return 1;
	}
	else
	{
		printf("数组已满,无法插入!\n\n");
		return 0;
	}
}

//倒序
int reverse(struct array *arr)
{
	int i;
	int temp;
	int index = arr->allnum/2;
	if(arr->allnum == 0)
	{
		printf("数组为空!\n\n");
		return 0;
	}
	for(i=0; i<index; i++)
	{
		temp = arr->pBase[i];
		arr->pBase[i] = arr->pBase[arr->allnum-(i+1)];
		arr->pBase[arr->allnum-(i+1)] = temp;
	}
	printf("倒序成功!\n\n");
	return 1;
}

//排序
void sort(struct array *arr)
{
	int i, j, temp;
	if(arr->allnum == 0)
	{
		printf("数组为空!\n\n");
		return;
	}
	else
	{
		for(i=0; i<arr->allnum; i++)
		{
			for(j=i+1; j<arr->allnum; j++)
			{
				if(arr->pBase[i] > arr->pBase[j])
				{
					temp = arr->pBase[i];
					arr->pBase[i] = arr->pBase[j];
					arr->pBase[j] = temp;
				}
			}
		}
		printf("排序成功!\n\n");
	}
}

//删除元素
int remove(struct array *arr, int address, int *removeItem)
{
	int i;
	if(arr->allnum == 0)
	{
		printf("数组为空!\n\n");
		return 0;
	}
	else
	{
		*removeItem = arr->pBase[address-1];     //将被删除的数保存在removeItem中
		for(i=address; i<arr->allnum; i++)
		{
			arr->pBase[i-1] = arr->pBase[i];
		}
		arr->allnum--;
		return 1;
	}
}

//查看所有元素
void show(struct array *arr)
{
	int i;
	for(i=0; i<arr->allnum; i++)
	{
		printf("%d ", arr->pBase[i]);
	}
	printf("\n\n");
}
第1章 大数据概述 三次信息化浪潮 信息化浪潮 发生时间 标志 解决的问题 代表企业 第一次 1980年前后 个人计算机 信息处理 Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 第二次 1995年前后 互联网 信息传输 阅读详情

相关推荐

FPGA进位链(Carry Chain)实战:从Xilinx CARRY8原语到性能优化全解析

本文深入解析了FPGA进位链(Carry Chain)的原理与应用,重点剖析了Xilinx CARRY8原语的端口功能与内部机制。通过实测数据揭示了进位链的真实延迟特性与温度影响,并详细阐述了如何利用DI和S信号进行动态路径优化、实现减法运算与条件进位选择,从而有效提升设计性能。最后,文章探讨了系统级的流水线拆分、布局约束等实战优化策略与常见陷阱。

weixin_29313817的博客 453

数据结构(严版)课本代码重敲——第七章

数据结构 第七章 图 四种基本存储结构之邻接矩阵表示法 1 /* 2 * 范围:第七章 图 3 * 日期:2018/4/1 4 */ 5 6 /* 7 笔记: 8 enum < 枚举类型名> {< 枚举表>}; 9 enum day {Sun,Mon,Tue,Wed,Thu,Fri,Sat};...

weixin_30404405的博客 229

国产信创服务器软硬件兼容情况1 --- ARM架构

信创,即信息技术应用创新产业,它是数据安全、网络安全的基础,也是新基建的重要组成部分...

一只猿的自我修养 4741

对严老师的Dijkstra算法中path数组有点疑问以及个人的简化

Dijkstra算法中path保存路径上的节点 但是有行代码开始我不理解,就是       path[w] =path[v];  path[w][w] =1;    //path[w] =path[v]+[w] 开始我的理解是:  path[w] =path[v];   应该是后面代码的简写:  for (j=0;j 但是就算是上面的理解,那么对于 path[w] =path[v]+[w

john2522的专栏 3187

从原理到接法全面了解三相电

从原理到接法全面了解三相电

viixin的博客 1万+

CanMV K230实战:用MicroPython玩转AI视觉识别(附完整代码)

本文详细介绍了如何使用MicroPython在CanMV K230开发板上实现AI视觉识别,包括环境搭建、摄像头配置、模型部署及优化技巧。通过实战案例(如智能门禁和工业分拣机器人),展示如何快速开发低门槛的嵌入式AI应用,特别适合初学者和嵌入式开发者。

x8y9z0的博客 1143

数据结构与算法题之数组篇

1数组中的重复数字 Leetcode 287. Find the DuplicateNumber 寻找重复数字 Given an array nums containing n +1 integers where each integer is between 1 and n (inclusive),prove that at least one duplicate number must e

weixin_37974811的博客 495

Proteus-51单片机-LCD1602显示DS1302时钟

本文详细介绍了如何使用Proteus仿真51单片机配合LCD1602显示DS1302时钟的步骤,包括DS1302时钟芯片的主要特性、引脚定义、外围电路以及LCD1602的原理和技术参数。此外,还讲解了LCD1602的指令集和显示字符的方法,并给出了初始化及显示操作的步骤。

让你爱上电路设计 6980

详解数据结构之-数组篇

数组一旦初始化就是连续的内存空间,用来存储一类相同数据类型的元素。数组数据结构的特性是支持下标随机访问,最好时间复杂度为O(1),最坏时间复杂度为O(n)。

BASK2312的博客 1359

HBase学习二:RegionServer详解

RegionServer是HBase系统中最核心的组件,主要负责用户数据写入、读取等基础操作。RegionServer组件实际上是一个综合体系,包含多个各司其职的核心模块:HLog、MemStore、HFile以及BlockCache。一个RegionServer由一个(或多个)HLog、一个BlockCache以及多个Region组成。其中,HLog用来保证数据写入的可靠性;BlockCache可以将数据块缓存在内存中以提升数据读取性能;

qwerty1372431588的博客 747

华为OD机试真题 新系统 9月16号 【园区基站节能部署规划】

华为OD机试真题 新系统【园区基站节能部署规划】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【园区基站节能部署规划】多语言题解。

qq_45776114的博客 357

数据结构数组篇习题

DAY1 1.数组元素的下标值越大,存取时间越长,这样的说法正确吗? 答案:错误 2.下列哪些不是线性表? A.队列 B.关联数组 C.栈 D.链表 答案:B 线性表具有如下的结构特点: 1.均匀性:虽然不同数据表的数据元素可以是各种各样的, 但对于同一线性表的各数据元素必定具有相同的数据类型和长度。 2.有序性:各数据元素在线性表中的位置只取决于它们的序号,数据元素之前的相对位置是线性的,即存在唯一的“第一个“和“最后一个”的数据元素,除了第一个和最后一个外,其它元素前面均只有一个数据元素(直接前驱)和后

qq_46813387的博客 1826

AMBA-CHI协议详解(五)

 每个事务由许多不同的packets组成,这些数据包通过互连(interconnect)传输。packets内的一组ID域段用于提供有关包的附加信息。

Crazzy_M的博客 1961

重学数据结构之数组篇

数组在我们日常的编程工作中会经常用到,它不仅仅是一种编程语言的数据类型,还是一种最基础的数据结构。今天我们来重新认识一下它。 文章目录数组是什么?关键词数组是如何通过下标随机访问元素的插入和删除操作低效原因数组越界问题数组和容器的适用场景为什么数据的下标索引是从零开始面试问题 数组是什么? 数组是一种线性表数据结构,用一组连续的内存空间,来存储一组具有相同类型的数据。 关键词 线性表 连续的内存空间和相同类型的数据 线性表,表示数据像糖葫芦一样被串起来,每个数据最多只有前后两个方向。除了数组,其他线性表

wayne214的博客 600

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据结构基础篇之数组

在每一种语言中都有数组这种数据结构,虽然数组是一种最基本的数据结构,但是我估计有很少人能理解数组的精髓 为什么数组的下标从0开始,而不是从1? 介绍几个名词 1 线性表 数据排成像一条线一样的结构,数据最多只有前和后两个方向 2连续的内存空间和相同类型的数据 ...

MAMAIMAI的博客 342

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据结构基础篇之数组篇章

数据结构基础篇之数组篇章

2301_76874968的博客 1029

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数据结构之数组篇

数据结构之数组篇 什么是数组? Array 对象用于在单个的变量中存储多个值。 数组对象的作用是:使用单独的变量名来存储一系列的值。 创建和初始化数组 let arr = new Array() //声明并初始化一个数组 let arr = [1,2,3] // 推荐这种方式声明数组 Array常用方法 push :向数组的末尾添加一个或更多元素,并返回新的长度 let a = [1,2,3]...

weixin_43925947的博客 184

数据结构——树状数组篇

线段树是一个很好的维护区间关系的这样的一个数据结构,但是,很多时候我们可以用更小空间、更快速度(更大尺寸呢、,全景天窗,五菱宏光?)的数据结构来维护一个前缀关系。 上面的这张图是表示的一个有8个叶子节点的线段树,接下去,我们给它进行一个变形: 然后呢,我们把2、4、6、8、……这样的元素推到最顶端的空上边去,想让2表示1~2这段区间,让4表示1~4这段区间,让6表示5~6这段区...

既然弱小,就只顾变强就是了 444

数据结构与算法之数组篇

文章目录1. 数组简介2. 数组的常见操作2.1 按照下标随机访问操作2.2 数组的插入2.3 数组的删除2.4 数组的更新3. 总结 1. 数组简介 数组(Array)是一种 线性表(将数据排成一条线一样的结构) 数据结构,用一组 连续内存空间 来存储一组具有 相同类型 的数据。 2. 数组的常见操作 数组最常见的操作无非增删改差,下面分别来对各个操作进行介绍,假设数组类的定义如下: public class Array{ // 用于保存数据 public int data[];

村雨遥 710

Java数据结构数组篇

Java数据结构数组篇 什么是数据结构? 数据在计算机中的存储结构,即数据在计算机中是如何摆放的。 名称 优点 缺点 队列 提供先进先出的存取方式 存取其他项很慢 链表 插入快,删除快 查找慢 红黑树(平衡树) 查找、插入,删除都快 算法复杂 2-3-4树(平衡树) 查找、插入,删除都快 算法复杂 哈希表 插入、通过关键字存取快 删除慢 堆 插入、删除快,对最大数据的项的存取很快 对其他数据项存取蛮 图 对现实世界建模 有些算法复杂且慢 数据结构和算法的重要性 算

journey_BOY的博客 274

数据结构- 数组篇

摘要 初衷 实现一个静态数组(python 版) 1 初衷 工作了一段时间后,发现基础实在是太重要了,老话说: 万丈高楼平地起。地基不牢,肯定跑不快,天花板也愈发明显。 除了传统互联网业务,其实认知外围还有很多有趣的事情可以去做,而且这些事情更考验基础能力。躬身入局,探索其中的乐趣。 比如我现在做的事情,基本脱离传统互联网业务,遇到了更细微的场景。比如现在做的 ae 二次开发...

u012780655的博客 163

算法与数据结构篇 - 数组

计算与数据结构篇 - 数组 数据结构中,从结构上来说,分为线性表和非线性结构。 线性表,线性表就是数据排成像一条线一样的结构,每个线性表上的数据最多只有前和后两个方向。 非线性表,是因为,在非线性表中,数据之间并不是简单的前后关系。 数组 - 为什么数组要从0的下标开始? 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 连续的内存空间和相同类型的...

stark张宇 1671

数组越界什么意思_重学数据结构之数组篇

数组在我们日常的编程工作中会经常用到,它不仅仅是一种编程语言的数据类型,还是一种最基础的数据结构。今天我们来重新认识一下它。数组是什么?数组是一种线性表数据结构,用一组连续的内存空间,来存储一组具有相同类型的数据。关键词线性表连续的内存空间和相同类型的数据线性表,表示数据像糖葫芦一样被串起来,每个数据最多只有前后两个方向。除了数组,其他线性表结构的还有, 栈、链表、队列等。与之对应的就是非线性表,...

weixin_39922004的博客 667

C/C++数据结构之动态数组篇

手把手带你从初识动态数组到手写简单版本的c++vector容器

qq_63883017的博客 1万+

数据结构篇之线性表——数组

数据结构篇之线性表——数组1、线性表的类型定义①线性结构特点②线性表的概念2、线性表的顺序表示3、结构示意图4、数组的增删①新增元素②删除元素5、总结 1、线性表的类型定义 ①线性结构特点 在数据元素的非空有限集合中: (1)存在唯一的一个被称做“第一个”的数据元素; (2)存在唯一的一个被称做“最后一个”的数据元素; (3)除第一个之外,集合中的每个数据集元素均只有一个前驱; (4)除最后一个之...

SGdan_qi的博客 3930

数据结构篇——数组扩展(稀疏数组)

其实稀疏数组更多的是一种思想,而不是一种全新独立的数据结构。它本质上也就是一个二维数组。 稀疏数组简介以及应用场景 当一个数组容量很大,但是其中有效数据很少且是稀疏分布时,我们就可以使用稀疏数组来减少不必要的内存消耗。 注:这里的有效数据,也可以理解为与绝大部分数据不同的。加上这个理解后,稀疏数组的应用场景会多很多。 其实思想很简单,构建出来一个二维数组,然后把有效数据的坐标都一一标记出来放进二维...

秋千不会坠的博客 370
上一篇: python爬取电影天堂首页
下一篇: 数据结构-链表篇
SSSuperbeyond
博客等级 码龄8年 22粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值