我正在尝试构建一个包含节点的队列数据结构,每个节点都有整数值和一个指向下一个节点的指针,他有问题 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;
}
我认为错误来自入队函数,而不是出队函数
排队功能应该是
void enqueue(Queue *q, Node *node){
if(q->head == NULL){
q->head = q->tail = node;
return;
}
q->tail->next = node;
q->tail = node;
}
您可能正在列表的开头插入,而在函数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
我试图初始化一个双链接列表,其中包含另一个双链接列表中的虚拟节点(也包含虚拟节点)。例如,学生列表中的一个节点有许多朋友存储在该节点内的链接列表中。这是我的代码: 当我试图编译它时,它告诉我:警告:来自不兼容指针类型的赋值。它出现在我发表评论的台词上。请帮忙^^ 编辑:谢谢鸭嘴兽!
我使用的参考资料如下: 出于效率考虑,我们选择队列的前面位于列表的开头,队列的后面位于列表的末尾。这样,我们从头部移除,并在尾部插入。 我想知道为什么在头部插入并在尾巴上移除会不好?这是因为在单链表中,删除尾节点并不容易,因为您必须访问之前的节点,而在单链表中执行此操作的唯一方法是从头开始?