gpt4 book ai didi

c - 为什么它说我的队列大小为 0?

转载 作者:行者123 更新时间:2023-11-30 20:34:47 24 4
gpt4 key购买 nike

我想用C语言实现队列ADT。

我有以下内容:

// node structure:

typedef int ElementType;
typedef struct node {
ElementType key;
struct node* left_child;
struct node* right_sib;
}* Node;
typedef Node Item;

// queue structure:

struct queue {
Item* contents;
int head;
int tail;
int dim;
};
typedef struct queue* Queue;


Queue initqueue(); // create a queue
int queueEmpty(Queue q); // queue empty?
void enqueue(Queue q, Item elem); // insert item
int size(Queue q); // size of the queue?


Queue initqueue() {
Queue q = (Queue)malloc(sizeof(struct queue));
q -> contents = (Item*)malloc(sizeof(Item));
q -> head = 0;
q -> tail = 0;
q -> dim = 1;
return q;
}

int queueEmpty(Queue q) {
return (q -> head == q -> tail);
}

void enqueue(Queue q, Item elem) {
if (q -> head == (q -> tail % q -> dim) + 1 || q -> dim == 1)
q -> contents = (Item*)realloc(q -> contents, (q -> dim) * 2);
q -> contents[q -> tail] = elem;
q -> tail = (q -> tail + 1) % (q -> dim);
}

int size(Queue q) {
if (q -> tail < q -> head)
return ((q -> dim) - (q -> head) + (q -> tail) - 1);
else
return (q -> tail - q -> head);
}


int main() {
Queue q;
Item i = (Item)malloc(sizeof(struct node));
i -> key = 4;
q = initqueue();
enqueue(q, i);
printf("%d\n", queueEmpty(q));
printf("%d\n", size(q));

return 0;
}

我不明白为什么输出是0和1,即队列为空且大小为0。

最佳答案

您忘记调整 q->dim,因此 q->tail 之后仍然为零 (1 % 1) >入队

关于c - 为什么它说我的队列大小为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41466753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com