簡體   English   中英

使用鏈表創建Queue數據結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM