Преобразование структуры связанного списка в FIFO в C - PullRequest
0 голосов
/ 27 июня 2018

Я использую пример, предоставленный Havenard в качестве ответа на этот вопрос: Написание push и pop в c

struct stack_control {
    struct stack_control* next;
    void* data;
};

void push_stack(struct stack_control** stack, void* data)
{
    struct stack_control* temp = malloc(sizeof(struct stack_control));
    temp->data = data;
    temp->next = *stack;
    *stack = temp;
}

void* pop_stack(struct stack_control** stack)
{
    void* data = NULL;
    struct stack_control* temp = *stack;
    if (temp)
    {
        data = temp->data;
        *stack = temp->next;
        free(temp);
    }
    return data;
}

struct stack_control* stack = NULL; // empty stack

Это хорошо сработало для моей цели, но теперь все изменилось, и я бы предпочел, чтобы он использовал FIFO, а не LIFO, и я не могу заставить его работать.

1 Ответ

0 голосов
/ 27 июня 2018

Ваша существующая процедура LIFO pop_stack должна быть переписана для FIFO:

void* pop_stack(struct stack_control** stack)
{
    void* data = NULL;
    struct stack_control *prev = NULL;
    struct stack_control *last = *stack;

    while(last->next != NULL)
      {
      prev = last;
      last = last->next;
      }

    if (last)
    {
        data = last->data;
        free(last);

        if(prev)
          prev->next = NULL;
    }

    return data;
}
...