Лучший способ реализовать стек и односвязный список

Какой лучший способ реализовать стек и односвязный список? Если у меня есть две структуры, в которых первая будет содержать структуру узла (значение (я), указатель), а другая - важные узлы (вершина или голова, хвост и размер, если необходимо), или я должен использовать только узел структура?

Вот что я имею в виду:

Случай 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, и так далее.

И наоборот, когда есть функции, которые могут с таким же успехом работать со стеком и списком, вам потребуются специализированные версии этих программ. Конечно, они могут иметь общую низкоуровневую реализацию на основе узлов. У вас должно быть немного больше административных накладных расходов на безопасность типов, но обычно это того стоит.

Другие вопросы по тегам