Массив связанных списков (5 очередей) - PullRequest
0 голосов
/ 19 мая 2018

Я хотел бы реализовать массив связанных списков для создания очереди печати;с массивом из пяти очередей.Каждая очередь предназначена для представления пользователя, печатающего задание, отправленное на принтер.

Это код, который у меня сейчас есть:

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

Этот код не работает должным образом, так как я не могу добавить «задания» в очереди.Где я ошибся?

1 Ответ

0 голосов
/ 19 мая 2018

Существует ряд проблем с вашим кодом:

  1. Вы программируете на C ++, а не на C, поэтому вместо struct node *next вы должны просто написать node *next.

  2. Ваша функция insertNodes возвращает указатель на начало списка, поэтому вам нужно вернуть node*, а не int.

  3. Когда вы вставляете в список с существующей головой, вы никогда не вставляете элемент.Вы должны сделать Ptr->next = aNode, а не Ptr->next = Ptr.

  4. В вашей основной функции вы должны передать указатель на начало списка на insertNodes, но вына самом деле передать его int.Вместо этого попробуйте A[i] = insertNodes(A[i], num).

  5. Вы храните float в узлах списка, но вводите int - это действительно нужно?

Однако, поскольку вы находитесь в C ++, вы, вероятно, можете избежать большинства этих ловушек, полностью полагаясь на то, что стандартная библиотека уже предоставляет.

Просто #include <deque>, и вы можете использовать все, что std::deque (a d ouble- e nded que ue), включая 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;
}
...