【问题标题】:Array Of Linked Lists (5 Queues)链表数组(5 个队列)
【发布时间】:2018-10-29 16:18:59
【问题描述】:

我想实现一个链表数组来创建一个打印队列;带有五个队列的数组。每个队列旨在代表用户打印发送到打印机的作业。

这是我目前拥有的代码:

#include "stdafx.h"
#include <iostream>
using namespace std;

struct node
{
    float value;
    struct node *next;
};

node *head = NULL;

node* A[5];

int insertNodes(node *head, int value)
{
    node *aNode, *Ptr;

    aNode = new node;
    aNode->value = value;
    aNode->next = NULL;

    if (head == NULL)
        head = aNode;
    else
    {
        Ptr = head;

        while (Ptr->next != NULL)
            Ptr = Ptr->next;

        Ptr->next = Ptr;
    }

    return head;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int num;

    for (int i = 0; i < 5; i++)
    {
        cout << "Insert number";
        cin >> num;

        A[i] = insertNodes(i, num)
    }

    return 0;
}

此代码无法按预期工作,因为我无法将“作业”添加到队列中。 我哪里出错了?

【问题讨论】:

    标签: c++ arrays linked-list queue singly-linked-list


    【解决方案1】:

    您的代码存在许多问题:

    1. 您正在使用 C++ 而非 C 进行编程,因此您应该直接写 struct node *next 而不是 node *next

    2. 您的insertNodes 函数返回指向列表头部的指针,因此您需要返回node*,而不是int

    3. 当您插入具有现有头的列表时,您永远不会插入该项目。你必须做Ptr-&gt;next = aNode,而不是Ptr-&gt;next = Ptr

    4. 在您的主函数中,您应该将指向列表头部的指针传递给insertNodes,但实际上您将它传递给了int。相反,请尝试A[i] = insertNodes(A[i], num)

    5. 您将float 存储在列表节点中,但输入int - 真的需要吗?

    但是,由于您使用的是 C++,因此您可以完全依靠标准库已经提供的内容来避免大多数这些陷阱。

    只需#include &lt;deque&gt;,您就可以使用std::deque(一个double-ended queue)提供的一切,包括push_back 在末尾添加元素,front 访问第一个元素,pop_front 删除它 - 一个真正的队列,不需要自定义链表:

    #include "stdafx.h"
    #include <deque>
    #include <vector>
    #include <iostream>
    
    std::vector<std::deque<float>> A {5};
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        float input;
        for (int i = 0; i < 5; i++)
        {
            std::cout << "Insert number: ";
            std::cin >> input;
            A[i].push_back(input);
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 1970-01-01
      • 2018-03-16
      • 2020-01-05
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多