반응형
c언어 list 재할당으로 ArrayList만들기
list 구조체에 길이(length), 할당량(capacity)을 활용하여 배열을 재할당(realloc)하여 ArrayList 만들기
1. 구조체 선언
// Struct list with length variable
struct list {
int length, capacity;
int *items;
};
typedef struct list list;
|
2. list 구조체 초기화
// Make a new list
list *newList() {
list *al = malloc(sizeof(list));
int *items = malloc(4 * sizeof(int));
*al = (list) { 0, 4, items };
return al;
}
|
3. list에 item 추가(int)
3.1 list의 배열 재할당
// Expand list
void expand(list *al) {
al->capacity = al->capacity * 3 / 2;
al->items = realloc(al->items, al->capacity * sizeof(int));
}
|
3.2 list에 item 추가 (int)
// Add an int to list
void add(list *al, int n) {
if (al->length >= al->capacity) expand(al);
al->items[al->length] = n;
al->length++;
}
|
4. list 출력
// Print list
void print(list *al) {
printf("[ ");
for (int i = 0; i < al->length; i++) {
if (i > 0) printf(", ");
printf("%d", al->items[i]);
}
printf(" ]\n");
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
/* ArrayList structure */
#include <stdio.h>
#include <stdlib.h>
// Struct list with length variable
struct list {
int length, capacity;
int *items;
};
typedef struct list list;
// Make a new list
list *newList() {
list *al = malloc(sizeof(list));
int *items = malloc(4 * sizeof(int));
*al = (list) { 0, 4, items };
return al;
}
// Expand list
void expand(list *al) {
al->capacity = al->capacity * 3 / 2;
al->items = realloc(al->items, al->capacity * sizeof(int));
}
// Add an int to list
void add(list *al, int n) {
if (al->length >= al->capacity) expand(al);
al->items[al->length] = n;
al->length++;
}
// Print list
void print(list *al) {
printf("[ ");
for (int i = 0; i < al->length; i++) {
if (i > 0) printf(", ");
printf("%d", al->items[i]);
}
printf(" ]\n");
}
// Function for main
void runMain() {
list *numbers;
numbers = newList();
for (int i = 0; i < 15; i++) add(numbers, i);
print(numbers);
}
int main() {
runMain();
}
|
cs |
반응형
'C 언어 > C언어 기초' 카테고리의 다른 글
[C언어 #58] 연결 리스트 (Linked lists) - item을 arraylist에 추가 (0) | 2020.08.18 |
---|---|
[C언어 #57] 객체 리스트 (Object lists) (0) | 2020.08.12 |
[C언어 #55] 리스트 (list) - 동적배열 (배열 길이 활용) (0) | 2020.07.30 |
[C언어 #54] 메모리 (Memory) - 배열 재할당 (realloc) (0) | 2020.07.30 |
[C언어 #53] 이진 탐색 (Binary Search) - 특정 문자 포함 여부 찾기 (0) | 2020.07.20 |