【问题标题】:Using linked list to create Queue data structure使用链表创建Queue数据结构
【发布时间】:2021-07-29 08:47:17
【问题描述】:

我正在尝试构建一个包含节点的队列数据结构,每个节点都有整数值和指向下一个节点的指针,他有问题 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) , deQueue(q) , deQueue(q));
    return 0;
}

【问题讨论】:

  • C 还是 C++?请选择一个;很少两个标签都适用。
  • 您可能会在链表的头部添加新元素,在链表的末尾添加新元素可能会帮助您向我们展示完整的代码。
  • 如果我刚才所说的令人困惑,请考虑一下。给定 foo( a(), b(), c() ) ,忘记你认为你知道的并问自己:a() 被称为 before b() 还是 c() ?你确定? Now read this。当您期望执行顺序时,它会产生巨大的不同,而实际上没有任何保证。
  • 完全不相关,你真的应该在 dequeue'ing 时减少你的队列 @9​​87654331@ 成员。
  • @HosnyyHanyy 真的没那么复杂。事实上,它是一种非常简单的语言(很少有保留字、基本结构等)。但它承载着令人难以置信的责任。仅次于汇编,没有任何一种语言比 C 更快或更轻松地让你自爆。如果使用得当,它很棒(尽管我仍然更喜欢 C++),但它非常很容易不正确地使用所以强大的力量来了......是的。无论如何,很高兴你能理解。

标签: c data-structures


【解决方案1】:

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

【讨论】:

  • @Agent_A 不,我很确定我添加到列表的末尾,实际上第一组输出是一个从头到尾打印列表的函数,我认为列表很好
  • @HosnyyHanyy 请分享 EnQueue 功能
【解决方案2】:

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

入队函数应该是

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

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

【讨论】:

  • 我刚刚添加了我的队列,它几乎相同
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多