我正在用 C 语言编写一个将字符串(字符指针)作为元素的队列结构。我遇到的问题是,在打印一次元素值之后,它就变成了 null 。
使用下面的代码,我期待这个输出:
1 Hello
1 Hello
2 World
Hello World
1
但我得到这个输出:
1 Hello
1 (null)
2 World
(null) (null)
1
有人可以告诉我我做错了什么吗?
#include <stdlib.h>
#include <stdio.h>
struct Node {
struct Node *next;
char* element;
};
struct Queue {
int size;
struct Node *head;
struct Node *tail;
};
void Enqueue(struct Queue *q, char* str) {
struct Node newNode = {0,str};
if(q->size == 0) {
q->head = &newNode;
}
else {
q->tail->next = &newNode;
}
q->tail = &newNode;
q->size = q->size + 1;
}
char* Dequeue(struct Queue *q) {
if(q->size < 0) {
return -1;
}
char* tbr = q->head->element;
struct Node* oldNode = q->head;
q->head = oldNode->next;
q->size = q->size - 1;
if(q->size == 0) {
q->tail = NULL;
}
return tbr;
}
int IsEmpty(struct Queue *q) {
return q->size == 0;
}
char* Peek(struct Queue *q) {
return q->head->element;
}
int main() {
struct Queue q = {0};
Enqueue(&q,"Hello");
printf("%d %s\n",q.size,q.head->element);
printf("%d %s\n",q.size,q.head->element);
Enqueue(&q,"World");
printf("%d %s\n",q.size,q.head->next->element);
printf("%s %s\n",Dequeue(&q),Dequeue(&q));
printf("%d\n",IsEmpty(&q));
printf("%s %s\n","Hello","World");
Dequeue(&q);
return 0;
}