01数据结构与算法——动态数组的搭建

思想:

利用一个结构体进行动态数组的搭建,从而实现增删改查的功能,类似于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();

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值