队列数组实现:出列函数

时间:2016-10-05 23:27:27

标签: c queue

坚持阵列队列出列函数实现的问题。 似乎函数本身是正确的,但问题是我理解参数中的指针。为什么我在这里退出Segmentation故障?

#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(&q)) {
    printf("Queue is empty\n");
}

enqueue(&q, 34);
enqueue(&q, 2);
enqueue(&q, 4);
dequeue(&q, &q.head);

if(!isempty(&q)) {
    printf("Queue is not empty\n");
}

printf("%i\n", 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: %d\n", 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;
}   

0 个答案:

没有答案