C高级编程 第十二天(动态数组)

2024-09-02 04:44

本文主要是介绍C高级编程 第十二天(动态数组),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.算法的特性:

2.数据结构的分类

2.1逻辑结构

2.2物理结构

3.动态数组

②动态数组初始化

③插入数组

④遍历数组

⑤删除数组

⑥销毁数组


1.算法的特性:

  • 输入输出
  • 有穷性
  • 确定性
  • 可行性

2.数据结构的分类

2.1逻辑结构

  • 集合结构
  • 线性结构
  • 树形结构
  • 图形结构

2.2物理结构

  • 顺序存储
  • 链式存储

3.动态数组

①结构体设计

struct dynamicArray
{void** pAddr;//在堆区开批数组的指针int m_Capacity;//能容纳多少int m_Size;	//当前存放所有数据的大小
};

②动态数组初始化

struct dynamicArray* initData(int capacity)
{struct dynamicArray* re = malloc(sizeof(struct dynamicArray));if (re == NULL){return NULL;}re->pAddr = malloc(sizeof(void*) * capacity);re->m_Capacity = capacity;re->m_Size = 0;return re;
}

③插入数组

void insert_Array(struct dynamicArray* a, void* data, int pos)
{if (a == NULL || data == NULL){return;}//空间满了if (a->m_Capacity == a->m_Size){int newCapacity = a->m_Capacity * 2;void** newSize = malloc(sizeof(void*) * newCapacity);memcpy(newSize, a->pAddr, a->m_Size);free(a->pAddr);a->pAddr = NULL;a->pAddr = newSize;a->m_Size = newCapacity;}for (int i = a->m_Size; i >= 0; i--){a[i + 1] = a[i];    //整体元素向后移}a->pAddr[pos] = data;a->m_Size++;
}

④遍历数组

void* printArray(struct dynamicArray* array)
{if (NULL == array){return;}for (int i = 0; i = array->m_Size; i++){printf("%d", array->pAddr[i]);}
}

⑤删除数组

通过下标删除:

void removeByPos(struct dynamicArray* a, int pos)
{if (a == NULL){return;}for (int i = pos; i <a->m_Size; i++){a[i] = a[i + 1]; }  a->m_Size--;
}

通过值删除:

void removeByValue(struct dynamicArray* a,void* data,int((*compare)(void*,void*)))
{if (a == NULL){return;}for (int i = 0; i = a->m_Size; i++){if (compare(a, data)){removeBypos(a, i);}}
}
int compare(void* data1, void* data2)
{struct dynamicArray* data11 = (struct dynamicArray*)data1;struct dynamicArray* data21 = (struct dynamicArray*)data1;return strcmp(data11->pAddr, data21->pAddr);
}

⑥销毁数组

void destory(struct dynamicArray* a)
{if (a == NULL){return;}if (a->pAddr == NULL){free(a->pAddr);a->pAddr = NULL;}free(a);a = NULL;
}

这篇关于C高级编程 第十二天(动态数组)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129022

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.