Самоотверженные стеки

Предположим, что у нас есть стек, как определено ниже:

typedef struct node
{
 int data;
 struct node *next;
} node;

Я скопировал это определение из книги, но я не совсем уверен, что делают последние 2 строки. Означает ли объявление узла в конце какое-либо отношение к объявлению структуры или это просто объект, который мы создаем?

2 ответа

учитывая последние две строки:

1:

struct node *next;

объясняет: вы создаете переменную-указатель (т.е. следующий) типа struct node и можете удерживать адрес того же типа. обычно концепция возникает, когда вы хотите динамически выполнять операцию стека.

+--+----+ +--+----+ +--+----+ +--+----+
|10|2000| |20|3000| |30|4000| |40|NULL|
+--+----+ +--+----+ +--+----+ +--+----+
 1000 2000 3000 4000

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

2:

typedef struct {
type1 fieldname1;
type2 fieldname2;
....
typeN fieldnameN;
} NEW_TYPE;

NEW_TYPE variable_identifier;

Здесь NEW_TYPE - это имя typedef, которое можно использовать как любой тип.

Я попытался дать общий синтаксис. надеюсь, что вы его получите.


Код эквивалентен:

struct node
{
 int data;
 struct node *next;
};

typedef struct node node;

typedef на тип struct node, проще видеть node в вашем коде, это псевдоним для struct node созданный typedef.

licensed under cc by-sa 3.0 with attribution.