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

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

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

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

24.03.2014, 23:37. Просмотров 1901. Ответов 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
Для отправки решений необходимо выполнить вход.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2014, 23:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очередь на основе массива (C++):

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

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

Очередь с приоритетом на основе массива - 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..
остальное написала, точнее собрала
0
Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
29.03.2014, 21:55 #3
Мне кажется, или вам осталось написать самые простые функции? В чем у вас с ними загвоздка?
0
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 что то не так,поэтому эти две не работают
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 20:43
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.03.2014, 20:43
Ответ Создать тему
Опции темы

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