2015-09-27 2 views
1

Может кто-то объяснить приведенный ниже код. Я новичок в C и пытаюсь понять это. почему у нас есть queueNodeT в конце?Язык C и Очереди/связанные списки

typedef char queueElementT; 

typedef struct queueNodeTag { 
    queueElementT element; 
    struct queueNodeTag *next; 
} queueNodeT; 
+0

Это для 'typedef'. Он объединяет декларацию 'struct' и имя typedef для структуры. –

+0

Объявление 'typedef' объявляет псевдоним для типа. В этом случае 'queueElementT' объявляется псевдонимом для' char'. Кроме того, 'queueNodeT' объявляется псевдонимом для' struct queueNodeTag', а 'struct queueNodeTag', кроме того, определяется как' struct' с указанными членами. –

ответ

0

queueNodeT - имя типа, который пытается создать команда typedef.

Альтернативный способ указать это:

struct queueNodeTag { 
    ... 
}; 
typedef struct queueNodeTag queueNodeT; 

В C (по сравнению с C++), "структура queueNodeTag" просто определяет-структуру под названием "queueNodeTag". В C++ [вы должны попасть туда], это было бы также определить тип с именем «queueNodeTag»

При создании переменной указатель на структуру, он немного короче использовать:

queueNodeT *my_pointer; 

чем:

struct queueNodeTag *my_pointer; 

Конечный «Т» - это просто соглашение о кодировании, чтобы обозначить, что это имя типа, а не переменная. Вы можете использовать других.Шахта:

struct mystructname { 
    ... 
}; 
typedef struct mystructname mystructname_t; 
typedef mystructname_t *mystructname_p; 

Использование mystructname_p, вы можете изменить:

struct mystructname *my_pointer; 
mystructname_t *my_pointer; 

в:

mystructname_p my_pointer; 

The "_t" является довольно распространенным явлением. «_p» - это мое соглашение, но, я считаю, что другие соглашения определяют указатели на типы как «p < Mytype>», например «pMystructName». Я предпочитаю использовать суффикс для этой [и обозначения «змеиного случая», а не обозначения «верблюжьего горба» в вашем примере].

0

Давайте разбейте часть по частям.

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

typedef char queueElementT; 

Теперь вот struct. Он содержит две переменные, элемент, который он удерживает, в этом случае char. Затем он также сообщает, какой элемент следующий в queue.

typedef struct queueNodeTag { 
    queueElementT element; 
    struct queueNodeTag *next; 
} queueNodeT; 

Подробнее об этом можно прочитать в сообщении this.

Демонстрация:

int count (queueNodeTag q) { 
    int i = 0; 

    if (q == null) { 
     return 0; 
    } 

    if (q.next == null) { 
     return 1; 
    } 

    while (q.next != null) { 
     q = q.next; 
     i++; 
    } 

    return i; 
} 

Три случая в обращении.

  1. q является null, то queue пуст. Возврат 0.
  2. q.next is null, queue содержит только один элемент. Возврат 1.
  3. Повтор до q.next отделен от null, прирост i как мы идем. Лучшее имя для меня может быть elements или что-то подобное.

Этот код непроверен, поскольку в настоящее время у меня нет компилятора C. Кто-то, у кого есть доступный, может, возможно, проверить, что ошибка не была сделана?

+0

спасибо! я пытаюсь код –

Смежные вопросы