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

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

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

Стек и Очередь в С++(кусок кода написал, но дальше не могу) - C++

09.10.2013, 09:25. Просмотров 841. Ответов 19
Метки нет (Все метки)

Я описал вроде как саму очередь и функцию удаления контейнера,а самое главное пока что-то никак не пойму как делать. Помогите пожалуйста.Вот условие, а кусок кода ниже:
Определить структуру очереди и разработать функции, которые необходимы для работы с заданным контейнером:
функция складывания элемента push(память выделять динамически), функцию извлечения элемента pop, функцию печати содержимого контейнера на экран, функцию удаления контейнера.Создать программное приложение, в котором создается контейнер и заполняется элементами, которые в качестве данных сберегают уникальные числа диапазоном от 1 до 100. Поместить максимальный элемент очереди на первую позицию. После чего все созданные контейнеры удаляются. Глобальные переменные не использовать. Функция main предназначена только для вызова функций пользователя.
Кусок кода(удаление наверное рано было писать, но написал все,что примерно понял как делать, если оно конечно правильно, помогите пожалуйста дописать основную часть):
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
#include<iostream>
#include<stdlib.h>
struct queue
{
    int data;
    queue *next;
}*head, *tail, *head_pos, *tail_pos;
void push(queue **head, queue **tail, int data)
{
    queue *element=new queue;
    element->data=data;
    element->next=NULL;
    if(*head==NULL)
        *head=*tail=element;
    else
    {
        (*tail)->next=element;
        *tail=element;
    }
}
void pop(queue ** head)
{
    *head=(*head)->next;
}
void del(queue **head, queue **tail)
{
    if(*head!=(*tail)->next)
    {
        pop(&(*head));
        del(&(*head),&(*tail));
    }
}
Добавлено через 8 часов 29 минут
Основная часть,это я имею ввиду "поместить макс. элемент на первую позицию". Эту, самую главную функцию не знаю как написать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2013, 09:25     Стек и Очередь в С++(кусок кода написал, но дальше не могу)
Посмотрите здесь:

Стек и очередь - C++
Прошу помочь в решении задачи, я новичек!!!:( Мне необходимо создать стек и очередь на C++(Microsoft Visiual C++ 6.0) Буду очень...

стек и очередь - C++
Задание такое: создать список из целых чисел. Удалить лишние элементы в списке так, чтобы в результирующем списке каждый элемент был не...

Стек и очередь - C++
Создать класс поезд, состоящий из класса остановки. Класс поезд: номер поезда, пункт назначения, время отправления. Класс остановки :...

Стек и очередь - C++
Задание 1. Реализовать программу, выполняющую стандартный набор операций со стеком на основе массива: • проверку пустоты стека ...

стек и очередь - C++
ребят поделитесь плиз программами реализующими на си стек и очередь (хотябы ввод вывод данных)

стек и очередь - C++
Обращаюсь с просьбой помочь с задачами...Есть задача,готовая,ее нужно сделать через СТЕК и ОЧЕРЕДЬ!Пожалуйста!) Составить программу, в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
09.10.2013, 09:47     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #2
а вы можете придумать пример, где такую очередь можно использовать?
+не совсем ясно, вам нужна очередь типа LIFO(стек) или FIFO?
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
09.10.2013, 19:26  [ТС]     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #3
Очередь типа ФИФО. Я предполагаю,что нужно ее как-то пересобрать. Найти этот максимальный элемент и может собрать новую очередь. Но как точно это сделать я не знаю. Но то,что очередь типа ФИФИ это точно. В задание указано так.
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
09.10.2013, 19:30     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #4
Цитата Сообщение от mugen0202 Посмотреть сообщение
Очередь типа ФИФО. Я предполагаю,что нужно ее как-то пересобрать. Найти этот максимальный элемент и может собрать новую очередь. Но как точно это сделать я не знаю. Но то,что очередь типа ФИФИ это точно. В задание указано так.
то есть вы согласны, что зря написали про стек в заголовке темы?
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
09.10.2013, 19:34  [ТС]     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #5
Понятия не имею,зачем написл стек в заголовке. Извиняюсь. Очередь типа Первый зашел первый вышел
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
09.10.2013, 20:01     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #6
создаете указатель который будет указывать на максимальный элемент очереди...проходите по очереди и ищете максимальный....после нахождения максимального играетесь с указателями до и после максимального, а сам максимальный элемент вставл в нужное место
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
09.10.2013, 20:29  [ТС]     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #7
Напишите пожалуйста, если не сложно, этот участок кода. Буду очень признателен.
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
09.10.2013, 22:29     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #8
Цитата Сообщение от mugen0202 Посмотреть сообщение
Напишите пожалуйста, если не сложно, этот участок кода. Буду очень признателен.
сначала придумайте практический пример, где такую очередь можно применить в реальной жизненной ситуации
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
09.10.2013, 23:26  [ТС]     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #9
Где применить можно? Ну наверное если у нас есть цены какого-то товара, то найти самую большую и пересобрать очередь исходя из "высоты" данных цен. Но мне нужно просто с числами, как в условии..Это лабораторная работа. Мне просто сдать надо. Это не профильный мой предмет. Тут просто сдать и все. По условию у меня там элементы - это числа диапазоном от 1 до 100.

Добавлено через 2 минуты
Может, если мы эти цены, к примеру, пересоберем в зависимости от "высоты", то будет что-то вроде сортировки по возрастанию или убыванию.
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
10.10.2013, 00:38     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #10
Цитата Сообщение от mugen0202 Посмотреть сообщение
Где применить можно? Ну наверное если у нас есть цены какого-то товара, то найти самую большую и пересобрать очередь исходя из "высоты" данных цен.
...
ну это можно и циклом сделать, если я правильно вас понял, это скорее сортировка, непонятно зачем использовать очередь в этом случае, а я спрашиваю где можно использовать такую программную структуру-очередь?
включите мозг ответы простые.
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
10.10.2013, 00:51  [ТС]     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #11
Например для описания некой очереди из жизни: человек подал заявку на что-то. Первый подал- первую и обработали. Заявка, которая была подана последней будет обработана последней. Возможно, в программе будут обрабатываться некие данные или выполняться некие операции, в зависимости от того, что было подано первым,а что после него.
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
10.10.2013, 09:23     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #12
причем может понадобиться заявку с наибольшим номером поставить на первое место(если бы у нас было два поля у объектов, которые мы ставим в очередь, типа int, я бы сказал, что у заявки есть есть номер и приоритет, и сортировать нужно именно по приоритетам)
но куда полезнее вставить в эту очередь список собственных дел, которые у вас появляются, назначить каждому делу номер и приоритет(конечно нужно добавить ещё и название)
а потом всю очередь сортировать в порядке убывания приоритета.
дела которые имеют самый большой приоритет будут первыми появляться из очереди.

Добавлено через 5 минут
а вы в курсе, что в C++ struct и class отличаются только тем, что у struct поля по умолчанию public, а у класса private?
поэтому методы для работы со структурой можно писать в самой структуре, а не отдельными функциями. Вы уверены, что вам нужны именно отдельные от структуры функции?
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
10.10.2013, 11:56  [ТС]     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #13
Я слышал это, но требование моего Учителя описать это в отдельной функции пользователя.
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
10.10.2013, 12:37     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #14
ну ... фаулер советует вначале писать модульные тесты. Для вашего случая надо сделать main, который будет тестировать функции очереди.

Напишите шаблон(в cмысле низкокачественные наброски, а не C++ Template) такого тестирования в main для функций.

наверно есть смысл сказать, что в вашем коде утечка памяти.
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
10.10.2013, 12:43  [ТС]     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #15
Если это возможно, напишите мне пожалуйста эту функцию для помещения максимального элемента на первую позицию. Очень завтра сдать надо. Я сам это не напишу.
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
10.10.2013, 12:53     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #16
напишите...

вы знаете, как выделять место в памяти
C++
1
queue *element=new queue;
а как освободить эту память?

для начала я бы на вашем месте создал цикл, который заполняет очередь случайными числами(без реализации самой очереди)
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
10.10.2013, 21:38  [ТС]     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #17
написал рандом в отдельную функцию, но там в конце не знаю точно, как сделать так,чтобы мои сгенерированные иксы в очередь запихало.
C++
1
2
3
4
5
6
7
8
9
10
11
void genchisqueue(queue **head, queue **tail, int data)
{
     int x;
   srand(time(NULL));
   
   for(int i = 1; i < 100; i++)
   {
      x = 1 + rand() % 100;
   }
   x=element;//подскажите пожалуйста, как тут правильно написать,чтобы оно мне этот х присвоило к моим элементам очереди
}
Добавлено через 2 часа 50 минут
тут моя функция добавления элемента в очередь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void push(queue **head, queue **tail, int data,)
 
{
    queue *element=new queue;
    
    element->data=data;
    element->next=NULL;
    if(*head==NULL)
        *head=*tail=element;
    else
    {
        (*tail)->next=element;
        *tail=element;
    }
}
А тут я хочу добавлять эти элементы рандомом. Мне наверное стоит как-то в функции "пуш" придать элементу значение х, а в функции моего рандома как-то поставить ссылку на функцию "пуш"
C++
1
2
3
4
5
6
7
8
9
10
11
void genchisqueue(queue **head, queue **tail, int data)
{
     int x;
   srand(time(NULL));
   
   for(int i = 1; i < 100; i++)
   {
      x = 1 + rand() % 100;
   }
  
}
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
10.10.2013, 21:50     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #18
а вы не могли бы скачать какую нить книгу из Литература C++
и хотя бы её прослитать?
или может у вас какая нибудь другая литература есть
вам нужно найти пример как пользоваться операцией delete

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

пока о поиске максимального элемента забудьте у вас сама очередь ещё доконца не работает

http://www.cyberforum.ru/search.php?searchid=6618041 - ну тут сами можете по темам поискать, легко найдёте готовое решение.
Очередь FIFO -тут готовая очередь на функциях
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
11.10.2013, 23:41  [ТС]     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #19
Не компилируется. Скажите пожалуйста в чем ошибка:
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
#include <iostream>
#include<stdlib.h>
using namespace std;
 
using std::cout;
 
 
struct tqueue
{
   int    val;
   tqueue* next;
};
 
 
void push(tqueue** head, tqueue** tail, int val) 
{
    tqueue* ptr= new tqueue();
    ptr->val   = val;
    ptr->next  = NULL;
 
    if(*head == NULL)
          *head = *tail = ptr;
    else
    {
         (*tail)->next = ptr;
         *tail = ptr;
    }
}
 
 
 
void max_first(tqueue** head)
{
   tqueue* tmp = *head;
   for(tqueue* iter = *head; iter != NULL; iter = iter->next)
   {
        if(iter->val > tmp->val)
           tmp = iter;
   }
 
   int  val = tmp->val;
   tmp->val = (*head)->val;
  (*head)->val = val;
}
 
 
int main()
{
   tqueue* head = NULL, *tail = NULL;
   int n;
   cout << "vvedite n";
   cin >> n;
  
   for(int i = 0; i < n; i++)
       push(&head, &tail, 1 + std::rand()%100);
 
   max_first(&head);
 
   tqueue* tmp;
   while(head != NULL)
   {
       cout << head->val << '\n';
 
       tmp  = head;
       head = head->next;
       delete tmp;
   }
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2013, 00:41     Стек и Очередь в С++(кусок кода написал, но дальше не могу)
Еще ссылки по теме:

Очередь и стек - C++
Система состоит из трех процессоров P1, P2, P3, очереди F, стека S и распределителя задач R. В систему поступают запросы на выполнение...

Очередь(а выходит стек) - C++
Помогите пожалуйста разобраться:собственно задача из все того же Лафоре.. Вот ее рабочее решение(гл 7 упр. 9) #include &lt;iostream&gt; ...

Список, стек и очередь. - C++
Файл содержит вещественные числа. Нужно удвоит вхождение всех чисел N. Решить с помощью стека, списка и очереди в С++. Вся информация...

Упростить кусок кода - C++
#include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;fstream.h&gt; #include &lt;windows.h&gt; int main () { SetConsoleCP(1251); ...


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

Или воспользуйтесь поиском по форуму:
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
12.10.2013, 00:41     Стек и Очередь в С++(кусок кода написал, но дальше не могу) #20
когда компилятор пытается скомпилировать программу, он вам пытается рассказать в чем проблема если такая возникла, вы можете найти место где он выводит вам сообщения, и скопировать это сообщение сюда, если сами его не поймёте(переведя на русский язык)

вы уже почти заставили меня скомплировать ваш код, но я ещё пока торможу
поэтому жду сообщения компилятора

не надо так делать писать new в push
а delete в main
delete лучше попестить в pop
(или можете пока забить на утечку памяти и просто удалить delete)
чтоб отработать остальные моменты.

зачем srand из начала программы убрали? он нужен
может завтра найду время запустить ваш код(но ничего не обещаю)
Yandex
Объявления
12.10.2013, 00:41     Стек и Очередь в С++(кусок кода написал, но дальше не могу)
Ответ Создать тему
Опции темы

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