这是一篇顺序表数据结构——动态数组的测试,

实现

//初始化数组

//插入

//根据位置删除

//根据值删除

//查找

//打印

//释放动态数组的内存

//清空数组

//获得动态数组容量

//获得动态数组当前元素个数

//根据位置获得某个位置的元素

话不多说 上代码!!!

//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

//DynamicArray.c

#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-];
}

//DynamicArrayMain.c

#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. 数据结构(1) 第一天 算法时间复杂度、线性表介绍、动态数组搭建(仿Vector)、单向链表搭建、企业链表思路

    01 数据结构基本概念_大O表示法 无论n是多少都执行三个具体步骤 执行了12步 O(12)=>O(1) O(n) log 2 N = log c N / log c N (相当于两个对数进行了 ...

  2. 容器(vector)、数组、new创建的动态数组,你到底用哪一个(执行效率分析)

    1.问题的提出 在没有了解vector之前,动态数组一般都是又new创建的.在了解vector后发现vector竟是那样方便好用,但方便的同时却是以牺牲执行效率为代价的.网上对vector和array ...

  3. [数据结构1.2-线性表] 动态数组ArrayList(.NET源码学习)

    [数据结构1.2-线性表] 动态数组ArrayList(.NET源码学习) 在C#中,存在常见的九种集合类型:动态数组ArrayList.列表List.排序列表SortedList.哈希表HashTa ...

  4. python数据结构之动态数组

    数组列表:动态数组(Array List) 简介: 最基础简单的数据结构.最大的优点就是支持随机访问(O(1)),但是增加和删除操作效率就低一些(平均时间复杂度O(n)) 动态数组也称数组列表,在py ...

  5. 纯数据结构Java实现(1/11)(动态数组)

    我怕说这部分内容太简单后,突然蹦出来一个大佬把我虐到哭,还是悠着点,踏实写 大致内容有: 增删改查,泛型支持,扩容支持,复杂度分析.(铺垫: Java语言中的数组) 基础铺垫 其实没啥好介绍的,顺序存 ...

  6. 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)

    目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...

  7. 【PHP数据结构】顺序表(数组)的相关逻辑操作

    在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...

  8. C语言- 基础数据结构和算法 - 动态数组

    听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...

  9. 常用数据结构-线性表及Java 动态数组 深究

    [Java心得总结六]Java容器中——Collection在前面自己总结的一篇博文中对Collection的框架结构做了整理,这里深究一下Java中list的实现方式 1.动态数组 In compu ...

随机推荐

  1. Python 正则re匹配中文、英式数字

    #coding:utf-8 import re s = u''' 或多或少的好好读书电锯惊魂20202 和水电费后是否会时候1212没收到风10.12海大富的是粉红色的和办法的1244525.000 ...

  2. 定期从Docker上部署的MySQL备份数据

    前段时间公司停电,正巧赶上周一领导要开会要过一遍项目,然而项目所依赖的MySQL数据库是直接部署在宿主机,且因为各人部署方式不同的原因,花了很久才在开会前启动起来.于是开完会后,我第一件事就是把原先依 ...

  3. .NET Core 3.0之深入源码理解ObjectPool(一)

    写在前面 对象池是一种比较常用的提高系统性能的软件设计模式,它维护了一系列相关对象列表的容器对象,这些对象可以随时重复使用,对象池节省了频繁创建对象的开销. 它使用取用/归还的操作模式,并重复执行这些 ...

  4. 在Xamarin开发中,UWP环境下无法进入断点调试standard库的问题解决方案

    环境如下 选择的代码共享方案为standard模式 再多平台依赖注入的时候,断点一直提示没有加载文档. 进入到目标平台项目Debug文件夹下,查看.发现standard库引用进来后,对应的*.pdb文 ...

  5. laravel学习之旅

    前言:之前写了二篇YII2.0的基本mvc操作,所以,打算laravel也来这一下 *安装现在一般都用composer安装,这里就不讲述了* 一.熟悉laravel (1)如果看到下面这个页面,就说明 ...

  6. BZOJ 1345: [Baltic2007]序列问题Sequence

    1345: [Baltic2007]序列问题Sequence Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 1180  Solved: 633[Subm ...

  7. bugku--web--输入密码查看flag

    首先打开网页链接 随机五位数的密码爆破,先用python写一个脚本来生成随机五位数: x=range(0,10) f=open("3.txt",'w') for i in x: f ...

  8. Python flask 构建微电影视频网站☝☝☝

    Python flask 构建微电影视频网站☝☝☝ 1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridD ...

  9. Tensorflow-gpu在windows10上的安装(anaconda)

    文档来源转载: http://blog.csdn.net/u010099080/article/details/53418159 http://blog.nitishmutha.com/tensorf ...

  10. PHP array_slice

    1.函数的作用:返回数组中的部分区间的元素 2.函数的参数: @params  array  $array @params  int      $offset @params  int      $l ...