C/C++顺序数据结构——动态数组测试
这是一篇顺序表数据结构——动态数组的测试,
实现
//初始化数组
//插入
//根据位置删除
//根据值删除
//查找
//打印
//释放动态数组的内存
//清空数组
//获得动态数组容量
//获得动态数组当前元素个数
//根据位置获得某个位置的元素
话不多说 上代码!!!
//DynamicArray.h
#pragma once
#ifndef DynamicArray typedef struct DynamicArray
{
int size;//当前数组有多少个元素
int capacity; //数组的容量
int *pArray; //数据存放的地址
}DynamicArray; //初始化数组
DynamicArray *Init_Array(); //插入
void Add_Array(DynamicArray *arr, int value); //根据位置删除
void Delete_BY_ArrayPosition(DynamicArray *arr, int pos); //根据值删除
void Delete_BY_ArrayValude(DynamicArray *arr, int value); //查找
int Select_Array(DynamicArray *arr, int value); //打印
int Print_Array(DynamicArray *arr); //释放动态数组的内存
void Free_Array_space(DynamicArray *arr); //清空数组
void Clear_Array(DynamicArray *arr); //获得动态数组容量
int Get_Array_Capacity(DynamicArray *arr); //获得动态数组当前元素个数
int Get_Number_Of_DynamicArray(DynamicArray *arr); //根据位置获得某个位置的元素
int Get_Element_Of_DynamicArray(DynamicArray *arr, int pos); #endif // !DynamicArray
#include"DynamicArray.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*typedef struct DynamicArray
{
int size;//当前数组有多少个元素
int capacity; //数组的容量
int *pArray; //数据存放的地址
}DynamicArray;*/
//初始化动态数组
DynamicArray *Init_Array()
{
//申请内存
DynamicArray *pAddr = (DynamicArray *)malloc(sizeof(DynamicArray));
pAddr->capacity = ;
pAddr->size = ;
pAddr->pArray = (int *)malloc(pAddr->capacity * sizeof(int));
return pAddr;
}
//插入
void Add_Array(DynamicArray *arr, int value)
{
if (arr == NULL)
{
printf("arr == NULL");
return;
}
//判断空间是否足够
//if (arr->size > arr->capacity)
if (arr->size == arr->capacity)
{
//开辟一个更大的空间
int *newspace = (int *)malloc((arr->capacity * ) * sizeof(int));
//把旧空间的数组内容拷贝到新空间
memcpy(newspace, arr->pArray, arr->capacity*sizeof(int));
//释放旧空间
free(arr->pArray);
arr->pArray = newspace;
//更新capacity
arr->capacity = arr->capacity * ;
}
//插入新元素
arr->pArray[arr->size] = value;
arr->size++;
}
//根据位置删除
void Delete_BY_ArrayPosition(DynamicArray *arr, int pos)
{
if (arr == NULL)
{
printf("arr == NULL");
return;
}
if (pos < || pos > arr->size)
{
printf("pos < 0 || pos > arr->size");
return;
}
for (int i=pos ; i <= arr->size-; i++)
{
arr->pArray[i-] = arr->pArray[i];
}
arr->size--;
}
//根据值删除
void Delete_BY_ArrayValude(DynamicArray *arr, int value)
{
if (arr == NULL)
{
printf("arr == NULL");
return;
}
int i,pos;
for (i = ; i < arr->size; i++)
{
if (arr->pArray[i] == value)
{
pos = i;
break;
}
}
Delete_BY_ArrayPosition(arr,pos+);
}
//查找,返回元素的位置
int Select_Array(DynamicArray *arr, int value)
{
if (arr == NULL)
{
printf("arr == NULL");
return -;
}
int i, pos;
for (i = ; i < arr->size; i++)
{
if (arr->pArray[i] == value)
{
pos = i;
break;
}
}
return pos;
}
//打印
int Print_Array(DynamicArray *arr)
{
if (arr == NULL)
{
printf("arr == NULL");
return -;
}
for (int i = ; i < arr->size; i++)
{
printf("%d ", arr->pArray[i]);
}
printf("\n");
return ;
}
//释放动态数组的内存
void Free_Array_space(DynamicArray *arr)
{
if (arr == NULL)
{
printf("arr == NULL");
return;
}
if (arr->pArray != NULL)
{
free(arr->pArray); }
free(arr); }
//清空数组的个数统计size
void Clear_Array(DynamicArray *arr)
{
if (arr == NULL)
{
printf("arr == NULL");
return;
}
arr->size = ;
}
//获得动态数组容量
int Get_Array_Capacity(DynamicArray *arr)
{
if (arr == NULL)
{
printf("Get_Array_Capacity error");
return -;
}
return arr->capacity;
}
//获得动态数组当前元素个数
int Get_Number_Of_DynamicArray(DynamicArray *arr)
{
if (arr == NULL)
{
printf("Get_Number_Of_DynamicArray error");
return -;
}
return arr->size;
}
//根据位置获得某个位置的元素
int Get_Element_Of_DynamicArray(DynamicArray *arr,int pos)
{
if (arr == NULL)
{
printf("Get_Element_Of_DynamicArray error");
}
return arr->pArray[pos-];
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include"DynamicArray.h"
void test01()
{
//初始化动态数组
DynamicArray*My_Array = Init_Array();
//打印数组容量
printf("DynamicArray's capacity is %d\n", Get_Array_Capacity(My_Array));
//打印当前数组元素个数
printf("The number Of DynamicArray is %d\n", Get_Number_Of_DynamicArray(My_Array)); printf("Enter DynamicArray Size\n");
int number;
scanf("%d", &number);
//插入元素
for (int i = ; i < number; i++)
{
Add_Array(My_Array, i);
}
//打印数组容量
printf("DynamicArray's capacity is %d\n", Get_Array_Capacity(My_Array));
//打印当前数组元素个数
printf("The number Of DynamicArray is %d\n", Get_Number_Of_DynamicArray(My_Array)); //打印
Print_Array(My_Array); printf("Enter the posion what you want to delete\n");
int posion;
scanf("%d",&posion);
Delete_BY_ArrayPosition(My_Array, posion);
//打印数组容量
printf("DynamicArray's capacity is %d\n", Get_Array_Capacity(My_Array));
//打印当前数组元素个数
printf("The number Of DynamicArray is %d\n", Get_Number_Of_DynamicArray(My_Array));
//打印
Print_Array(My_Array); printf("Enter the value what you want to delete\n");
int value;
scanf("%d", &value);
Delete_BY_ArrayValude(My_Array, value);
//打印数组容量
printf("DynamicArray's capacity is %d\n", Get_Array_Capacity(My_Array));
//打印当前数组元素个数
printf("The number Of DynamicArray is %d\n", Get_Number_Of_DynamicArray(My_Array));
//打印
Print_Array(My_Array); //根据位置获得某个位置的元素
printf("Enter a position to get the element\n ");
int posion1;
scanf("%d", &posion1);
printf("The element is %d", Get_Element_Of_DynamicArray(My_Array, posion1));
//销毁
Free_Array_space(My_Array); } int main(void)
{
test01();
printf("\n");
system("pause");
return ;
}
C/C++顺序数据结构——动态数组测试的更多相关文章
- 数据结构(1) 第一天 算法时间复杂度、线性表介绍、动态数组搭建(仿Vector)、单向链表搭建、企业链表思路
01 数据结构基本概念_大O表示法 无论n是多少都执行三个具体步骤 执行了12步 O(12)=>O(1) O(n) log 2 N = log c N / log c N (相当于两个对数进行了 ...
- 容器(vector)、数组、new创建的动态数组,你到底用哪一个(执行效率分析)
1.问题的提出 在没有了解vector之前,动态数组一般都是又new创建的.在了解vector后发现vector竟是那样方便好用,但方便的同时却是以牺牲执行效率为代价的.网上对vector和array ...
- [数据结构1.2-线性表] 动态数组ArrayList(.NET源码学习)
[数据结构1.2-线性表] 动态数组ArrayList(.NET源码学习) 在C#中,存在常见的九种集合类型:动态数组ArrayList.列表List.排序列表SortedList.哈希表HashTa ...
- python数据结构之动态数组
数组列表:动态数组(Array List) 简介: 最基础简单的数据结构.最大的优点就是支持随机访问(O(1)),但是增加和删除操作效率就低一些(平均时间复杂度O(n)) 动态数组也称数组列表,在py ...
- 纯数据结构Java实现(1/11)(动态数组)
我怕说这部分内容太简单后,突然蹦出来一个大佬把我虐到哭,还是悠着点,踏实写 大致内容有: 增删改查,泛型支持,扩容支持,复杂度分析.(铺垫: Java语言中的数组) 基础铺垫 其实没啥好介绍的,顺序存 ...
- 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)
目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...
- 【PHP数据结构】顺序表(数组)的相关逻辑操作
在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...
- C语言- 基础数据结构和算法 - 动态数组
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- 常用数据结构-线性表及Java 动态数组 深究
[Java心得总结六]Java容器中——Collection在前面自己总结的一篇博文中对Collection的框架结构做了整理,这里深究一下Java中list的实现方式 1.动态数组 In compu ...
随机推荐
- BERT论文解读
本文尽量贴合BERT的原论文,但考虑到要易于理解,所以并非逐句翻译,而是根据笔者的个人理解进行翻译,其中有一些论文没有解释清楚或者笔者未能深入理解的地方,都有放出原文,如有不当之处,请各位多多包含,并 ...
- Openshift yum安装
Openshift yum安装: Yum 安装docker [root@DockerServer openshift]# yum repolist [root@DockerServer openshi ...
- m*n 矩阵中求正方形个数
<?php /** * Notes: * User: liubing17 * DateTime: 2019-10-17 17:10 */ function get($m, $n){ /* * 获 ...
- 手把手教你吧Python应用到实际开发 不再空谈悟法☝☝☝
手把手教你吧Python应用到实际开发 不再空谈悟法☝☝☝ 想用python做机器学习吗,是不是在为从哪开始挠头?这里我假定你是新手,这篇文章里咱们一起用Python完成第一个机器学习项目.我会手把手 ...
- drf框架中jwt认证,以及自定义jwt认证
0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pi ...
- Cocos2d-x 学习笔记(10) ActionInstant
1.概述 ActionInstant的子类都是立即完成的动作,即一帧就完成了,不像ActionInterval的子类动作需要定义动作总时间. Action类的继承关系图: 2.具体 ActionIns ...
- Beetlex服务框架之Webapi访问限制和url重写
在新版本的BeetleX.FastHttpApi中集成了IP访问策略和URL重写两个功能,通过IP访问策略可以制定服务针对不同IP的访问限制控制:而URL重写则可以制定更好的URL访问方式.以下介绍这 ...
- nginx::certbot制作免费证书
环境 Ubuntu8.04apt-get update apt-get install software-properties-common add-apt-repository ppa:certbo ...
- google::Glog
windows下使用google的Glog库 下载glog-.tar.gz,解压. vs2013打开工程, 有四个项目 libglog libglog_static logging_unittest ...
- 微信企业号开发入门(回调模式)java
最近在开发微信企业号,刚接触时云里雾里的,在摸索过程中终于清晰了一点. 刚开始我以为订阅号.服务号.企业号的接口差不多,就一直用订阅号的教程来入门,后来才发现差的挺多的. 首先,微信企业号不像订阅号和 ...