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

Функция добавления и увеличения элемента из очереди с приоритетами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевод в 2 сс (какой способ будет быстрее работать) http://www.cyberforum.ru/cpp-beginners/thread597655.html
Какой способ будет быстрее работать? Тривиальный, когда мы берем остатки, или такой - std::bitset <sizeof(Type) * 8> my(n); std::string str = my.to_string();
C++ Разработать программу для построения графиков функции Помогите решить задачу для зачета, файл с заданием прикрепил. Если можно с комментариями, ибо много пропустил по занятиям. № 5. с Разработать программу для построения графиков функции, заданных в таблице 1. Считать из файла, указанного пользователем значения абсциссы Х (не менее 20 значений), произвести сортировку Х по возрастанию, рассчитать для них значения ординаты У, записать результат... http://www.cyberforum.ru/cpp-beginners/thread597648.html
C++ Быстрая сортировка Хоара на векторе
Программа работает корректно! Сразу говорю, она слегка своеобразная, но все чики-пуки. я не могу понять как по ней сделать 3 графика: Предсказания, Гарантия, Ограничение. Плиз, скажите как это делается? Желательно развернуто, так как мозг женский, тугой)).. Надеюсь на помощь. Еще желательно сделать оценку быстродействия. // b_sort.cpp: определяет точку входа для консольного приложения....
C++ Подскажите пожалуйста, об области видимости объектов
Привет, есть небольшой вопрос: не могу разобраться с ООП, помогите пожалуста. Например, есть несколько классов с открытыми полями. НЕ понятно только почему если я создаю экземпляр в теле функции main его не видно в другом классе, но при этом, в теле функции Класса "А" можно создать экземпляр класса "Б"... Интересно, можно ли как-то передать сам экземпляр класса из main в тело метода другого...
C++ Перейти с Win на LINUX и с VB.NET на С++ http://www.cyberforum.ru/cpp-beginners/thread597614.html
По долгому периоду пользования продукции Microsoft решил перейти на павший выбор Kubuntu (Ubuntu) Ясень пень что VB.Net на линуксе нет. За то есть С++, который якобы лучше, к тому же тож на винде работать будет. Вот только в С++ я полный ноль. Но с чего то начинать же надо. Хочу попросить у бывалых совета, среда разработки и литературу для самотыканья) P.S. Знаю что есть среда QT там...
C++ Описать класс LIFO, реализующий стек произвольного размера для хранения целых чисел Уважаемые программисты помогите пожалуйста с задачей в которой я не знаю как чего делать!!!!! Вот задача:Описать класс LIFO, реализующий стек произвольного размера для хранения целых чисел. Добавление и извлечение одиночных элементов из стека должно быть реализовано при помощи перегрузки операций<>, добавление последовательности элементов<<, вывод на экран>>. При добавлении элементов в стек... подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
06.06.2012, 10:15     Функция добавления и увеличения элемента из очереди с приоритетами
Моё предложение:
1. Приоритет представлен целым беззнаковым числом, чем оно меньше, тем приоритет выше.
C++
1
2
3
4
5
6
struct list
{
 int value;
 unsigned int prioritet;
 list *next;
};
.
2. Объявить исключение QueryIsEmpty.
C++
1
2
3
4
5
6
7
8
class QueryIsEmpty: publiuc std::exception
{
 virtual char *what ()
 {
  static char s[]="Query is empty";
  return s;
 }
};
.
3. Из дополнительных данных прикрутить к очереди 1 указатель - только на её начало.
C++
1
list *query=nullptr;
.
Тогда функция добавления
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
void AddItemToQuery(list *&query, list &item)
{
 list *p;
 list *b;
 if (query==NULL)
 {
  query=new list;
  query->value=item.value;
  query->prioritet=item.prioritet;
  query->next=nullptr;
 }
 else
 {
  for (p=query; (p->next!=nullptr)&&(p->next->prioritet<=item.prioritet); ++p);
  if (p->Next!=nullptr)
  {
   b=new list;
   b->next=p->next;
   p->next=b;
  }
  else
  {
   p->next=new list;
  }
  p->next->value=item.value;
  p->next->prioritet=item.prioritet;
 }
}
, функция чтения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
list ReadFromQuery(list *&query)
{
 list r;
 list *b;
 if (query==nullptr)
 {
  throw QueryIsEmpty;
 }
 else
 {
  list r=*query;
  b=query;
  query=query->next;
  delete b;
 }
}
, функция удаление очереди
C++
1
2
3
4
5
6
7
8
9
10
void FreeQuert(list *&query)
{
 list *b=query;
 while (query!=nullptr)
 {
  p=query->next;
  delete query;
  query=b;
 }
}
и всё целиком
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
97
98
99
100
101
102
103
#include <iostream>
class QueryIsEmpty: publiuc std::exception
{
 virtual char *what ()
 {
  static char s[]="Query is empty";
  return s;
 }
}; 
struct list
{
 int value;
 unsigned int prioritet;
 list *next;
};
list *query=nullptr;
void AddItemToQuery(list *&query, list &item)
{
 list *p;
 list *b;
 if (query==NULL)
 {
  query=new list;
  query->value=item.value;
  query->prioritet=item.prioritet;
  query->next=nullptr;
 }
 else
 {
  for (p=query; (p->next!=nullptr)&&(p->next->prioritet<=item.prioritet); ++p);
  if (p->Next!=nullptr)
  {
   b=new list;
   b->next=p->next;
   p->next=b;
  }
  else
  {
   p->next=new list;
  }
  p->next->value=item.value;
  p->next->prioritet=item.prioritet;
 }
}
list ReadFromQuery(list *&query)
{
 list r;
 list *b;
 if (query==nullptr)
 {
  throw QueryIsEmpty;
 }
 else
 {
  list r=*query;
  b=query;
  query=query->next;
  delete b;
 }
}
void FreeQuert(list *&query)
{
 list *b=query;
 while (query!=nullptr)
 {
  p=query->next;
  delete query;
  query=b;
 }
}
void main()
{
 char c;
 list item;
 do
 {
  std::cout<<"A - добавить элемент,"<<std::endl;
  std::cout<<"R - читать элемент,"<<std::endl;
  std::cout<<"E - выход."<<std::endl;
  std::cin>>c;
  std::cout<<std::endl;
  switch (c)
  {
   case 'a':
   case 'A': std::cout<<"Данные элемента: ";
             std::cin>>item.value;
             std::cout<<", приоритет элемента: ";
             std::cin>>item.prioritet;
             std::cout<<std::endl;
             AddItemToQuery(query, item); 
             break;
   case 'r':
   case 'R': item=ReadFromQuery(query);
             std::cout<<"Данные элемента: "<<item.value<<"."<<std::endl;
             break;
   case 'e':
   case 'E': FreeQuert(query);
             break;
   default : std::cout<<"Не правильный вариант."<<std::endl;
  }
 } while ((c!='e')&&(c!='E'));
 return 0;
}
.
 
Текущее время: 14:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru