栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构学习(黑马)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构学习(黑马)

vs2019 新建文件:

 

动态链表删除算法

往前面覆盖;

#include "DynamicArray.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);//每个数据是int类型,乘容量
	return myArray;//把指针返回;

}
//插入,考虑内存足不足;
void PushBack_Array(Dynamic_Array* arr, int value)
{
	if (arr == NULL)
	{
		return 0;
	}
	//判断空间是否足够;
	if (arr->size == arr->capacity)
	{
		//申请一块更大的空间;新空间是旧空间的2倍;
		int* newSpace = (int*)malloc(sizeof(int) * arr->capacity * 2);
			//拷贝数据到新的空间;memcpy(0)函数;
		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 RemoveByPos_Array(Dynamic_Array* arr, int pos)
{
	if (arr == NULL)
	{
		return 0;
	}
	//判断位置是否有效;
	if (pos < 0 || pos >= arr->size)
	{
		return 0;
	}

	//删除元素;从删除位置开始,往前覆盖;
	for (int i = pos; i < arr->size-1; i++)
	{
		arr->pAddr[i] = arr->pAddr[i+1];
	} 
	arr->size--;



}
//根据值删除
void RemoveByValue_Array(Dynamic_Array* arr, int value)
{
	if (arr == NULL)
	{
		return 0;
	}
	//找到值的位置;遍历
	int pos = -1;
	for (int i = 0; i < arr->size; i++)
	{
		if (arr->pAddr[i] == value)
		{
			pos = i;//找到位置;
			break;
		}  
	}

	//根据位置删除,直接调用删除函数;
	RemoveByPos_Array(arr , pos);

}
//查找
int Find_Array(Dynamic_Array* arr, int value)
{
	if (arr == NULL)
	{
		return 0;
	}
	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 0;
	}
	for (int i = 0; i < arr->size; i++)
	{
		printf("%d",arr->pAddr[i]);
	}
}
//释放动态数组的内存
//当时申请的时候是给地址申请了一块和给结构体申请了一块;
void FreeSpace_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 ;
	}
	//pAddr -> 空间;
	arr->size = 0;
}
//获得动态数组容量
int Capacity_Array(Dynamic_Array* arr)
{
	if (arr == NULL)
	{
		return 0;
	}
	return arr->capacity;
}
//获得动态数据当前元素个数
int Size_Array(Dynamic_Array* arr)
{
	if (arr == NULL)
	{
		return 0;
	}
	return arr->size;
}
//根据位置获得某个位置元素
int At_Array(Dynamic_Array* arr, int pos)
{
	if (arr == NULL)
	{
		return 0;
	}
	return arr->pAddr[pos]; 
}


#include"DynamicArray.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 RemoveByPos_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 RemoveByValue_Array(Dynamic_Array* arr, int value){
	if (arr == NULL){
		return;
	}

	//找到值的位置
	int pos = Find_Array(arr,value);
	//根据位置删除
	RemoveByPos_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 FreeSpace_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;
	}
	//pAddr -> 空间
	arr->size = 0;
}
//获得动态数组容量
int Capacity_Array(Dynamic_Array* arr){
	if (arr == NULL){
		return -1;
	}
	return arr->capacity;
}
//获得动态数据当前元素个数
int Size_Array(Dynamic_Array* arr){
	if (arr == NULL){
		return -1;
	}
	return arr->size;
}
//根据位置获得某个位置元素
int At_Array(Dynamic_Array* arr, int pos){
	return arr->pAddr[pos];
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/698589.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号