Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Semeon94
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 4
31.03.2013, 16:28     Очередь с приоритетом #1
У меня есть задание:

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

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

Есть вопрос: Как определять приоритет? Можете привести какой-нибудь пример?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 16:28     Очередь с приоритетом
Посмотрите здесь:

Очередь с приоритетом. C++
Очередь с приоритетом C++
Очередь с приоритетом C++
C++ Очередь с приоритетом
Очередь с приоритетом C++
Очередь с приоритетом C++
C++ Очередь с приоритетом
C++ Очередь с приоритетом. Элементы с наивысшим приоритетом ставятся в начало очереди, с наименьшим – в конец
C++ Очередь с приоритетом
C++ Очередь с приоритетом
C++ Очередь с приоритетом
C++ Очередь с приоритетом из STL

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
01.04.2013, 10:22     Очередь с приоритетом #2
Цитата Сообщение от 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;
}
Yandex
Объявления
01.04.2013, 10:22     Очередь с приоритетом
Ответ Создать тему
Опции темы

Текущее время: 19:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru