Проблема возникает из-за того, что переменная 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; }
Это пример реализации, который учитывает добавление элементов с учетом приоритета и правильный вывод элементов очереди. Не забудьте также добавить логику для корректного удаления элементов и освобождения памяти в деструкторе.
Проблема возникает из-за того, что переменная 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;
}
Это пример реализации, который учитывает добавление элементов с учетом приоритета и правильный вывод элементов очереди. Не забудьте также добавить логику для корректного удаления элементов и освобождения памяти в деструкторе.