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 ...
随机推荐
- Python3程序设计指南:01 过程型程序设计快速入门
大家好,从本文开始将逐渐更新Python教程指南系列,为什么叫指南呢?因为本系列是参考<Python3程序设计指南>,也是作者的学习笔记,希望与读者共同学习. .py文件中的每个估计都是顺 ...
- MyBatis拦截器自定义分页插件实现
MyBaits是一个开源的优秀的持久层框架,SQL语句与代码分离,面向配置的编程,良好支持复杂数据映射,动态SQL;MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyB ...
- bugku color
下载打开压缩包是七张图片,分别是七个颜色,使用stegsolve打开发现了异常. 七张图片拼起来是 make me tall,看来是要修改图片高度. 我们使用winhex打开图片并在十六进制中修改图片 ...
- js仓库。。。
<script type="text/javascript" src="//ra.revolvermaps.com/0/0/8.js?i=0ln1fndtptz&a ...
- repr() Vs str()
在python中,将对象转换为字符串有两个内建函数: str Vs repr .str 是一个友好的,人们可读的字符串.repr 应该包含关于对象内容的详细信息(有时他们会返回相同的内容,例如整数). ...
- Jenkins项目构建
一:新建项目 (1)点击新建,输入项目名称--构建一个自由风格的软件项目,点击ok (2)创建项目名称,选择节点标签 (3)构建触发器-----设置每两分钟执行一次 其中有5个参数 (*****) 第 ...
- AWD攻防工具脚本汇总(二)
情景五:批量修改ssh密码 拿到官方靶机第一件事改自己机器的ssh密码,当然也可以改别人的密码~ import paramiko import sys ssh_clients = [] timeout ...
- Java反序列化漏洞总结
本文首发自https://www.secpulse.com/archives/95012.html,转载请注明出处. 前言 什么是序列化和反序列化 Java 提供了一种对象序列化的机制,该机制中,一个 ...
- 真——Springcloud支持Https
很久不写了,因为一直没有一个项目的需求推动,担心写的东西可能不是太实际.其间学习的事倒是做了不少,设计模式.领域开发.Antlr.kubernetes等等,其实大部分都记在纸质笔记上了.. 基于对新技 ...
- Python编程系列---使用装饰器传参+字典实现动态路由
# 实现一个空路由表,利用装饰器将url和功能函数的对应关系自动存到这个字典中 router_dict = {} # 定义一个装饰器 # 再给一层函数定义,用来传入一个参数,这个参数就是访问的页面地址 ...