Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mokona
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 9
#1

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

14.07.2013, 15:01. Просмотров 936. Ответов 2
Метки нет (Все метки)

Здравствуйте! Помогите, пожалуйста! Мне нужно реализовать приоритетную очередь через дерево списков с указанием приоритетов и добавление/удаление элементов по приоритету. Может кто-нибудь подскажет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2013, 15:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очередь с приоритетом (C++):

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

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

Очередь с приоритетом - C++
Помогите, пожалуйста, создать из моего класса очередь с приоритетом(приоритетом является money). #include <iostream> #include...

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

Очередь с приоритетом - C++
Всем привет . Собственно нужно организовать очередь с приоритетом. Задание: В офисе один принтер, на печать должны подоватся те...

Очередь с приоритетом - C++
Здравствуйте! Нужна ваша помощь! Не могу разобраться в чём проблема. Создаю очередь с приоритетом(шаблонный класс) с типом данных Job....

2
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
16.07.2013, 18:06 #2
Предлагаю посмотреть на реализацию std::priority_queue.
0
Mokona
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 9
17.07.2013, 02:17  [ТС] #3
Здравствуйте еще раз=)
Я сделала дерево стеков и добавление элемента по приоритету. Если можно подскажите как сделать удаление по приоритету. И еще, пожалуйста, помогите исправит кося к функции вывода стека. Когда я пытаюсь вывести на экран стек, то стек выводится, но потом выскакивает ошибка.
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <conio.h>
#include <stdio.h>
#include <locale>
#include <iostream>
using namespace std;
 
/*НАША СТРУКТУРА*/
struct List
{
    int x; //информационный элемент
    List *Next,*Head; //Голова стека и указатель на следующий элемент
};
 
//Наша структура
struct node
{
    int info; //Информационное поле
    List *el;
    node *l, *r;//Левая и Правая часть дерева
};
 
node * tree=NULL; //Объявляем переменную, тип которой структура Дерево
List * steck=NULL;
 
/*ФУНКЦИЯ ДОБАВЛЕНИЯ ЭЛЕМЕНТА В СТЕК  (в список LIFO)*/
void Add(int x, List **MyList) //Принимаем элемент стека и указатель на стек, при этом говорим, что принимаемый указатель будет сам по себе указателем
{
    List *temp=new List; //Выделяем память для нового элемента
    temp->x=x; //Записываем в поле x принимаемый в функцию элемент x
    temp->Next=(*MyList)->Head; //Указываем, что следующий элемент это предыдущий
    (*MyList)->Head=temp; //Сдвигаем голову на позицию вперед
}
 
/*ФУНКЦИЯ ОТОБРАЖЕНИЯ СТЕКА*/
void Show(List *MyList) //Нужен только сам стек
{
    List *temp=new List; //Выделяем память под временный элемент
    temp=MyList->Head; //Указываем ему, что его позиция в голове стека
               //с помощью цикла проходим по всему стеку
    while (temp!=NULL)  //выходим при встрече с пустым полем
    {
        cout<<temp->x<<" "; //Выводим на экран элемент стека
        temp=temp->Next; //Переходим к следующему элементу
    }
}
 
/*ФУНКЦИЯ ЗАПИСИ ЭЛЕМЕНТА В БИНАРНОЕ ДЕРЕВО*/
void push(int a,node **t, List *u)
{
    int n, y;
    if (*t==NULL) //Если дерева не существует
    {
        (*t)=new node; //Выделяем память
        (*t)->info=a; //Кладем в выделенное место аргумент a
        u=new List; 
        printf ("Введите кол-во элементов в стеке: ");
        scanf ("%d", &n);
        for (int i=0;i<n;i++){
            scanf ("%d", &y); Add(y, &u); //Заполняем стек
            (*t)->el=u;}//Указываем на стек
        (*t)->l=(*t)->r=NULL; //Очищаем память для следующего роста
        return; //Заложили семечко, выходим
    }
       //Дерево есть
        if (a>=(*t)->info) push(a,&(*t)->r, u); //Если аргумент а больше чем текущий элемент, кладем его вправо
        else push(a,&(*t)->l, u); //Иначе кладем его влево
}
 
void in(int a, node **t) //Фун-я добавления элемента по приоритету
{
    int y, z;
    if (t==NULL)  //Если дерево пустое, то отображать нечего, выходим
    return;
    else 
    {
        if ((*t)->info==a)
        {
            scanf("%d", &y);
            Add(y, &(*t)->el);
        }
        else {
            if (a>=(*t)->info) in(a,&(*t)->r);
            else in(a,&(*t)->l);
        }
    }
    //Show ((*t)->el);
}
 
/*ФУНКЦИЯ ОТОБРАЖЕНИЯ ДЕРЕВА НА ЭКРАНЕ*/
void print (node *t,int u) 
{
    if (t==NULL)  //Если дерево пустое, то отображать нечего, выходим
    return;
    else //Иначе
    {
    print(t->l,++u);//С помощью рекурсивного посещаем левое поддерево
    for (int i=0;i<u;++i) printf ("  ");
    printf ("%d\n",t->info); //И показываем элемент
    u--;
    }
    print(t->r,++u); //С помощью рекурсии посещаем правое поддерево
}
 
void main ()
{   
    setlocale (LC_ALL, "Russian");
    int n; //Количество элементов
    int s; //Число, передаваемое в дерево
    printf ("Введите количество элементов:  ");
    scanf ("%d", &n); //Вводим количество элементов
    for (int i=0;i<n;++i)
    {
    printf ("Введите число  ");
    scanf ("%d", &s); //Считываем элемент за элементом
    push(s,&tree, steck); //И каждый кладем в дерево
    }
    printf ("Ваше дерево\n");
    print(tree,0);
    scanf ("%d", &s);
    in(s, &tree);
    delete[] tree;
    getch();
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2013, 02:17
Привет! Вот еще темы с ответами:

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

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

Очередь с приоритетом - C++
У меня есть задание: 9. Разработать шаблон класса для работы с очередью с приоритетами, выполненной в виде односвязного списка. Тип...

Очередь с приоритетом - C++
Доброго времени суток, дорогие программисты, вот сдаю экзамены, попался такой вопрос &quot;Очередь с приоритетом. Основные операции для работы с...


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

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

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