Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
#1

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

09.10.2013, 09:25. Просмотров 907. Ответов 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 минут
Основная часть,это я имею ввиду "поместить макс. элемент на первую позицию". Эту, самую главную функцию не знаю как написать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2013, 09:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Стек и Очередь в С++(кусок кода написал, но дальше не могу) (C++):

Стек и очередь
Прошу помочь в решении задачи, я новичек!!!:( Мне необходимо создать стек и...

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

Очередь и стек
Система состоит из трех процессоров P1, P2, P3, очереди F, стека S и...

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

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

стек и очередь
Задание такое: создать список из целых чисел. Удалить лишние элементы в списке...

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

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

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

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

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

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

для начала я бы на вашем месте создал цикл, который заполняет очередь случайными числами(без реализации самой очереди)
0
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;
   }
  
}
0
XRuZzz
Антикодер
1488 / 645 / 36
Регистрация: 15.09.2012
Сообщений: 2,632
10.10.2013, 21:50 #18
а вы не могли бы скачать какую нить книгу из http://www.cyberforum.ru/cpp-beginners/thread152353.html
и хотя бы её прослитать?
или может у вас какая нибудь другая литература есть
вам нужно найти пример как пользоваться операцией delete

вот кстати пример очереди http://www.cyberforum.ru/cpp-beginners/thread971755.html

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

http://www.cyberforum.ru/search.php?searchid=6618041 - ну тут сами можете по темам поискать, легко найдёте готовое решение.
http://www.cyberforum.ru/cpp-beginners/thread581677.html -тут готовая очередь на функциях
0
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;
}
0
XRuZzz
Антикодер
1488 / 645 / 36
Регистрация: 15.09.2012
Сообщений: 2,632
12.10.2013, 00:41 #20
когда компилятор пытается скомпилировать программу, он вам пытается рассказать в чем проблема если такая возникла, вы можете найти место где он выводит вам сообщения, и скопировать это сообщение сюда, если сами его не поймёте(переведя на русский язык)

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

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

зачем srand из начала программы убрали? он нужен
может завтра найду время запустить ваш код(но ничего не обещаю)
0
12.10.2013, 00:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2013, 00:41
Привет! Вот еще темы с решениями:

стек и очередь
Обращаюсь с просьбой помочь с задачами...Есть задача,готовая,ее нужно сделать...

Очередь(а выходит стек)
Помогите пожалуйста разобраться:собственно задача из все того же Лафоре.. Вот...

Список, стек и очередь.
Файл содержит вещественные числа. Нужно удвоит вхождение всех чисел N. Решить...

Объяснить кусок кода
Всем привет, нашел у себя в файле с хелпом напоминалку, но когда-то забыл...


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

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

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