Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
1

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

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

Author24 — интернет-сервис помощи студентам
Я описал вроде как саму очередь и функцию удаления контейнера,а самое главное пока что-то никак не пойму как делать. Помогите пожалуйста.Вот условие, а кусок кода ниже:
Определить структуру очереди и разработать функции, которые необходимы для работы с заданным контейнером:
функция складывания элемента 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2013, 09:25
Ответы с готовыми решениями:

Написал половину кода уравнение дальше ступор(
Здравствуйте. У меня есть уровненние и не выходит его записать его в ассемблере. Ятолько начал...

Не могу понять кусок кода
$(function(){ $(&quot;#view .name&quot;).click(nameClick); }); Что значит когда аргумент у...

Не могу понять кусок кода.Пары простых чисел
Задача в том, чтобы ввести число и получить пары простых чисел в нем Не понятен этот момент int...

Заполнить очередь и стек и поменять их содержимое местами через дополнительный стек.
Необходимо разработать программу, которая должна : Заполнить очередь и стек и поменять их...

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

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

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

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

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

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

для начала я бы на вашем месте создал цикл, который заполняет очередь случайными числами(без реализации самой очереди)
0
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
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
10.10.2013, 21:50 18
а вы не могли бы скачать какую нить книгу из Литература C++
и хотя бы её прослитать?
или может у вас какая нибудь другая литература есть
вам нужно найти пример как пользоваться операцией delete

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

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

https://www.cyberforum.ru/sear... id=6618041 - ну тут сами можете по темам поискать, легко найдёте готовое решение.
Очередь FIFO -тут готовая очередь на функциях
0
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
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
12.10.2013, 00:41 20
когда компилятор пытается скомпилировать программу, он вам пытается рассказать в чем проблема если такая возникла, вы можете найти место где он выводит вам сообщения, и скопировать это сообщение сюда, если сами его не поймёте(переведя на русский язык)

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

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

зачем srand из начала программы убрали? он нужен
может завтра найду время запустить ваш код(но ничего не обещаю)
0
12.10.2013, 00:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2013, 00:41
Помогаю со студенческими работами здесь

Написал сайт, Незнаю что дальше
Помогите люди добрые:) написал простенький сайт из 10 ссылок в обычном блокноте. Купил домен на...

Стек и очередь. Задачи никогда не попадают в стек
Условие: Система состоит из двух процессоров P1 и P2 и двух очередей F1, F2 и стека S. В систему...

Связать кусок кода с другим куском кода на С++
#pragma once #include &lt;iostream&gt; using namespace std; class CFigure { public: virtual...

Стек. Очередь
Помогите пожалусте написать программу для создания очереди!

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

Стек и очередь
Стек – статический; очередь – статическая Система состоит из процессора P, трѐх очередей F0,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru