C語言實現Java中的ArrayList
阿新 • • 發佈:2022-04-01
C語言實現Java中的ArrayList
1. 定義結構體
typedef struct ArrayList
{
int *array;
int size;
} ArrayList;
//ArrayList中包含一個數組和一個size屬性,size用來指示array中的資料數量。
2. ArrayList初始化
void init(ArrayList *list) { list->size = 0; list->array = NULL; } // 初始化,讓list的array為NULL,size為0。傳入引數為ArrayList物件 //(這裡的物件指的是ArrayList結構體,以指標的型別傳入。)
3. 新增元素
bool add(ArrayList *list, int element) { if (list->size == 0) { static int arr[10]; list->array = arr; } list->array[list->size] = element; list->size++; return True; } /* 新增元素:傳入ArrayList的指標和一個元素,如果list的size為0的話,讓list中的array 指向一個真正的陣列,然後將元素按順序放到該陣列中。 */
4. 插入元素
/* 在指定位置插入元素 傳入引數:ArrayList指標,索引index,元素element 插入方式,按照陣列插入方式,在x位置插入,則將x —— (size-1)位置的元素全部向後移動 */ bool insert(ArrayList *list, int index, int element) { if (index < 0 || index > list->size) { printf("Insert index is not defined.\n"); return False; } if (index == list->size) { add(list, element); return True; } for (int i = list->size - 1; i >= index; i--) { list->array[i + 1] = list->array[i]; } list->array[index] = element; list->size++; return True; }
5. 刪除元素(按照位置)
/*
按照索引刪除元素
引數:ArrayList指標,索引index
*/
bool del_index(ArrayList *list, int index)
{
if (index < 0 || index >= list->size)
{
printf("Del index is not defined");
return False;
}
for (int i = index; i < list->size; i++)
{
list->array[i] = list->array[i + 1];
}
list->size--;
return True;
}
6. 獲取元素索引
/*
獲取元素位置
引數:ArrayList指標,元素element
返回值:找到的第一個元素的索引,如果陣列中沒有,則返回-1
*/
int get_ele(ArrayList *list, int element)
{
int flag = 0;
for (int i = 0; i < list->size; i++)
{
if (list->array[i] == element)
{
flag = 1;
return i;
}
}
if (!flag)
{
return -1;
}
}
7. 刪除元素(按照元素)
/*
刪除ArrayList中出現的所有該元素
引數:ArrayList指標,元素element
使用遞迴方式,如果獲取該元素位置為-1,則跳出遞迴,否則,通過索引刪除(獲取元素位置)
即:del_index(list,get(element));
*/
bool del_ele(ArrayList *list, int element)
{
if (get_ele(list, element) == -1)
{
return True;
}
del_index(list, get_ele(list, element));
del_ele(list, element);
}
8. 按索引獲取元素
/*
獲取該索引上的元素
引數:ArrayList指標,索引index
*/
int get(ArrayList *list, int index)
{
return list->array[index];
}
9. 列印ArrayList
/*
列印傳入的ArrayList中的所有元素。
引數:ArrayList指標
*/
void print_list(ArrayList *list)
{
if (list->size == 0)
{
printf("size:%d\n", list->size);
return;
}
int n = 0;
printf("\n--------------\n");
for (int i = 0; i < list->size; i++)
{
n++;
printf("%d\t", *(list->array++));
if (n % 10 == 0)
{
printf("\n");
}
}
printf("\n---------------\nsize:%d", list->size);
}
總結:
#include <stdio.h>
#include <stdlib.h>
#define True 1
#define False 0
typedef int bool;
typedef struct ArrayList
{
int *array;
int size;
} ArrayList;
void init(ArrayList *list)
{
list->size = 0;
list->array = NULL;
}
bool add(ArrayList *list, int element)
{
if (list->size == 0)
{
static int arr[10];
list->array = arr;
}
list->array[list->size] = element;
list->size++;
return True;
}
bool insert(ArrayList *list, int index, int element)
{
if (index < 0 || index > list->size)
{
printf("Insert index is not defined.\n");
return False;
}
if (index == list->size)
{
add(list, element);
return True;
}
for (int i = list->size - 1; i >= index; i--)
{
list->array[i + 1] = list->array[i];
}
list->array[index] = element;
list->size++;
return True;
}
bool del_index(ArrayList *list, int index)
{
if (index < 0 || index >= list->size)
{
printf("Del index is not defined");
return False;
}
for (int i = index; i < list->size; i++)
{
list->array[i] = list->array[i + 1];
}
list->size--;
return True;
}
int get_ele(ArrayList *list, int element)
{
int flag = 0;
for (int i = 0; i < list->size; i++)
{
if (list->array[i] == element)
{
flag = 1;
return i;
}
}
if (!flag)
{
return -1;
}
}
bool del_ele(ArrayList *list, int element)
{
if (get_ele(list, element) == -1)
{
return True;
}
del_index(list, get_ele(list, element));
// for (int i = 0; i < list->size; i++)
// {
// if (list->array[i] == element)
// {
// del_index(list, i);
// break;
// }
// }
del_ele(list, element);
}
int get(ArrayList *list, int index)
{
return list->array[index];
}
void print_list(ArrayList *list)
{
if (list->size == 0)
{
printf("size:%d\n", list->size);
return;
}
int n = 0;
printf("\n--------------\n");
for (int i = 0; i < list->size; i++)
{
n++;
printf("%d\t", *(list->array++));
if (n % 10 == 0)
{
printf("\n");
}
}
printf("\n---------------\nsize:%d", list->size);
}