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

"Очередь" на основе динамического массива

25.03.2015, 19:07. Показов 7992. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как можно переделать чтобы не было ошибки "Предел памяти"?
Задача: реализация "очередь" на основе динамического массива.

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
#include <iostream>
#include <string>
using namespace std;
 
struct Queue
{
    int info;
    Queue *next;
};
 
void Push(Queue *&first, Queue *&last, int info)
{
    Queue *newElem = new Queue;
    newElem->info = info;
    newElem->next = NULL;
    if (first != NULL)
        last = last->next = newElem;
    else
        first = last = newElem;
}
 
int Pop(Queue *&first, Queue *&last)
{
    Queue *tmp = first;
    first = first->next;
    int result = tmp->info;
    delete tmp;
    if (first == NULL)
        last = NULL;
    return result;
}
 
int main()
{
    Queue *qFirst = NULL, *qLast = NULL;
    string command;
    int number;
 
    setlocale(LC_ALL, "rus");
    cout << "Вводите команды управления очередью (признак окончания ввода - END):\n";
    while (true)
    {
        cin >> command;
        if (command == "END")
            break;
        else if (command == "PUSH")
        {
            cin >> number;
            Push(qFirst, qLast, number);
        }
        else if (command == "POP")
            Pop(qFirst, qLast);
        else
            cout << "Такой команды нет!\n";
    };
 
    cout << "В очереди осталось: ";
    while (qFirst != NULL)
        cout << Pop(qFirst, qLast) << ' ';
    cout << endl;
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2015, 19:07
Ответы с готовыми решениями:

Очередь на основе динамического массива
Помогите найти ошибку, по заданию надо записать в очередь данные из файла, а при записи...

Очередь на основе динамического (статического) массива
Задание следующее: Абстрактный класс (интерфейс) - это у меня очередь Дочерние/производные классы...

Очередь на основе динамического массива. Изучение функций ввода/вывода в программном интерфейсе Win32
изучение функций ввода/вывода в программном интерфейсе Win32. Интерфейс модуля для работы с...

Реализовать очередь с использованием динамического массива
Реализовать очередь с использованием динамического массива. Помогите с заданием пожалуйста!)

Реализовать очередь с использованием динамического массива
Реализовать очередь с использованием динамического массива.Я сделала код, можете проверить и внести...

10
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.03.2015, 19:09 2
Что за предел памяти такой загадочный? Заскринь оригинальную мессагу без отсебятины.
0
7 / 7 / 1
Регистрация: 15.02.2015
Сообщений: 46
25.03.2015, 20:11  [ТС] 3
Реализуйте структуру данных "очередь" на основе циклического массива или другим способом.
Входные данные
В каждой строке входных данных стоит либо команда PUSH и целое число через пробел,
если элемент нужно поместить в очередь, либо команда POP, если нужно удалить очередной
элемент из очереди. Максимальное количество элементов, одновременно находящихся
в очереди, не превышает 100 тысяч. Максимальное количество команд не превышает 1 млн.
Выходные данные
Выведите по порядку все элементы, оставшиеся в очереди
Пример входных данных
PUSH 2
PUSH 5
PUSH 8
POP
PUSH 1
Пример выходных данных
5 8 1


У нас в универе так организован практикум: решаешь задачу и отправляешь на проверку на сервер. Вот и выдает такие результаты: "Предел памяти" Ошибка компиляции", "Ошибка выполнения" и т.п.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.03.2015, 05:21 4
А сколько сказано использовать памяти?

Добавлено через 10 минут
Кстати, это очередь не на массиве, а на списке.
0
7 / 7 / 1
Регистрация: 15.02.2015
Сообщений: 46
26.03.2015, 19:13  [ТС] 5
В том то и дело: что не сказано сколько памяти использовать можно
(
Цитата Сообщение от taras atavin Посмотреть сообщение
Кстати, это очередь не на массиве, а на списке.
Цитата Сообщение от Katiss Посмотреть сообщение
на основе циклического массива или другим способом.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.03.2015, 19:26 6
Если проверяется потребление памяти, то должно быть сказано.

Добавлено через 6 минут
Цитата Сообщение от Katiss Посмотреть сообщение
на основе циклического массива или другим способом.
В стартовом посте сказано только про массив. Если другим способом можно, то результат ручной проверки: ошибка в 52-й строке: точка с запятой завершает if, поэтому
C++
1
2
else
            cout << "Такой команды нет!\n";
уже не относится к
C++
1
if (command == "POP")
.

Добавлено через 5 минут
0
7 / 7 / 1
Регистрация: 15.02.2015
Сообщений: 46
26.03.2015, 19:44  [ТС] 7
Да, так и должно быть
Цитата Сообщение от Katiss Посмотреть сообщение
C++
1
2
3
4
5
6
7
else if (command == "PUSH") 
{ 
cin >> number; Push(qFirst, qLast, number); 
} 
else if (command == "POP") 
Pop(qFirst, qLast); 
else cout << "Такой команды нет!\n";
Тут должно выдать на ошибку ввода любой команды, кроме PUSH и POP (я надеюсь правильно описала)
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.03.2015, 06:58 8
Цитата Сообщение от Katiss Посмотреть сообщение
Тут должно выдать на ошибку ввода любой команды, кроме PUSH и POP (я надеюсь правильно описала)
К чему твой else относится. Вот смотри:
1. Если экзит, то выходим, иначе, то есть если не экзит проверяем команды кроме экзита.
2. При проверке команд кроме экзита если пуш, то выполняем пуш, иначе, то есть если не пуш и не экзит проверяем команды кроме пуша и экзита.
3. При проверке команд кроме пуша и экзита если поп, то выполняем поп.
Всё. И вдруг иначе команда не допустима. А что в данном случае значит "иначе"? Правильный компилятор должен на это сказать: "Егог: else без if.". А правильно так:
1. Если экзит, то выходим, иначе, то есть если не экзит проверяем команды кроме экзита.
2. При проверке команд кроме экзита если пуш, то выполняем пуш, иначе, то есть если не пуш и не экзит проверяем команды кроме пуша и экзита.
3. При проверке команд кроме пуша и экзита если поп, то выполняем поп, иначе, то есть если не поп, не пуш и не экзит выводим сообщение о недопустимой команде.
0
7 / 7 / 1
Регистрация: 15.02.2015
Сообщений: 46
27.03.2015, 13:33  [ТС] 9
Очередь.

Ограничение времени: 1 секунды
Ограничение памяти: 1500КБ

Преподаватель сказал исправить код, так как
C++
1
2
3
4
5
struct Queue
{
    int info;
    Queue *next;
};
этот блок уже использует много памяти
Помогите, пжл
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
27.03.2015, 13:39 10
Цитата Сообщение от Katiss Посмотреть сообщение
этот блок уже использует много памяти
Цитата Сообщение от Katiss Посмотреть сообщение
Задача: реализация "очередь" на основе динамического массива.
написано ж на основе массива, а вас получается на основе списка
C++
1
2
3
4
5
6
7
struct Queue
{
int * mass;
int Pop()
{}
void Push(int value){}
}
от этого и пляшите
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.03.2015, 19:42 11
Цитата Сообщение от Katiss Посмотреть сообщение
этот блок уже использует много памяти
Помогите, пжл
Нет, этот блок использует всего 8 байт на элемент, да и то только при фактическом создании элемента. Сократить можно только реорганизовав очередь и отказавшись от списка. Для очереди интов на списке этот блок уже минимален. Ну можно сократить до пяти, если хранить чары, но это уже будет абсолютный минимум для очередей на списке. На массиве же можно сократить но четырёх на элемент + 8, 12, или 16 на всю очередь. Но реорганизация очереди - это переделывание почти всей программы. Задавай конкретные вопросы.
0
27.03.2015, 19:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2015, 19:42
Помогаю со студенческими работами здесь

Очередь на основе массива
когда создаю пустую очередь размерностью 2 в main() вот так BoundQueue &lt;int&gt; a(2); выводится...

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

Очередь на основе массива
Очередью (англ. queue) называется хранилище данных, в котором можно работать только с одним...

Стек на основе динамического массива
Здраствуйте написал(будто бы) стек на основе динамического массива как теперь к нему обратится и...

Стек на основе динамического массива
Надо написать стек на основе динамического массива. Как выделить память под новый элемент? ...


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

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