Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Masha95
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 8
1

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

24.03.2014, 23:37. Просмотров 2574. Ответов 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
Ответы с готовыми решениями:

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

Очередь на основе массива
когда создаю пустую очередь размерностью 2 в main() вот так BoundQueue <int>...

Очередь на основе статического массива
в очередь с экрана вводятся строки,когда вводится строка end,элементы...

Очередь с приоритетом на основе массива
Как можно организовать очередь с приоритетом на основе массива ? Возможно...

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

3
Masha95
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 8
29.03.2014, 21:49  [ТС] 2
помогите ну... две функции написать, front и size..
остальное написала, точнее собрала
0
Anton_Kretov
89 / 51 / 15
Регистрация: 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

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

Очередь на основе массива: объяснить что происходит в заданном фрагменте кода
всем привет. начал разбираться с очередью на с++ и наткнулся на пример. вот...

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


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

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

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