美文网首页
动态扩容数组

动态扩容数组

作者: 沐一同学 | 来源:发表于2020-09-25 09:05 被阅读0次

源码如下:

#ifndef _DARR_H_
#define _DARR_H_

#include <stdint.h>
#include <stdlib.h>
#include <memory.h>


#define DARR_MALLOC malloc
#define DARR_FREE free

#define DEFAULT_DARR_SZ 128

struct darr_t {
    uint16_t size;
    uint16_t cusor;
    void *   __array[DEFAULT_DARR_SZ];
    void **  array;
};

struct darr_t *darr_create() {
    struct darr_t *darr = NULL;

    darr = (struct darr_t *)DARR_MALLOC(sizeof(struct darr_t));

    darr->array = darr->__array;
    darr->size  = DEFAULT_DARR_SZ;
    darr->cusor = 0;

    return darr;
}

int darr_append(struct darr_t *darr, void *e) {
    void **array_tmp = NULL;

    if (darr == NULL) {
        return -1;
    }

    if (darr->cusor == darr->size) {
        array_tmp = (void **)DARR_MALLOC(sizeof(void *) * 2 * darr->size);

        memcpy(array_tmp, darr->array, sizeof(void *) * darr->size);

        darr->size *= 2;
    }

    darr->array[darr->cusor ++] = e;

    return 0;
}

void darr_destroy(struct darr_t *darr) {
    if (darr == NULL) {
        return;
    }

    if (darr->array != darr->__array) {
        DARR_FREE(darr->array);
    }

    DARR_FREE(darr);

    return;
}

#endif

相关文章

  • 总结数据结构-1

    一、动态数组 1、知道动态插入、动态删除,还有动态扩容 ▪ 插入: ▪ 删除: ▪ 扩容: 二、单向链表 1、需要...

  • C语言 泛型动态数组

    泛型实现思路:万能指针void *动态数组实现思路:动态进行数组内存的扩容 realloc 泛型动态数组 数组可以...

  • JVM源码分析之不要被GC日志的表面现象迷惑

    简书 占小狼转载请注明原创出处,谢谢! 数组动态扩容导致频繁FGC 关于数组动态扩容导致频繁GC的问题,笨神又写了...

  • 手敲数据结构——可变数组

    可变数组 在数组的基础上,实现动态扩容,比如ArrayList

  • 动态扩容数组

    源码如下:

  • 数据结构大纲

    1、线性表 1.1、数组 1.1.1、简介 数组是一段连续的内存 1.1.2、动态数组 有动态扩容功能和动态缩容功...

  • 集合

    Collection List ArrayList 底层:数组实现,动态数组原理:扩容时使用Arrays.copy...

  • ArrayList

    ArrayList原理: 动态数组: Object[] elementData 扩容: 0.5倍,采用System...

  • C++ 数据结构与算法

    C++ 容器与算法 vector 容器: 动态数组,可动态扩容,扩容时重新开辟原有长度2倍的长度,然后将原有的数据...

  • Java动态数组实现(模拟ArrayList)

    目标:手动实现一个动态数组,模拟ArrayList ArrayList会自动扩容,先来看一下ArrayList扩容...

网友评论

      本文标题:动态扩容数组

      本文链接:https://www.haomeiwen.com/subject/adbxuktx.html