IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 动态数组. -> 正文阅读

[数据结构与算法]动态数组.

一.将元素按指定位置插入数组的功能

二.遍历数组的功能

三.删除数组中元素的功能

1.按指定位置删除数组元素

2.按指定的值删除数组元素

四.销毁数组的功能

contach.h(头文件)

#include<stdio.h>
include<string.h>
#include<stdlib.h>
 //动态数组结构体
struct dynamicArray 
{
void ** pAddr;//维护在堆区真实数组指针
int m_capacity;//数组容量
int m_size;//数组大小
}
//初始化数组
struct dynamicArray *init_DynamiArray(int capacity);
//一.插入功能
void intsert_dnamicArray(struct dynamicArray * array,int pos,void*data);
 //二.遍历数组功能
void foreach_DynamicArray(struct dynamicArray * array,void(*myForeach)(void*));
 //三.1删除数组中的元素--按照位置来删除
void removeByPos_DynamicArray(struct dynamicAray* arr,int pos);
 //三.2删除数组中的元素--按照值来删除
void remocebByValue_DynamicArray(struct dynamicArray* arr, void*data,int(*myCompare);
 //四.销毁数组
void destroy_DynamicArray(struct dynamicArray * arr);
test.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"contact.h"
struct Person 
{
char name[64];
int age;
};
void myPrintPerson(void *data)
{
structPerson * p=data;
printf("姓名:%s 年龄:%d\n",p->name, p->age);
}
int myComparePerson(void *data1,void *data2)
{
struct Person* p1 =data1;
struct Person* p2 =data2;
return strcmp(p1->name,p2->name)==0 &&p1->age == p2 ->age;
}
 void tset01()
{
//创建动态数组
struct dynamicArray*arr=struct init_DynamicArray(5);
//准备5个person数据
struct Person p1={"亚索",18};
struct Person p2={"瑞文",19};
struct Person p3={"鳄鱼",20};
struct Person p4={"诺手",21};
struct Person p5={"卡兹克",22};
struct Person p6={“狮子狗",23};

//将数据插入到动态数组中
 printf("当前容量为:%d\n",arr->m_capacity);
insert_dynamicArray{arr,0,&p1};
insert_dynamicArray{arr,1,&p2};
insert_dynamicArray{arr,2,&p3};
insert_dynamicArray{arr,3,&p4};
insert_dynamicArray{arr,4,&p5};
insert_dynamicArray{arr,100,&p6};

// 亚索 瑞文 鳄鱼 诺手 卡兹克
//遍历动态数组
foreach_DynamicArray(arr,myPrintPerson);

printf("插入数据后容量为:%d\n", arr->m_capacity);

//删除数组中的元素
remoceByPos_DynamicArray(arr,1)

printf("删除第一个位置的元素后,数组中的数据为:\n");
foreach_DynamicArray(arr,myPrintPerson);

struct Person p={"瑞文",19};
removeByValue_DynamicArray(arr,&p2,myComparePerson);
foreach_DynamicArray(arr,myPrintPerson);
//销毁数组
destroy_DynamicArray(arr);
arr=NULL;

}


int main()
{
tset01();
system("pause")
return EXIT_SUCCESS;
}

contact.c

#include<stdio.h>
include<string.h>
#include<stdlib.h>

#include"contact.h"


                            //初始化数组


struct dynamicArray *init_DynamiArray(int capacity)
{
if(capacity<=0)
{
return NULL;
}
struct dynamicArray *array =malloc(sizeof(struct dynamicArray));
//判断内存是否申请成功
if(NULL == array)
{
return NULL;
}
//设置容量
array->m_capacity=capacity;
//设置大小
array->m_size=0;
//维护在堆区数组的指针
array->pAddr=malloc(sizeof(void*)*array->m_capacity);
return array;
}






                              //一.插入功能




void intsert_dnamicArray(struct dynamicArray * array,int pos,void*data)
{
if(NULL==array)
{
return ;
}
if(NULL == data)
{
return ;
}
if(pos<0 || pos>m_size)
{
//无效位置或进行尾插
pos=array->m_size;
}
//先判断是否已 满载,如果满载了就先动态开辟
if(array->m_size>=array->m_capacity)
{
//1.申请一更大的内存空间
int newCapacity=array->m_capacity*2;
//2.创建新空间
void**newSpace=malloc(sizeof(void*)*newCapacity);
3.将原有的数据拷贝到新空间里
memcpy(newSpace,array->pAddr,sizeof(void*)*array->m_capacity);
//4.释放原有空间
free(array->pAddr);
//5.更改指针指向
array->m_capacity=newSpace;
//6.更新新容量大小;
array->m_capacity=newCapacity;
}
//插入新的数据元素
//从最后一个位置开始依次移动数据 后移
for(int i=array->m_size-1;i>=pos;i--)
{
array->pAddr[i+1]=array->pAddr[i];
}
//将新元素插入指定位置
array->pAddr[pos]=data;
//更新大小
array->size++;
}




                             //二.遍历数组功能




void foreach_DynamicArray(struct dynamicArray * array,void(*myForeach)(void*))
{
 if(NULL == array )
{
return ;
}
 if(NULL ==myForeach )
{
return ;
}
for(int i=0;i<array->m_size;i++)
{
myForeach(array->pAddr[i])
}
}

                   //三.1删除数组中的元素--按照位置来删除


void removeByPos_DynamicArray(struct dynamicAray* arr,int pos)
{
if(NULL= arr)
{
return ;
}
if(pos<0 || pos>arr->m-size-1)
{
//无效数据 直接return
return ;
}
//pos位置开始到数组尾 数据进行前移
for(int i=pos;i<arr->m_size-1;i++)
{
arr->pAddr[i]=arr->pAddr[i+1];
}
arr->m_size--;
} 



                    //三.2删除数组中的元素--按照值来删除




void remocebByValue_DynamicArray(struct dynamicArray* arr, void*data,int(*myCompare)(void*,void*))
{
if(NULL== arr)
{
return ;
}
if(NULL == data )
{
return ;
}
for(int i=0;i<arr->m_size;i++)
{
if(myConpare(arr->pAddr[i],data))
{
removeByPos_DynamicArray(arr,i);
break;
}
}
}


                           //四.销毁数组


void destroy_DynamicArray(struct dynamicArray * arr)
{
if(NULL == arr)
{
return ;
}
if(arr->pAddr!=NULL)
{
free(arr->pAddr);
arr->pAddr=NULL;
}
free(arr);
arr=NULL;
}



  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:14:08  更:2022-01-14 02:15:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:28:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码