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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
#1

Очереди - C++

05.03.2011, 22:27. Просмотров 1459. Ответов 7

Дано задание:
Разработать функции работы с приоритетной очередью. Постановка запросов в очередь выполняется по приоритету, снятие - подряд из младших адресов (начало очереди). Приоритет: мах значения числового параметра, при совпадении параметров - FIFO.

Этот код подходит? Разобраться не могу.
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
using std::cin;
using std::cout;
 
 
struct list
 { int val;
   list *next;
 };
 
//----- Постановка элемента в конец очереди
// list *PH[2]; - заголовок очереди
void intoFIFO(list *ph[], int v)
{
list *p= new list;                               // создать элемент списка;
p->val = v;                                              // и заполнить его
p->next = NULL;                                // новый элемент - последний
if (ph[0] == NULL)                                    // включение в пустую
     ph[0] = ph[1] = p;                                          // очередь
else                                              // включение за последним
     {                                                         // элементом
     ph[1]->next = p;                     // следующий за последним = новый
     ph[1] = p;                                        // новый = последний
     }
}
void scan(list *ph[])
 {
 
 for(list* p=ph[0];p!=NULL;p=p->next)
 cout<<p->val<<" ";
 cout<<"\n";
 }
 
 
 
//----- Извлечение из очереди
int fromFIFO(list *ph[])
{ list *q;
if (ph[0] ==NULL) return -1;                               // очередь пуста
q = ph[0];                                            // исключение первого
ph[0] = q->next;                                                // элемента
if (ph[0] ==NULL)
     ph[1] = NULL;                                  // элемент единственный
int v = q->val;
 
return v;
}
 
void main()
{
    list A3={7,NULL}, A2={5,&A3}, A1={1,&A2};
list*  ph[2];
ph[0]=&A1, ph[1]=&A3;
scan(ph);
intoFIFO (ph,10);
intoFIFO (ph,2);
scan(ph);
int vv= fromFIFO (ph);
scan(ph);
 
 
getch();
}
Добавлено через 1 час 8 минут
Ау! Подскажите кто-нибудь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2011, 22:27     Очереди
Посмотрите здесь:

править код (создание очереди и удаление элемента очереди по усмотрению пользователя) - C++
Вот код он создает очередь и должен удалить элемент очереди по усмотрению пользователя проблема заключается в том что при попытки удалить...

Очереди. Каким образом считать две очереди из одного текстового файла? - C++
Здравстуйте. В задании первый пункт состоит в том, что нужно сформировать две очереди по n элементов с помощью считки данных из...

Найдите суммарную длину строк, принадлежащих очереди, кроме первой строки очереди - C++
Создать очередь строковых значений, для реализации используя односвязные списки.Реализовать операции добавления (enqueue) и удаления...

Извлечь из очереди начальные элементы и вывести их значения и новые адреса начала и конца очереди - C++
Дано число N (&gt; 0) и указатели P1 и P2 на начало и конец непустой очереди. Извлечь из очереди N начальных элементов и вывести их значения...

Разработать программу формирования очереди, содержащей целые числа, и упорядочивания по возрастанию элементов в этой очереди. - C++
Доброе всем время суток! Помогите пожалуйста! Разработать программу формирования очереди, содержащей целые числа, и упорядочивания по...

Очереди. Дан массив. Создать две очереди, первая должна содержать все нечетные, а вторая - все четные - C++
Очереди. Дан массив. Создать две очереди, первая должна содержать все нечетные, а вторая - все четные числа из исходного набора; порядок...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
08.03.2011, 00:06  [ТС]     Очереди #2
В общем прошу помощи. Не могу разобраться со следующими строками:
C++
1
2
3
4
5
6
  list A3={7,NULL}, A2={5,&A3}, A1={1,&A2};
list*  ph[2];
ph[0]=&A1, ph[1]=&A3;
scan(ph);
intoFIFO (ph,10);
intoFIFO (ph,2);
Не могу понять, как осуществить заполнение очереди своими элементами, т.е. у меня получается ввести свои только после заданных.
И ещё:
C++
1
2
3
4
list *q;
if (ph[0] ==NULL) return -1;                               // очередь пуста
q = ph[0];                                            // исключение первого
ph[0] = q->next;
Тут исключается первый. Как сделать, чтобы удалял вообще все?
Прошу помощи. Очень надо.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.03.2011, 06:08     Очереди #3
wiki. очередь с приоритетом

Цитата Сообщение от Sick2
Этот код подходит? Разобраться не могу.
это простой список с функцией чтения с начала
можно найти большое количество сделанных лучше

нужно в узле хранить ключ и значение
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
10.03.2011, 19:22  [ТС]     Очереди #4
Цитата Сообщение от accept Посмотреть сообщение
wiki. очередь с приоритетом


это простой список с функцией чтения с начала
можно найти большое количество сделанных лучше

нужно в узле хранить ключ и значение
Я не могу понять, как назначить сам приоритет.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.03.2011, 03:43     Очереди #5
Код
DELETE(k) — удалить пару, с ключом k;
это значит, что в такой очереди не могут храниться просто узлы последовательно без ключей
так как в таком случае такая функция не сможет отличить приоритеты 1 2 2 3 от 1 2 3 4,
когда нужно будет удалить элемент с приоритетом 3

так что храни в узле его приоритет, а вставку делай, находя подходящее место
то есть, если тебе нужно в очередь -1 2 3 7 вставить элемент с приоритетом 4,
то функция добавления должна проходить до -1 2 3 ][ 7 и вставлять туда -1 2 3 4 7
при этом функция просмотра будет возвращать первый элемент
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
13.03.2011, 16:07  [ТС]     Очереди #6
Я не то, что не могу понять, как эту очередь сделать. Я даже не могу разорбраться на примере моего кода, как вводить свои элементы
C++
1
2
3
4
5
6
 list A3={7,NULL}, A2={5,&A3}, A1={1,&A2};
list*  ph[2];
ph[0]=&A1, ph[1]=&A3;
scan(ph);
intoFIFO (ph,10);
intoFIFO (ph,2);
Что это за фигня...как свои элементы ввести..хз.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.03.2011, 02:34     Очереди #7
Цитата Сообщение от Sick2
Я даже не могу разорбраться на примере моего кода
этот код вообще что-то не то делает
C++
1
void intoFIFO(list *ph[], int v)
зачем передавать массив указателей, если это односвязный список, где элементы надо добавлять в конец, а читать с начала
в сети есть куча вариантов односвязного списка, которые написаны лучше

C++
1
list*  ph[2];
это вообще зачем ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 15:34     Очереди
Еще ссылки по теме:

Очереди - C++
Привет всем!!!)) Вот у меня такая задачка: необходимо реализовать очередь, содержащую запись состоящую из двух полей: имени и...

Очереди - C++
Привет всем. Прошу помощи с заданием. Дано натуральное число n, действительные числа r1,...,rn. получить последовательность:...

Очереди (С++) - C++
Помогите, пожалуйста, с помощью очереди реализовать данную задачу: Идет посадка в 100-местный самолет. В очеpедь выстpоились 100...

Очереди на С - C++
Дано натуральное число n, целые числа а1 ., an. Нужно вычислить последовательность,x1,y1,x2,y2,...,xk,yk, где x1,...,xm - взятые в порядке...


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

Или воспользуйтесь поиском по форуму:
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
14.03.2011, 15:34  [ТС]     Очереди #8
Короче я всё уже сделал, этот код вообще левый какой-то.
Yandex
Объявления
14.03.2011, 15:34     Очереди
Ответ Создать тему
Опции темы

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