По заданию нужно реализовать очередь с приоритетом в виде списка. Возникла проблема при добавлении элементов в середину списка так чтобы они стояли рядом с элементами с таким же приоритетом. 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()
{
}
Я хочу добавлять элементы в зависимости от приоритета, чем выше приоритет тем ближе к концу и потом просто удалять из конца, те мы ищем где начинается часть с нужным приоритетом и вставляем в начало этой части и удалять с конца. В итоге оно будет удалять самые старые элементы в самом высоком имеющимся приоритете.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При выходе за пределы динамического массива программа впервые вместо вылета с ошибкой 0xC0000005 выводит "once (адрес) is (значение)"Из-за чего это...
Есть необходимость переопределить видимость метода наследуемого от базового, или запретить его переопределение
Примерно продумал синтаксис, но выводит число неправильноАлгоритм такой: число оставить без его целой части, далее умножать на 10 до тех пор,...