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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Masha95
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 8
#1

Очередь на основе массива - C++

24.03.2014, 23:37. Просмотров 1848. Ответов 3
Метки нет (Все метки)

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

push
Добавить (положить) в конец стека новый элемент
pop
Извлечь из стека первый элемент
front
Узнать значение первого элемента (не удаляя его)
size
Узнать количество элементов в стеке
clear
Очистить стек (удалить из него все элементы)
Хранить элементы стека в массиве.

Реализуйте структуру данных "очередь", реализовав все указанные здесь методы при помощи массива. Напишите программу (функцию main), содержащую описание очереди и моделирующую работу очереди. Функция main считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения одной команды программа должна вывести одну строчку. Возможные команды для программы:

push n
Добавить в очередь число n (значение n задается после команды). Программа должна вывести ok.
pop
Удалить из очереди первый элемент. Программа должна вывести его значение.
front
Программа должна вывести значение первого элемента, не удаляя его из очереди.
size
Программа должна вывести количество элементов в очереди.
clear
Программа должна очистить очередь и вывести ok.
exit
Программа должна вывести bye и завершить работу.
Операции front и pop должны перед исполнением проверять, содержится ли в очереди хотя бы один элемент. Если во входных данных встречается операция front или pop, при этом очередь пуста, то программа должна вместо числового значения вывести строку error.
При этом должна быть реализована двойная защита: вызов методов forward и pop для пустой очереди не должен приводить к обращению к несуществующим элементам массива, а функция main должна выводить сообщение error, при считывании некорректной операции.

Реализуйте очередь динамического размера, то есть ограниченный только объемом свободной оперативной памяти. Для этого используйте указатели и динамически распределяемую память. Если для полностью заполненной очереди вызывается метод push размер динамического массива, отведенного для хранения очереди, должен увеличиваться.

Пример 1 протокола работы программы

Ввод Вывод

push 2 ok
push 3 ok
push 5 ok
front 2
size 3
pop 2
size 2
push 7 ok
pop 3
clear ok
size 0
exit bye
Пример 2 протокола работы программы

Ввод Вывод

push 2 ok
front 2
pop 2
size 0
pop error
push 1 ok
size 1
exit bye
Для отправки решений необходимо выполнить вход.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2014, 23:37     Очередь на основе массива
Посмотрите здесь:

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

Очередь на основе массива - C++
когда создаю пустую очередь размерностью 2 в main() вот так BoundQueue <int> a(2); выводится ошибка:main.cpp(13) : error C2259:...

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

Очередь на основе статического массива - C++
в очередь с экрана вводятся строки,когда вводится строка end,элементы извлекаются из очереди и записываются в файл. xD.h #include...

Очередь с приоритетом на основе массива - C++
Как можно организовать очередь с приоритетом на основе массива ? Возможно можно исп динамический двумерный массив , но как его потом...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Masha95
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 8
29.03.2014, 21:49  [ТС]     Очередь на основе массива #2
помогите ну... две функции написать, front и size..
остальное написала, точнее собрала
Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
29.03.2014, 21:55     Очередь на основе массива #3
Мне кажется, или вам осталось написать самые простые функции? В чем у вас с ними загвоздка?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 20:43     Очередь на основе массива
Еще ссылки по теме:

Очередь на основе массива: объяснить что происходит в заданном фрагменте кода - C++
всем привет. начал разбираться с очередью на с++ и наткнулся на пример. вот фрагмент кода void init(QUEUE *pq) { pq->first=0; ...

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

"Очередь" на основе динамического массива - C++
Как можно переделать чтобы не было ошибки "Предел памяти"? Задача: реализация "очередь" на основе динамического массива. #include...

Очередь на основе STL - C++
Народ, помогите пожалуйста! Я сейчас прохожу стеки, очереди и деки на основе STL. Плохо шарю во всех этих стеках, поэтому попросил у друга...

Очередь на основе односвязного списка - C++
Задание: "Реализовать очередь на основе односвязного списка" Вообщем сделал простую очередь, вопрос, как её реализовать с помощью списка?...

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


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

Или воспользуйтесь поиском по форуму:
Masha95
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 8
31.03.2014, 20:43  [ТС]     Очередь на основе массива #4
неправильно работают

Добавлено через 1 минуту
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
class Queue 
{   
static const int SIZE=100; 
int *queue; 
   int head, tail; 
public :
   Queue () ; 
   void push ( int num ) ; 
   void size();
   void pop();
   void front();
   ~Queue();
   void back();
   void clear();
} ; 
 
Queue::~Queue() 
{
    delete[]queue;
}
Queue::Queue() 
{
   queue = new int[SIZE];
   head = tail = 0 ; 
} 
 
void Queue::push ( int num ) 
{ 
   if ( tail+1 ==head || ( tail+ 1 ==SIZE && !head ))
   { 
     cout << "error\n" ;  
   } 
   tail++; 
   if ( tail==SIZE )
      tail = 0 ;
   queue [ tail ] = num; 
   cout<<"ok\n";
} 
 
void Queue::pop() 
{ 
   if ( head == tail ) 
   { 
     cout << "error\n" ; 
     return ;
   } 
   head++; 
   if ( head==SIZE ) head = 0 ; 
   cout<<"\n";
  
} 
 
void Queue::size()
{   int s=0;
    for(int i=head;i<tail;i++)
    {
        s++;
    }
    cout<<s<<"\n";
}
 
void Queue::back()
{
    if(head==tail)
    {
        cout << "error\n";
    }
    else
    {
        cout << queue[tail-1] << "\n";
    }
}
 
void Queue::front()
{
    
    cout<<queue[0]<<"\n";
}
 
void Queue::clear()
{ 
    head=tail;
    cout<<"ok\n";
 
}
int main () 
{
 
    int n;
    string i;
    for(;;)
    {
        Queue q;
        cin>>i;   
        
        if (i=="push")
        {
            cin>>n;
            q.push(n);
        }
        if (i=="pop")
        {
            q.pop();
        }
        if (i=="clear")
        {
                q.clear();
        }
        if (i=="size")
        {
            q.size();
        }
        if (i=="front")
        {
            q.front();
        }
        if (i=="back")
        {
            q.back();
        }                
        if (i=="exit")
        {
            cout <<"bye";
            return 1;
        }
    }
    return 1;
}
если можно, посмотрите что не так, мне кажется что с функцией push что то не так,поэтому эти две не работают
Yandex
Объявления
31.03.2014, 20:43     Очередь на основе массива
Ответ Создать тему
Опции темы

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