01 动态数组
01 动态数组.cpp
#define _CRT_SECURE_NO_WARNING
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"dynamicarr.h"
void test01() {
Dynamic_Array* MyArray = Init_Array();
//容量大小
printf("容量为%d\n", Capacity_Array(MyArray));
printf("大小为%d\n", sise_Array(MyArray));
for (int i = 0; i < 30; i++)
{
PushBack_Array(MyArray, i);
}
Print_Array(MyArray);
//根据位置删除
RemovePos_Array(MyArray, 3);
//根据值删除
RemoveValue_Array(MyArray, 29);
Print_Array(MyArray);
//容量大小
printf("容量为%d\n", Capacity_Array(MyArray));
printf("大小为%d\n", sise_Array(MyArray));
//查找元素位置
int pos = Find_Array(MyArray, 4);
printf("4所在位置为:%d", At_Array(MyArray, pos));
//销毁
FreeSpeed_Array(MyArray);
Print_Array(MyArray);
}
int main(void)
{
test01();
system("pause");
return 0;
}
dynamicarr.c
#include "dynamicarr.h"
//初始化
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 RemovePos_Array(Dynamic_Array* arr, int pos) {
if (arr == NULL) {
return;
}
if (pos < 0 || pos >= arr->size)
{
return;
}
for (int i = pos; i < arr->size-1; i++)
{
arr->pAddr[i] = arr->pAddr[i + 1];
}
arr->size--;
}
//根据value删除
void RemoveValue_Array(Dynamic_Array* arr, int value) {
if (arr == NULL) {
return;
}
//找到位置
int pos = Find_Array(arr, value);
//根据位置删除
RemovePos_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 (arr->pAddr[i] == value) {
pos = i;
break;
}
}
return pos;
}
//打印
void Print_Array(Dynamic_Array* arr) {
if (arr == NULL) {
return;
}
for (int i = 0; i < arr->size; i++)
{
printf("%d " ,arr->pAddr[i]);
}
printf("\n");
}
//释放动态数组内存
void FreeSpeed_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 sise_Array(Dynamic_Array* arr) {
if (arr == NULL) {
return -1;
}
return arr->size;
}
//根据位置获取某个元素
int At_Array(Dynamic_Array* arr, int pos) {
return arr->pAddr[pos];
}
dynamicarr.h
#ifndef DYNAMIC_ARRAY_H
#define DYNAMIC_ARRAY_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//动态增长内存,策略将存放数据的内存放到那?堆上
//动态数组如果5个元素申请内存拷贝数据释放内存6插入第七个?
//容量capacity表示我的这块内存空间一共可以存放多少元素
//size概念记录当前数组中具体的元素个数
typedef struct DYNAMICARRAY
{
int* pAddr; //存放数据地址
int size; //当前多少个元素
int capacity; //最大容量
}Dynamic_Array;
//写一套关于DYNAMICARRAY的结构体操作函数
//初始化
Dynamic_Array* Init_Array();
//插入
void PushBack_Array(Dynamic_Array* arr, int value);
//根据值删除
void RemovePos_Array(Dynamic_Array* arr, int pos);
//根据value删除
void RemoveValue_Array(Dynamic_Array* arr, int value);
//查找
int Find_Array(Dynamic_Array* arr, int value);
//打印
void Print_Array(Dynamic_Array* arr);
//释放动态数组内存
void FreeSpeed_Array(Dynamic_Array* arr);
//清空数组
void Clear_Array(Dynamic_Array* arr);
//获得动态数组容量
int Capacity_Array(Dynamic_Array* arr);
//获取动态数组当前容量个数
int sise_Array(Dynamic_Array* arr);
//根据位置获取某个元素
int At_Array(Dynamic_Array* arr, int pos);
#endif // !DYNAMIC_ARRAY_H
本文作者: 永生
本文链接: https://yys.zone/detail/?id=125
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)