当前位置: 首页 > 知识库问答 >
问题:

使用链表创建队列数据结构

边国安
2023-03-14

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

取消排队();

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) , deQueue(q) , deQueue(q));
    return 0;
}

共有2个答案

宋琛
2023-03-14

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

排队功能应该是

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

   q->tail->next = node;
   q->tail = node;
}
宿楚青
2023-03-14

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

 类似资料:
  • 本文向大家介绍php 数据结构之链表队列,包括了php 数据结构之链表队列的使用技巧和注意事项,需要的朋友参考一下 php 链表队列 实例代码: 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 问题内容: 用Java创建链接列表的最佳方法是什么? 问题答案: 对于熟悉Java的开发人员来说,显而易见的解决方案是使用java.util中已经提供的LinkedList类。说,但是,由于某种原因,你想进行自己的实现。这是一个链接列表的快速示例,该链接列表在列表的开头插入新链接,从列表的开头删除并循环浏览列表以打印其中包含的链接。对此实现的增强包括使其成为双向链接列表,添加从中间或结尾插入和删除

  • 我现有的使用阻止队列的代码创建了一个阻止队列列表(如私有列表 任何帮助将不胜感激。

  • 数组实现简单队列 class Node(object): def __init__(self, data): self.data = data self.next = None def __str__(self) -> str: return '(data=%d)' % self.data class SimpleQueue(o

  • 我试图初始化一个双链接列表,其中包含另一个双链接列表中的虚拟节点(也包含虚拟节点)。例如,学生列表中的一个节点有许多朋友存储在该节点内的链接列表中。这是我的代码: 当我试图编译它时,它告诉我:警告:来自不兼容指针类型的赋值。它出现在我发表评论的台词上。请帮忙^^ 编辑:谢谢鸭嘴兽!

  • 我使用的参考资料如下: 出于效率考虑,我们选择队列的前面位于列表的开头,队列的后面位于列表的末尾。这样,我们从头部移除,并在尾部插入。 我想知道为什么在头部插入并在尾巴上移除会不好?这是因为在单链表中,删除尾节点并不容易,因为您必须访问之前的节点,而在单链表中执行此操作的唯一方法是从头开始?