龙空技术网

C语言 手撕一个ArrayList

编程探索者 752

前言:

当前同学们对“arraylist 删除”可能比较重视,兄弟们都需要分析一些“arraylist 删除”的相关内容。那么小编在网摘上收集了一些对于“arraylist 删除””的相关文章,希望各位老铁们能喜欢,咱们快快来学习一下吧!

demo of ArrayList

1、定义ArrayList 结构体类型

#include <stdio.h>#include <stdlib.h>// 定义 ArrayList 结构体typedef struct {    int* data;  // 数组指针    int size;   // 当前元素个数    int capacity;  // 分配的数组空间大小} ArrayList;
2、创建指定初始容量的 ArrayList
ArrayList* createArrayList(int capacity) {    ArrayList* list = (ArrayList*)malloc(sizeof(ArrayList));    list->data = (int*)malloc(capacity * sizeof(int));    list->size = 0;    list->capacity = capacity;    return list;}
3、向 ArrayList 的末尾添加元素
void add(ArrayList* list, int value) {    if (list->size == list->capacity) {        // 如果当前元素个数等于数组空间大小,则需要扩容        list->data = (int*)realloc(list->data, list->capacity * 2 * sizeof(int));        list->capacity *= 2;    }    list->data[list->size++] = value;}
4、获取指定位置的元素
int get(ArrayList* list, int index) {    if (index < 0 || index >= list->size) {        printf("Index out of bounds\n");        exit(1);    }    return list->data[index];}
5、修改指定位置的元素的值
void set(ArrayList* list, int index, int value) {    if (index < 0 || index >= list->size) {        printf("Index out of bounds\n");        exit(1);    }    list->data[index] = value;}
6、删除指定位置的元素
void removeAt(ArrayList* list, int index) {    if (index < 0 || index >= list->size) {        printf("Index out of bounds\n");        exit(1);    }    for (int i = index; i < list->size - 1; i++) {        list->data[i] = list->data[i + 1];    }    list->size--;    // 如果当前元素个数小于数组空间大小的 1/4,则缩小数组空间大小    if (list->size < list->capacity / 4) {        list->data = (int*)realloc(list->data, list->capacity / 2 * sizeof(int));        list->capacity /= 2;    }}
7、销毁 ArrayList
void destroyArrayList(ArrayList* list) {    free(list->data);    free(list);}
8、main方法测试
int main() {    ArrayList* list = createArrayList(10);    add(list, 1);    add(list, 2);    add(list, 3);    add(list, 4);    add(list, 5);    printf("Element at index 0: %d\n", get(list, 0));    printf("Element at index 3: %d\n", get(list, 3));    set(list, 1, 10);    printf("Element at index 1 after setting: %d\n", get(list, 1));    removeAt(list, 2);    printf("Element at index 2 after removing: %d\n", get(list, 2));    destroyArrayList(list);    return 0;}

以上 ArrayList 实现了动态数组的功能。在 createArrayList 函数中,我们通过 malloc 函数分配了一个数组的空间,size 表示当前元素个数,capacity 表示分配的数组空间大小。

add 函数用于向 ArrayList 的末尾添加元素,如果当前元素个数等于数组空间大小,则需要扩容。get 函数用于获取指定位置的元素的值,set 函数用于修改指定位置的元素的值,removeAt 函数用于删除指定位置的元素,如果当前元素个数小于数组空间大小的 1/4,则需要进行缩小空间。

destroyArrayList 函数用于销毁 ArrayList 的内存。在 main 函数中我们可以看到如何使用这个 ArrayList 来添加、获取、修改和删除元素的方式。

运行截图:

res-001

res-002

接着奏乐接着淦

标签: #arraylist 删除