Cписки и очереди, их реализация? По заданию нужно реализовать очередь с приоритетом в виде списка. Возникла проблема при выводе элементов. header file#include
#include
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 *tmp = head;
while (tmp!=NULL)
{
cout strnext == NULL)
{
break;
}
else
{
tmp = tmp->next;
}
}
}
void List::add(int x, string str2)
{
Node *temp = new Node;
temp->priority = x;
temp->str = str2;
if (head != NULL)
{
temp->prev = tail;
tail->next = temp;
tail = temp;
}
else
{
temp->prev = NULL;
head = tail = temp;
}
}
void List::delet()
{
tail = tail->prev;
}
//Node * List::found(int priority)
//{
// if (temp->priority == priority)
// return temp;
// else
// return temp = temp->next;
//}
List::List()
{
head = NULL;
tail = NULL;
}
List::~List()
{
}

21 Авг 2019 в 06:59
147 +1
0
Ответы
1

Проблема возникает из-за того, что переменная temp не инициализирована в функции show(). Она должна быть инициализирована как temp = head; перед циклом while.

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

Если вы хотите использовать функцию found(int priority), ее стоит доработать, чтобы она искала узел с заданным приоритетом и возвращала его.

Более полная реализация добавления элемента с учетом приоритета и вывода элементов может выглядеть следующим образом:

void List::add(int x, string str2)
{
Node *temp = new Node;
temp->priority = x;
temp->str = str2;
if (head == NULL) {
// Если список пустой, создаем новый узел и делаем его головой и хвостом
head = tail = temp;
} else if (x > head->priority) {
// Если новый элемент имеет больший приоритет, добавляем его в начало списка
temp->next = head;
head->prev = temp;
head = temp;
} else {
Node *current = head;
while (current->next != NULL && current->next->priority >= x) {
current = current->next;
}
temp->next = current->next;
if (current->next != NULL) {
current->next->prev = temp;
} else {
tail = temp;
}
temp->prev = current;
current->next = temp;
}
}
void List::show()
{
Node *tmp = head;
while (tmp != NULL) {
cout << tmp->str << " ";
tmp = tmp->next;
}
cout << endl;
}

Это пример реализации, который учитывает добавление элементов с учетом приоритета и правильный вывод элементов очереди. Не забудьте также добавить логику для корректного удаления элементов и освобождения памяти в деструкторе.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир