Лучший способ реализовать стек и односвязный список
Какой лучший способ реализовать стек и односвязный список? Если у меня есть две структуры, в которых первая будет содержать структуру узла (значение (я), указатель), а другая - важные узлы (вершина или голова, хвост и размер, если необходимо), или я должен использовать только узел структура?
Вот что я имею в виду:
Случай 1:
typedef struct node {
int value;
struct node *next;
} Node;
Случай 2 (стек):
typedef struct node {
int value;
struct node *next;
} Node;
typedef struct stack {
Node *top;
/* int size; */
} Stack;
Случай 2 (sll):
typedef struct node {
int value;
struct node *next;
} Node;
typedef struct list {
Node *head, *tail;
/* int len; */
} List;
1 ответ
Ваш случай 2 имеет преимущество лучшей безопасности типов. Компилятор C обнаружит, когда вы используете Node или Stack вместо List, и так далее.
И наоборот, когда есть функции, которые могут с таким же успехом работать со стеком и списком, вам потребуются специализированные версии этих программ. Конечно, они могут иметь общую низкоуровневую реализацию на основе узлов. У вас должно быть немного больше административных накладных расходов на безопасность типов, но обычно это того стоит.