java arraylist函数_Java ArrayList C语言实现 函数体

#include"arraylist.h"voidarrayInit(structArrayList*array){array->size=8;array->length=0;array->data=malloc(sizeof(void*)*array->size);}voidarrayInitSize(structArrayList*a...

#include "arraylist.h"

void arrayInit(struct ArrayList* array)

{

array->size=8;

array->length=0;

array->data=malloc(sizeof(void *)*array->size);

}

void arrayInitSize(struct ArrayList* array,int size){

array->size=size;

array->length=0;

array->data=malloc(sizeof(void *)*array->size);

}

void arrayExpand(struct ArrayList *array){

void ** tmp=array->data;

array->size=array->size<<1;

array->data=malloc(sizeof(void *)*array->size);

int i=0;

for(i=0;ilength;i++){

array->data[i]=tmp[i];

}

free(tmp);

}

void arrayAdd(struct ArrayList* array,void *pValue){

if(array->lengthsize){

array->data[array->length++]=pValue;

}else{

arrayExpand(array);

arrayAdd(array,pValue);

}

}

void arrayInsert(struct ArrayList* array,int index,void * pValue){

if(array->lengthsize){

int i=0;

for(i=array->length;i>index;i--){

array->data[i]=array->data[i-1];

}

array->data[index]=pValue;

array->length++;

}else{

arrayExpand(array);

arrayInsert(array,index,pValue);

}

}

void arrayRemove(struct ArrayList *array,int index){

void * pValue=array->data[index];

free(pValue);

int i=0;

for(i=index;ilength-1;i++){

array->data[i]=array->data[i+1];

}

array->length--;

}

void arrayRemoveAll(struct ArrayList *array){

int i=0;

for(i=0;ilength-1;i++){

free(array->data[i]);

}

array->length=0;

}

int arrayRemovePValue(struct ArrayList *array,void * pValue){

int count=0;

int i=0;

for(i=0;ilength;i++){

if(array->data[i] == pValue){

count++;

}

array->data[i]=array->data[i+count];

}

free(pValue);

array->length-=count;

return count;

}

int arrayRemoveValue(struct ArrayList *array,void * value,int (*compare)(void * obj1,void *obj2)){

int count=0;

int i=0;

for(i=0;ilength;i++){

if(compare(array->data[i],value)==0){

free(array->data[i]);

count++;

}

array->data[i]=array->data[i+count];

}

array->length-=count;

return count;

}

int arrayBinarySearch(struct ArrayList* array,void * pValue,int (*compare)(void* obj1,void *obj2)){

int low = 0;

int high = array->length - 1;

int mid=-1;

while (low <= high) {

mid = (low + high)/2;

int cmp = compare(array->data[mid],pValue);

if (cmp < 0)

low = mid + 1;

else if (cmp > 0)

high = mid - 1;

else

return mid; // key found

}

return -(low + 1); // key not found.

return -1;

}

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,没有内置的ArrayList数据结构,但是我们可以通过使用指针和动态内存分配来实现类似ArrayList的功能。 下面是一个简单的示例代码,展示了如何在C语言中创建一个类似ArrayList的数据结构: ```c #include <stdio.h> #include <stdlib.h> typedef struct { int* data; // 存储数据的数组 int size; // 当前存储的元素个数 int capacity; // 数组的容量 } ArrayList; // 初始化ArrayList void init(ArrayList* list) { list->data = NULL; list->size = 0; list->capacity = 0; } // 向ArrayList中添加元素 void add(ArrayList* list, int element) { if (list->size == list->capacity) { // 如果数组已满,则扩展数组的容量 int newCapacity = (list->capacity == 0) ? 1 : list->capacity * 2; int* newData = (int*)realloc(list->data, newCapacity * sizeof(int)); if (newData == NULL) { printf("内存分配失败\n"); return; } list->data = newData; list->capacity = newCapacity; } list->data[list->size] = element; list->size++; } // 获取ArrayList中指定索引的元素 int get(ArrayList* list, int index) { if (index < 0 || index >= list->size) { printf("索引越界\n"); return -1; } return list->data[index]; } // 释放ArrayList占用的内存 void freeArrayList(ArrayList* list) { free(list->data); list->data = NULL; list->size = 0; list->capacity = 0; } int main() { ArrayList list; init(&list); add(&list, 10); add(&list, 20); add(&list, 30); printf("元素个数:%d\n", list.size); printf("第一个元素:%d\n", get(&list, 0)); printf("第二个元素:%d\n", get(&list, 1)); printf("第三个元素:%d\n", get(&list, 2)); freeArrayList(&list); return 0; } ``` 这段代码演示了如何使用指针和动态内存分配来创建一个类似ArrayList的数据结构。你可以通过调用`add`函数ArrayList中添加元素,通过调用`get`函数获取指定索引的元素。在使用完ArrayList后,记得调用`freeArrayList`函数释放占用的内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值