思想:
利用一个结构体进行动态数组的搭建,从而实现增删改查的功能,类似于STL的vector容器。
注意事项:
1.结构体分配内存后,记得数组也要分配实际内存空间。
2.代码设计中容量(capacity)与大小(size)的概念要区分开。
代码实现
头文件:DynamicArray.h
#pragma once
#include <iostream>
using namespace std;
typedef struct DynamicArray
{
int* addr;//数组内存地址
int size;//数组大小
int capacity;//数组容量
}m_Array;
m_Array* init_Array();//初始化
void insert_Array(m_Array *arr ,int value);//插入
void delete_Array(m_Array* arr,int value);//按值删除
int fin_Array(m_Array* arr,int value);//输入值进行查询下标
void print_Array(m_Array* arr);//输出
int findvalue_Array(m_Array *arr,int pos);//输入下标进行查值
int size_Array(m_Array *arr);//查询数组大小
int capacity_Array(m_Array *arr);//查询数组容量
void clear_Array(m_Array *arr);//清空数组
void freespace_Array(m_Array *arr);//摧毁内存
xxx.cpp文件
#include "DynamicArray.h"
m_Array* init_Array()
{
m_Array* arr = (m_Array*)malloc(sizeof(m_Array) * 20);
arr->capacity = 20;
arr->size = 0;
arr->addr = (int*)malloc(sizeof(int)*arr->capacity);
return arr;
}
void insert_Array(m_Array* arr, int value)
{
if (arr == NULL) {
cout<<"数组未创建或为空!" << endl;
}
if (arr->size < arr->capacity) {
arr->addr[arr->size] = value;
arr->size++;
cout <<"插入成功!" << endl;
}
else cout<<"数组容量已满!" << endl;
}
void delete_Array(m_Array* arr, int value)
{
if (arr == NULL) {
cout << "数组未创建或为空!" << endl;
}
if (arr->size == 0) {
cout<<"数组没有存在的数据!" << endl;
}
else {
int pos = fin_Array(arr, value);
if (pos<0) {
cout <<"没有你要查找的数据!" << endl;
}
else {
for (int i = pos;i<arr->size;i++) {
arr->addr[i] = arr->addr[i + 1];
}
arr->size--;
cout<<value<<"下标为"<<pos<<",删除成功" << endl;
}
}
}
int fin_Array(m_Array* arr, int value)
{
int pos =-1;
for (int i = 0;i<arr->size;i++) {
if (value == arr->addr[i]) {
pos = i;
break;
}
}
return pos;
}
void print_Array(m_Array* arr)
{
int i;
cout<<"打印数组的全部元素:" << endl;
for (i = 0;i<arr->size;i++) {
cout<<arr->addr[i] <<" ";
}
cout << endl;
}
int findvalue_Array(m_Array* arr, int pos)
{
return arr->addr[pos];
}
int size_Array(m_Array* arr)
{
return arr->size;
}
int capacity_Array(m_Array* arr)
{
return arr->capacity;
}
void clear_Array(m_Array* arr)
{
arr->size = 0;
}
void freespace_Array(m_Array* arr)
{
free(arr);
}
主函数测试
#include "DynamicArray.h"
void test01() {
m_Array* arr=init_Array();
for (int i = 0;i<10;i++) {
insert_Array(arr,i);
}
print_Array(arr);
delete_Array(arr,5);
print_Array(arr);
cout<<"数组容量为:"<<arr->capacity << endl;
cout<<"下标为3的数组元素为:"<<findvalue_Array(arr,3) << endl;
cout << "数组大小为:" << arr->size<< endl;
cout <<"清空数组内容:" << endl;
clear_Array(arr);
print_Array(arr);
cout <<"摧毁内存!" << endl;
freespace_Array(arr);
}
int main() {
test01();
}