Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 4
1

Очередь с приоритетом

31.03.2013, 16:28. Просмотров 2176. Ответов 1
Метки нет (Все метки)

У меня есть задание:

9. Разработать шаблон класса для работы с очередью с приоритетами, выполненной в виде односвязного списка. Тип элементов задается как параметр шаблона. Приоритет хранящихся данных задается своим типом. При добавлении элемента с конца ищется место для вставки: пропускаются все элементы с меньшим приоритетом. Порядок извлечения элементов с одинаковыми приоритетами должен соответствовать порядку их помещения в очередь. Для разрабатываемого шаблона обязательно определите:
a. конструктор по умолчанию;
b. конструктор копирования;
c. деструктор;
d. оператор присваивания;
e. оператор [];
f. добавление элемента в конец;
g. удаление элемента из начала ;
h. метод, выводящий содержимое очереди в указанный поток,
i. поиск номера элемента в очереди по значению.
j. Пользовательский тип – персона (ФИО, пол, возраст).

Тестирование необходимо провести для типов int, char* и пользовательский.

Есть вопрос: Как определять приоритет? Можете привести какой-нибудь пример?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2013, 16:28
Ответы с готовыми решениями:

Очередь с приоритетом. Элементы с наивысшим приоритетом ставятся в начало очереди, с наименьшим – в конец
Здравствуйте! имеется задание: создать очередь с приоритетом (у каждого элемента свой приоритет)....

Очередь с приоритетом
Разработать функции работы с приоритетной очередью. Постановка запросов в очередь выполняется по...

Очередь с приоритетом.
Добрый день. Возникла небольшая проблема. У нас есть текстовый файл содержащий следующую числовую...

Очередь с приоритетом
есть очередь #include <iostream> #include <queue> using namespace std; int main() { ...

1
...
1795 / 1261 / 933
Регистрация: 12.02.2013
Сообщений: 2,058
01.04.2013, 10:22 2
Лучший ответ Сообщение было отмечено Semeon94 как решение

Решение

Цитата Сообщение от Semeon94 Посмотреть сообщение
Как определять приоритет?
Приоритет - это ещё одно поле целого типа. С помощью него вы и будите располагать ваши элементы. Написал небольшую демонстрацию, думаю разберётесь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
#include <stdexcept>
#include <cstdlib>
 
template <typename T>
class TQueue
{
   protected:
      struct TNode
      {
         T data;
         int priority;
         TNode* next;
      }* list;
 
   public:
      TQueue(): list(NULL) { ; }
 
      TQueue* Push(T data, int priority = 0)
      {
         TNode* node = new TNode;
         node->data = data;
         node->priority = priority;
 
         if ((list == NULL) || (list->priority < node->priority))
         {
            node->next = list;
            list = node;
         }
         else
         {
            TNode* cur;
 
            for (cur = list; cur->next && (cur->next->priority >= node->priority); cur = cur->next) { ; }
 
            node->next = cur->next;
            cur->next = node;
         }
 
         return this;
      }
 
      T Pop() throw (std::out_of_range)
      {
         if (IsEmpty())
         {
            throw std::out_of_range("queue is empty");
         }
         T data = list->data;
         TNode* node = list;
         list = list->next;
         delete node;
 
         return data;
      }
 
      bool IsEmpty() const
      {
         return (list == NULL);
      }
 
      friend std::ostream& operator << (std::ostream& os, const TQueue<T>& queue)
      {
         typename TQueue<T>::TNode* node;
 
         for (node = queue.list; node; node = node->next)
         {
            if (node != queue.list)
            {
               os << ", ";
            }
            os << '[' << node->priority << ']' << node->data;
         }
 
         return os;
      }
};
 
int main()
{
   TQueue<int> list;
   list.Push(10, 0);
   list.Push(14, 1);
   list.Push(12, 0);
   list.Push(99, 9);
 
   std::cout << "source: " << list << std::endl;
 
   std::cout << "poped: " << list.Pop() << std::endl;
 
   std::cout << "result: " << list << std::endl;
 
   system("pause");
 
   return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2013, 10:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Очередь с приоритетом
Здравствуйте! Помогите, пожалуйста! Мне нужно реализовать приоритетную очередь через дерево списков...

Очередь с приоритетом
как реализовать очередь с приоритетом на бинарной куче?при том нужно графически вывести на консоль...

Очередь с приоритетом
Всем привет . Собственно нужно организовать очередь с приоритетом. Задание: В офисе один...

Очередь с приоритетом
Здравствуйте! Нужна ваша помощь! Не могу разобраться в чём проблема. Создаю очередь с...

Очередь с приоритетом
Здравствуйте! Пожалуйста, если кто-то может, то помогите с задачей. Задач из книги А. Шень...

Очередь с приоритетом
Помогите, пожалуйста, создать из моего класса очередь с приоритетом(приоритетом является money). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.