Cписки и очереди [закрыт]

193
05 августа 2018, 08:00

По заданию нужно реализовать очередь с приоритетом в виде списка. Возникла проблема при добавлении элементов в середину списка так чтобы они стояли рядом с элементами с таким же приоритетом. header file

#include <iostream>
#include <string>
using namespace std;
struct Node
{
    string str;
    Node *next;
    Node *prev;
    int priority;
};
class List
{
    Node *head;
    Node *tail;
    Node *temp;
public:
    void show();
    void add(int x, string str);
    void delet();
    Node *found(int priority);
    List();
    ~List();
};

.cpp file

#include "List.h"

void List::show()
{
    Node *temp = head;
    while (temp!=NULL)
    {
        cout << temp->str<<endl;
        temp = temp->next;
    }
}
void List::add(int x, string str)
{
    Node *arr = new Node;
    if (head != NULL && tail != NULL)
    {
        temp=head;
        arr = found(x);//ищем начало части с нужным приоритетом
    }
    temp = NULL;
    temp->priority = x; //тут вылетает исключение
    temp->str = str;
    if (head == NULL && tail == NULL)
    {
        head = temp;
        tail = temp;
    }
    else if(head->next==NULL)
    {
        head->next = temp;
        tail = temp;
    }
    else if (arr->next == NULL)
    {
        arr->next = temp;
        tail = temp;
    }
    else
    {
        Node *tmp = new Node;
        tmp = arr->next;
        arr->next = temp;
        temp->prev = arr;
        temp->next = tmp;
        tmp->prev = temp;
    }
}
Node * List::found(int priority)
{
    if (temp->priority == priority)
        return temp;
    else
        return temp = temp->next;
}
List::List()
{
    head = NULL;
    tail = NULL;
    temp = NULL;
}

List::~List()
{
}

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

READ ALSO
Выход за пределы массива C++

Выход за пределы массива C++

При выходе за пределы динамического массива программа впервые вместо вылета с ошибкой 0xC0000005 выводит "once (адрес) is (значение)"Из-за чего это...

206
Скрыть метод в наследуемом классе

Скрыть метод в наследуемом классе

Есть необходимость переопределить видимость метода наследуемого от базового, или запретить его переопределение

173
Как получить число идущее после запятой введённой переменной типа double в C++? (например, ввели 14.25 - вывело 25)

Как получить число идущее после запятой введённой переменной типа double в C++? (например, ввели 14.25 - вывело 25)

Примерно продумал синтаксис, но выводит число неправильноАлгоритм такой: число оставить без его целой части, далее умножать на 10 до тех пор,...

166