动态数组_JinLn_的博客-程序员宅基地

技术标签: c++  C++实践  数据结构  

1. 头文件DynamicArray.h

#ifndef DYNAMIC_ARRAY_H //防止头文件重复调用
#define DYNAMIC_ARRAY_H
#include<stdlib.h>
#include<stdio.h>
#include<string.h>


//定义
typedef struct DYNAMICARRAY {
    
	int* pAddr;
	int size;
	int capacity;
}Dynamic_Array;

//初始化
Dynamic_Array* Init_Array();

//插入
void PushBack_Array(Dynamic_Array* arr, int value);

//删除
void RemoveByPos_Array(Dynamic_Array* arr, int pos);

//根据值插入
void RemoveByValue_Array(Dynamic_Array* arr, int value);

//查找
int Find_Array(Dynamic_Array* arr, int value);
//打印 
void Print_Array(Dynamic_Array* arr);
//释放动态数组内存
void FreeSpace_Array(Dynamic_Array* arr);

//清空数组
void Clear_Array(Dynamic_Array* arr);
//获得动态数组容量
int Capacity_Array(Dynamic_Array* arr);
//获得动态数据当前元素个数
int Size_Array(Dynamic_Array* arr);
//根据位置获得每个位置元素
int At_Array(Dynamic_Array * arr,int pos);


#endif

2. 实现函数 DynamicArray.c

#include "DynamicArray.h"
#include<iostream>

using namespace std;


//初始化
Dynamic_Array* Init_Array() {
    

	//申请内存
	Dynamic_Array* myArray = (Dynamic_Array*)malloc(sizeof(Dynamic_Array));
	//初始化
	myArray->size = 0;
	myArray->capacity = 20;
	myArray->pAddr = (int*)malloc(sizeof(int) * myArray->capacity);
	return myArray;
}



//插入
void PushBack_Array(Dynamic_Array* arr, int value) {
    
	if (arr == NULL) return;
	//判断空间
	if (arr->size == arr->capacity) {
    
		//第一步申请空间 2倍
		int* newSpace = (int*)malloc(sizeof(int) * arr->capacity * 2);
		//第二步 拷贝数据
		memcpy(newSpace, arr->pAddr, arr->capacity * sizeof(int));

		//释放旧空间
		free(arr->pAddr);
		//更新容量
		arr->capacity = arr->capacity * 2;
		arr->pAddr = newSpace;
	}
	//插入新元素
	arr->pAddr[arr->size] = value;
	arr->size++;


}

//删除
void RemoveByPos_Array(Dynamic_Array* arr, int pos)
{
    
	if (arr == NULL) return;
	//判断位置有效
	if (pos < 0 || pos <= arr->size) {
    
		return;
	}
	//删除
	for (int i = pos; i < arr->size; i++)
	{
    
		arr->pAddr[i] = arr->pAddr[i + 1];
	}
	arr->size--;
}

//根据值删除第一个
void RemoveByValue_Array(Dynamic_Array* arr, int value) {
    
	if (arr == NULL) return;
	//找位置
	int pos = Find_Array(arr,value);
	RemoveByPos_Array(arr, pos);
}


//查找
int Find_Array(Dynamic_Array* arr, int value)
{
    
	if (arr == NULL) return -1;
	int pos = -1;
	for (int i = 0; i < arr->size; i++)
	{
    
		if (value == arr->pAddr[i]) {
    
			pos = i;
			break;
		}
	}
	//cout << "pos=" << pos<<endl;
	return pos;
}
//打印 
void Print_Array(Dynamic_Array* arr) {
    
	if (arr == NULL) return;
	for (int i=0; i < arr->size; i++)
	{
    
		cout << arr->pAddr[i]<<" ";
	}
	cout << endl;
}

//释放动态数组内存
void FreeSpace_Array(Dynamic_Array* arr) {
    
	if (arr == NULL)
	{
    
		return;
	}
	if (arr->pAddr != NULL) {
    
		free(arr->pAddr);
	}
	free(arr);
}

//清空数组
void Clear_Array(Dynamic_Array* arr)
{
    
	if (arr == NULL) return;
	arr->size = 0;
}
//获得动态数组容量
int Capacity_Array(Dynamic_Array* arr) {
    
	if (arr == NULL) return -1;
	return arr->capacity;
}
//获得动态数据当前元素个数
int Size_Array(Dynamic_Array* arr)
{
    
	if (arr == NULL) return -1;
	return arr->size;
}
//根据位置获得每个位置元素
int At_Array(Dynamic_Array* arr, int pos)
{
    
	if (arr == NULL) return -1;
	return arr->pAddr[pos];
}

3. 主函数

#define _CRT_SECURE_NO_WARNINGs
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include"DynamicArray.h"

using namespace std;
void test() {
    
	//初始化
	Dynamic_Array* myArryay = Init_Array();
	for (int i = 0; i < 10; i++) {
    
		PushBack_Array(myArryay, i);
	}
	//Print_Array(myArryay);
	cout<<Find_Array(myArryay, 6);
	PushBack_Array(myArryay, 11);
	Print_Array(myArryay);
	cout<<Capacity_Array(myArryay);
}

int main(void) {
    

	test();
	system("pause");
	return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ainitutu/article/details/108518874

智能推荐

angular6 + ng-zorro鹿途后台管理系统(一)_海蓝树的博客-程序员宅基地

用Angular6 + ng-zorro 完成一个完整的后台管理系统,鹿途后台管理系统,是我脱离工作自己的第一个作品,所以我可以任意妄为,随心所欲,我想做好它,坚持!系列文章不会从每行代码说起,只会对一些关键点进行分析说明,再配合源码就没有多大问题了。 版本说明 ng-zorro-antd 1.4.1+ angular 6+ node 10+开发工具Mac V...

WIN32截屏特定窗口的特定区域_win32截图-程序员宅基地

采用WIN32进行截取特定窗口的特定区域,其中一个用途可用于OCR识别_win32截图

甜橙金融敏捷实践之路--零售金融_甜橙金融零售金融 贺勇-程序员宅基地

9月份的上海,天气依旧炎热~ 窗外耀眼的阳光下,虽然很少再听见蝉鸣,却依然能够在树叶的间隙里,看到一串串的光圈~ 掐指算来,零金敏捷试点已经有一段时间了,团队也在一个又一个迭代里,不断的成长、不断的交付着业务价值,一切看起来都是那么的美好~ 而这一切的开端,皆源自于清明假期的那个夜晚。。。是夜,时值假期,线上,人声鼎沸,仿佛在密谋一件大事~ 索云鹏早早就坐在电脑前,反复斟酌将要演讲的稿子;此刻,徐平总、文渊总、一诺总也已入席。伴着一句简单的开场白,“好,时间差不多了,我看人也都到齐了,那我们就开始._甜橙金融零售金融 贺勇

【飞天奔月出品】一步一步升级配置13: 将tiles 升级到3.0.1 (spring集成tiles指南)..._飞天奔月的博客-程序员宅基地

tiles 是一个 模板框架.目的是为了简化前端用户界面的开发 它主要是允许我们可以定义一些子页面(tile),通过这些子页面组合成一个完整的页面.这样我们通过引入tile可以减少一些通用页面的重负元素开发,或者是在嵌入其他的tile来开发一系列可重用的模板.也可以保证一个软件上有一致的外观 但是从2010-6-16 的2.2.2 版本,沉寂了两年,到 2012-...

ECharts折线图配置参数详解_echatrs折线图 不同的data数据对应着不同的时间如何处理[ { name: ‘11’, da_赵健乔的博客-程序员宅基地

标题title: { left: 'center', text: '标题',},图例data属性值要与x轴series的name属性值保持一致legend: { data: ['数据'], right: 'top'},X轴boundaryGap属性值设置为false,x轴与网格线对齐name属性值设置折线图X轴xAxis: { type: "category",..._echatrs折线图 不同的data数据对应着不同的时间如何处理[ { name: ‘11’, data:

Jquery 查找属性使用(parent childent prev)的案例_praent.prev(_别碰我的IDEA的博客-程序员宅基地

parent ():查找父类prev():查找下一个childent():查找子类代码如下:aaaaaaaaaaaaaabbbcccccc点击$("button").click(function(){$(this).parent().parent().prev().prev()._praent.prev(

随便推点

并发:ScheduledThreadPoolExecutor详解。_知其然亦知其所以然的博客-程序员宅基地

ScheduledThreadPoolExecutor继承自ThreadPoolExecutor。他主要用来给定的延迟之后运行任务,或者定期执行任务。ScheduledThreadPoolExecutor的功能与Timer类似,但ScheduledThreadPoolExecutor功能更强大、更灵活。Timer对应的是单个后台线程,而ScheduledThreadPoolExecutor可以在构...

Redis 缓存穿透、缓存雪崩原理及解决方案_redis雪崩原理_迷途码界的博客-程序员宅基地

Redis缓存的场景客户端请求在缓存层命中就直接返回,如果miss就去读取存储层,存储层读取到就写入缓存层,然后再返回到客户端 Redis的优缺点优点:加速读写,降低后端负载、减少DB压力缺点:数据不能保证一致性,代码维护成本和运维成本缓存穿透引发原因在查询一个一定不存在的数据,由于缓存是不命中时被动写入,并且处于容错考虑,如果从存储层查不到数据则不写入缓存..._redis雪崩原理

github的简单使用_diaoji5719的博客-程序员宅基地

查了好多入门教程(图文并茂可以了解一些基本步骤),感觉逻辑欠缺,(很多东西跟着教程了解会用了,不了解逻辑,只是会了这一个,其他的还是很蒙),来一起理一理把1.第一步下载并注册(这个自己解决)2.用Google浏览器登陆,可以解决英文不好的问题呦,  建立仓库,点击set up in desktop (下载GitHub desktop 这是一个很好用的用户端软件,上传文件非常..._githubji o

LeetCode--403--hard--FrogJump_微观尽头的博客-程序员宅基地

package com.app.main.LeetCode.dynamic;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;/** * 403 * * hard * * https://leetcode.com/problems/frog...

pytorch学习(一):搭建神经网络_输入的通道大小_Zhansijing的博客-程序员宅基地

pytorch搭建神经网络torch.nn 只支持小批量输入。整个 torch.nn 包都只支持小批量样本,而不支持单个样本。 例如,nn.Conv2d 接受一个4维的张量, 每一维分别是sSamples * nChannels * Height * Width(样本数*通道数*高*宽)。 如果你有单个样本,只需使用 input.unsqueeze(0) 来添加其它的维数torch.Tensor:一个用于自动调用backward()实现自动梯度计算的多维数组,并且保存关于这个相对梯度。nn.Modu_输入的通道大小

heu 5938_笨鸟1号的博客-程序员宅基地

http://acm.hdu.edu.cn/showproblem.php?pid=5938Four OperationsTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3285 Accepted Submission(s)...

推荐文章

热门文章

相关标签