C: Создание коллекции структур / создание списка целых чисел - PullRequest
0 голосов
/ 12 марта 2011

Мне было интересно, можете ли вы создать список целых чисел.

Как вы знаете, большинство других языков могут иметь бесконечный список чисел.Но я не знаю, можете ли вы сделать это с C.

в C, вы можете сделать

целые числа [20];Но я не хочу объявлять размер для него, вместо этого я хочу, чтобы список продолжался вечно.

и, кроме того, у меня есть структура

typedef struct someStruct
{
    char data;
    chat data2;
}STRUCT_REC,*SR;

, чтобы сделатьсписок структур мы просто делаем список STRUCT_REC;право?

Ответы [ 5 ]

2 голосов
/ 12 марта 2011

У вас есть два варианта:

  1. Использовать динамически размещенный массив. Вы выделяете необходимое количество места, используя malloc () . Затем вы можете выделить больше места, используя realloc () . Недостатки этого подхода в том, что вы обычно выделяете больше места, чем вам нужно, и когда вы перераспределяете пространство, программе может понадобиться переместить все ваши элементы в новое место в памяти, что может быть дорогостоящим.

  2. Использовать связанный список . Связанные списки позволяют в любое время динамически распределять пространство для одного элемента и добавлять его в конец списка. Для этого связанный список состоит из узлов, каждый из которых содержит один элемент данных и один указатель на следующий узел. Недостатком этого подхода является то, что вы теряете быстрый произвольный доступ (т. Е. Если вы хотите получить элемент № 100, сначала вам нужно посмотреть на элементы 1-99), и у вас есть дополнительные пробелы из дополнительных указателей.

0 голосов
/ 12 марта 2011
0 голосов
/ 12 марта 2011

Вам нужен список или вам нужно написать код для списка? Если первое, я предлагаю вам не изобретать велосипед, а использовать существующую протестированную библиотеку, такую ​​как glib .

0 голосов
/ 12 марта 2011

http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

Вы можете использовать realloc для увеличения объема выделенной памяти. Кроме того, пример на этой странице, вероятно, то, что вы хотите изучить. Это близко к тому, что вы ищете.

0 голосов
/ 12 марта 2011

Вам нужно взглянуть на malloc и друзей (calloc, realloc, free).

Способ использовать один и тот же, несмотря ни на чтотип, который вы используете.

Вот очень простой пример с двойными числами:

#include <stdlib.h>
int main(void) {
    double *arr;
    arr = malloc(1 * sizeof *arr); /* size for 1 element */
    if (arr) {
        double *tmp;
        tmp = realloc(arr, 100 * sizeof *tmp); /* attempt to resize for 100 elements */
        if (tmp) {
            arr = tmp; /* resize 'worked' */
        } else {
            /* not enough memory */
            free(arr);
            exit(EXIT_FAILURE);
        }
        /* use arr */
        free(arr);
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...