C语言动态数组终极指南:实现优雅的删除操作(按位置与按值)

VibeCoding·九月创作之星挑战赛 10w+人浏览 429人参与

各类资料学习下载合集  

https://pan.quark.cn/s/8c91ccb5a474​

在前面的系列文章中,我们已经成功地从零构建了一个通用的动态数组,并为其赋予了初始化、插入和自动扩容的“超能力”。现在,我们的“魔法盒子”能进能出,能屈能伸。

今天,我们将完成这趟旅程的最后一站——为动态数组添加优雅的删除功能。我们将实现两种最常见的删除方式:

  1. 1. 按位置删除:像外科手术一样精确移除指定索引的元素。
  2. 2. 按值删除:像侦探一样在数组中找到目标,并将其移除。

准备好了吗?让我们开始为我们的动态数组安装上最后的“精密部件”!

一、 前情回顾:动态数组的当前状态

我们的 ​​DynamicArray.h​​ 头文件已经包含了初始化、插入和遍历的接口。现在,我们将在其中加入删除函数的声明。

​DynamicArray.h​

#ifndef DYNAMIC_ARRAY_H
#define DYNAMIC_ARRAY_H

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

typedef struct {
    void** pAddr;
    int m_capacity;
    int m_size;
} DynamicArray;

// --- 已有函数 ---
DynamicArray* init_DynamicArray(int capacity);
void insert_DynamicArray(DynamicArray* arr, int pos, void* data);
void foreach_DynamicArray(DynamicArray* arr, void (*printCallback)(void*));
void destroy_DynamicArray(DynamicArray* arr);

// --- 本次新增的函数声明 ---

// 1. 按位置删除
void removeByPos_DynamicArray(DynamicArray* arr, int pos);

// 2. 按值删除
void removeByValue_DynamicArray(DynamicArray* arr, void* data, int (*compareCallback)(void*, void*));

#endif
二、 精准打击:实现按位置删除 ​​removeByPos_DynamicArray​

按位置删除的逻辑与插入恰好相反。插入是把元素“挤进去”,需要把后面的元素向后挪;而删除则是把元素“拿出来”,需要把后面的元素向前挪来填补空缺。

这个过程就像排队时,中间有个人走了,他后面所有人都需要向前迈一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值