#c #queue
#c #очередь
Вопрос:
Застрял на проблеме с реализацией функции удаления из очереди массива. Кажется, что сама функция верна, но проблема, насколько я понимаю, в указателе в параметрах. Почему я завершаю работу с ошибкой сегментации здесь?
#include <stdio.h>
#include <stdbool.h>
#define CAPACITY 3
typedef struct {
int head;
int size;
int elements[CAPACITY];
} queue;
bool isempty(queue* q);
int size(queue* q);
bool enqueue(queue* q, int element);
bool dequeue(queue* q, int* element);
int main(void) {
queue q;
if(isempty(amp;q)) {
printf("Queue is emptyn");
}
enqueue(amp;q, 34);
enqueue(amp;q, 2);
enqueue(amp;q, 4);
dequeue(amp;q, amp;q.head);
if(!isempty(amp;q)) {
printf("Queue is not emptyn");
}
printf("%in", q.elements[1]);
}
bool isempty(queue* q) {
return q->size == 0;
}
int size(queue* q) {
return q->size;
}
bool enqueue(queue* q, int element) {
if(q->size < CAPACITY) {
q->elements[(q->head q->size) % CAPACITY] = element;
q->size ;
printf("Enqueue: %dn", element);
return true;
}
return false;
}
bool dequeue(queue* q, int* element) {
if(q->size > 0) {
*element = q->elements[q->head];
q->head = (q->head 1) % CAPACITY;
q->size--;
return true;
}
return false;
}
Комментарии:
1. Используйте отладчик. Как минимум, он точно сообщит вам, какая строка вызывает ошибку seg. И многое другое.
2.
queue q;
это неинициализированная переменная. Он содержит ненужные значения. С этого момента все ставки отменяются.3. Для начала вам может потребоваться иметь еще одну функцию, например createqueue, где вы инициализируете очередь.