Подскажите, как реализовать двустороннюю очередь (Дек) в СИ Какие аргументы необходимо передать в функции добавления элемента в начало дека и добавления элемента в конец дека
Какие аргументы необходимо передать в функции извлечения элемента из начала дека и извлечения элемента из конца дека
Как выглядят эти функции? (словесное описание)

9 Мар 2021 в 19:41
116 +1
0
Ответы
1

Двусторонняя очередь (дек) в C может быть реализована с использованием массива или связанного списка.

Для добавления элемента в начало дека необходимо передать указатель на дек и значение элемента, который мы хотим добавить. Функция добавления в начало дека может выглядеть примерно так:

void addFront(int *deque, int *front, int *rear, int value)
if ((*front == 0 && *rear == SIZE - 1) || (*rear == (*front - 1) % (SIZE - 1)))
printf("Deque is full\n")
return
}
if (*front == -1)
*front = *rear = 0
} else if (*front == 0)
*front = SIZE - 1
} else
*front = (*front - 1) % (SIZE - 1)

deque[*front] = value
}

Для добавления элемента в конец дека аргументы будут такими же - указатель на дек и значение элемента. Функция добавления в конец дека будет выглядеть примерно так:

void addRear(int *deque, int *front, int *rear, int value)
if ((*front == 0 && *rear == SIZE - 1) || (*rear == (*front - 1) % (SIZE - 1)))
printf("Deque is full\n")
return
}
if (*front == -1)
*front = *rear = 0
} else if (*rear == SIZE - 1)
*rear = 0
} else
*rear = (*rear + 1) % (SIZE - 1)

deque[*rear] = value
}

Для извлечения элемента из начала дека необходимо передать указатель на дек. Функция извлечения элемента из начала дека может выглядеть примерно так:

int deleteFront(int *deque, int *front, int *rear)
if (*front == -1)
printf("Deque is empty\n")
return -1

int value = deque[*front]
if (*front == *rear)
*front = *rear = -1
} else
*front = (*front + 1) % SIZE

return value
}

Для извлечения элемента из конца дека также необходимо передать указатель на дек. Функция извлечения элемента из конца дека может выглядеть примерно так:

int deleteRear(int *deque, int *front, int *rear)
if (*front == -1)
printf("Deque is empty\n")
return -1

int value = deque[*rear]
if (*front == *rear)
*front = *rear = -1
} else if (*rear == 0)
*rear = SIZE - 1
} else
*rear = (*rear - 1) % SIZE

return value
}

Эти функции позволяют добавлять элементы в начало и конец дека, а также удалять элементы из начала и конца дека.

17 Апр в 20:44
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 663 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир