[英]Using linked list to create Queue data structure
我正在嘗試構建一個包含節點的隊列數據結構,每個節點都有 integer 值和一個指向下一個節點的指針,他 deQueue(Queue q) 有問題; function,它返回像堆棧(LIFO)這樣的元素,這是我的代碼和 output
去隊列();
int deQueue(Queue* q){
if(q->head)
{
int result;
Node*temp=q->head;
result=temp->value;
q->head=temp->next;
free(temp);
if(q->head==NULL)
q->tail=NULL;
return result;
}
}
隊列():
void enQueue(Queue* q ,Node* node){
if(isEmpty(q)){
q->head = q->tail = node;
q->head->next = q->tail->next = NULL;
q->size++;
}
else{
q->tail->next = node;
q->tail = node;
q->tail->next = NULL;
q->size++;
}
}
主要的():
int main()
{
Queue* q = initializerQueue();
Node* n1 = newNode(10);
Node* n2 = newNode(20);
Node* n3 = newNode(30);
Node* n4 = newNode(40);
enQueue(q , n1);
enQueue(q , n2);
enQueue(q , n3);
enQueue(q , n4);
printQueue(q);
printf("\n%d - %d - %d - %d " , deQueue(q) , deQueue(q) , deQueue(q) , deQueue(q));
return 0;
}
您可能在列表的開頭插入,並且在您的 function deQueue 中,您將獲得列表的第一個元素,使其表現得像一個堆棧。 解決此問題的一種方法是在列表末尾添加每個新元素,或者 deQueue 獲取最后一個元素。
我認為錯誤來自入隊 function 而不是出隊 function
入隊 function 應該是
void enqueue(Queue *q, Node *node){
if(q->head == NULL){
q->head = q->tail = node;
return;
}
q->tail->next = node;
q->tail = node;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.