文字列 (char ポインター) を要素として受け取るキュー構造体を 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;
}