使用链表创建Queue数据结构

问题描述

我正在尝试构建一个队列数据结构,其中包含节点每个节点都有整数值和一个指向下一个节点的指针 deQueue(Queue q);函数,它返回像堆栈(LIFO)这样的元素,这是我的代码输出

deQueue();

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;
    }
}

enQueue():

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++;
    }
}

main():

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));
    return 0;
}

Output:

解决方法

您可能在列表的开头插入,而在您的函数 deQueue 中,您正在获取列表的第一个元素,使其表现得像一个堆栈。解决此问题的一种方法是在列表末尾添加每个新元素,或者 deQueue 获取最后一个元素。

,

我认为错误来自入队函数而不是出队函数

入队函数应该是

void enqueue(Queue *q,Node *node){
   if(q->head == NULL){
     q->head = q->tail = node;
     return;
   }

   q->tail->next = node;
   q->tail = node;
}