반응형

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) { 04, 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 > 0printf(", ");
        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) { 04, 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 > 0printf(", ");
        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

 

 

 

반응형