动态数组_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

智能推荐

angular4跨域问题的解决方法--nginx的安装以及配置_ng4 请求跨域-程序员宅基地

1. 官网下载地址:https://nginx.org/en/download.html,如图所示 2. 下载完成后把压缩包解压到本地电脑的相应文件夹下,不用安装,解压目录如下: 3. 启动nginx命令:打开电脑运行界面 cmd,进入到nginx的位置,运行nginx.exe即可 如果想要停止,输入命令n..._ng4 请求跨域

HTML5 音频API产生音频指纹进行用户追踪介绍_c# 声音指纹生成-程序员宅基地

背景介绍在浏览器上可以通过生成指纹信息,来反爬虫或进行用户追踪。之前我们提到的有canvas指纹,除此外还有音频指纹。音频指纹的思路和canvas指纹类型。在不同浏览器不同机器上通过音频api产生的声音信息会有略微的差异。因此可以通过这些api来获取我们需要的数据生成指纹。音频指纹实现为了使用音频相关的API,下面的代码是[1]一个通过音频API产生声音的一个例子。// 创建音频上下文 ..._c# 声音指纹生成

Android App性能优化,你知道如何做吗_android性能优化看一篇就够了-程序员宅基地

一.何为App的性能拿小车举例,大家知道什么是一辆小车的性能吗?同学甲说,是否省油、加速是否够快、开起来是否稳定、安全等等。没错,那就是小车的性能。那App的性能又是指什么呢?同学已说,App启动是否够快,运行是否流畅,是否省电、省流量,安装包体积是否够小等等。是的,这就是App的性能。二.关注App性能,有什么用我们知道,一辆小车性能越好,加速越快,跑的越稳,越省油。App也一样,..._android性能优化看一篇就够了

msf拿到windows的shell显示乱码解决方法_msf shell乱码-程序员宅基地

0x01:渗透的时候拿到一台windows7的权限,但使用msf显示乱码,很不舒服 0x02:使用 chcp 65001 这条语句即可解决_msf shell乱码

iOS开发中遇到的几种多线程-程序员宅基地

最近整理了一下iOS开发中常用的几种多线程// 第一种方式> NSThread *thread = [[NSThread alloc] initWithTarget:self> selector:@selector(mutableThread) object:@"test"]; [thread start];// 第二种方式> [NSThread detachNewThreadSelector

awesome-awesomeness-程序员宅基地

Awesome AwesomenessA curated list of amazingly awesome awesomeness.Programming Languages Package ManagerPackage-ManagerProgramming LanguagesAnsibleAutoHotkeyAutoItCC/C++CMakeClojureby @mbuczkoby @razum2umColdFusionCommon LispComm

随便推点

Layui开发的简约URL图床源码V1.3版_layui sqlite-程序员宅基地

Layui开发的简约URL图床源码V1.3版URL图床源码v1.3是一个简单、纯粹的图床程序,使用PHP + SQLite 3开发,不需要复杂的配置,开箱即用。功能特色:图片上传与预览一键生成 / 复制链接浏览与删除图片限制访客上传数量图片压缩图片鉴黄支持 URL 批量上传支持 API 上传环境要求:PHP >= 5.6,需要exif函数支持,SQLite 3学习资料地址:URL图床源码v1.3.zip - 蓝奏云..._layui sqlite

linux嵌入式下的QT图形界面开发(入门篇详解)_haas开发板实验中qt界面的作用-程序员宅基地

Qt 嵌入式图形开发(入门篇)一、Qt/Embedded 开发环境的安装一般来说,居于Qt/Embedded开发的应用程序最终会发布到安装有嵌入式Linux操作系统的小型设备上,所以使用装有Linux操作系统的PC机或者工作站来完成Qt/Embedded开发当然是最理想的环境,尽管Qt/Embedded也可以安装在Unix和Windows系统上。下面我们将介绍如何在一台装有Linux操作系统的机器上建立Qt/Embedded开发环境。首先,您需要拥有三个软件安装包:tma_haas开发板实验中qt界面的作用

[python爬虫]使用urllib函数urlretrieve报错[socket error][Errno 10054]_urlretrieve104报错-程序员宅基地

为了练手,使用爬虫爬一个“你懂得”图床的,使用的是urlretrieve函数,不但速度慢,还总是会报错,不是open的timeout就是上面提到的socket error。在网上找了许多办法诸如在urllib2.Request.urlopen().read()后需要调用close()关闭等方法并未奏效。 由于不想麻烦scrapy等库,所以发现了个简单粗暴的办法: 直接使用urllib自带的ope_urlretrieve104报错

vue监听输入框获取焦点_vue @focus-程序员宅基地

想实现一个当搜索框获取到鼠标的焦点时就跳转到另一个页面去搜索的功能。前提是得监听到当搜索框获取到焦点。<van-search v-model="value" placeholder="请输入搜索关键词" @focus="focus"/></form>这里用到了vantUI的搜索框,@focus是获取焦点,@blur失去焦点。接下来是监听方法methods: { focus() { this.$toast('hhh'); }, _vue @focus

2017IDC企业级WLAN榜单将揭晓,新华三继续领跑企业级市场、聚焦“十连冠”-程序员宅基地

近日,权威机构IDC发布的《中国WLAN市场季度跟踪报告》显示,新华三集团在2017年Q3季度再次凭借30.3%的市场份额,稳居中国区企业级WLAN市场第一位。综合数据显示,新华三在2017年Q1-Q3季度以总计33.2%市场份额的绝对优势,持续领跑中国区企业级WLAN市场。自2008年开始,新华三连续九年一直占据中国区企业级WLAN市场排名首位,并致力于赢得该领域市场的十连冠。 从2003..._idc企业级无线最新排名

《解剖PetShop》系列之六 PetShop之表示层设计-程序员宅基地

表示层(Presentation Layer)的设计可以给系统客户最直接的体验和最十足的信心。正如人与人的相交相识一样,初次见面的感觉总是永难忘怀的。一件交付给客户使用的产品,如 果在用户界面(User Interface,UI)上缺乏吸引人的特色,界面不友好,操作不够体贴,即使这件产品性能非常优异,架构设计合理,业务逻辑都满足了客户的需求,却仍 然难以讨得客户的欢心。俗语云:“佛要金装,人要衣装

推荐文章

热门文章

相关标签