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 ...
随机推荐
- Grafana 6.4 正式发布!
原文链接:Grafana 6.4 正式发布! 2019 年 10 月 2 日,也就是国内小伙伴们的放假期间,Grafana 实验室正式发布了 Grafana 6.4 版本.这个版本主要围绕数据模型和指 ...
- 【实战】 elasticsearch 写入速度提升的案例分享
文章首发投稿至InfoQ,[侠梦的开发笔记]公众号,欢迎关注 https://www.infoq.cn/article/t7b52mbzxqkwrrdpVqD2 基本配置 基本配置,5台配置为 24C ...
- Spring Boot 2.X(八):Spring AOP 实现简单的日志切面
AOP 1.什么是 AOP ? AOP 的全称为 Aspect Oriented Programming,译为面向切面编程,是通过预编译方式和运行期动态代理实现核心业务逻辑之外的横切行为的统一维护的一 ...
- Have a Good Attitude 良好的态度
Poor attitudes lead to poor communication. Poor communication leads to poor service. Poor service le ...
- LIS&&LCS&&LCIS
LIS #include<bits/stdc++.h> using namespace std; int n,a[100005],b[100005],ji; int main(){ cin ...
- drf源码save以及response
drf源码save以及response 一.save 其中蛮重要的一段 if self.instance is not None: self.instance = self.update(self.i ...
- eclipse基础设置
主要参考blog https://jingyan.baidu.com/article/d5a880eb6c4f7813f147ccef.html https://blog.csdn.net/Ricar ...
- [JOYOI1307] 联络员
题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐 ...
- MyBatis 开发手册
这一遍看Mybatis的原因是怀念一下去年的 10月24号我写自己第一个项目时使用全配置文件版本的MyBatis,那时我们三个人刚刚大二,说实话,当时还是觉得MyBatis挺难玩的,但是今年再看最新版 ...
- win10下安装openssl
1.下载运行工具:ActivePerl-5.22.1.2201-MSWin32-x64-299574.msi, 安装. 2.执行:perl example.pl,若显示“Hello from Acti ...