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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Masha95
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 8
24.03.2014, 23:37     Очередь на основе массива #1
Очередью (англ. 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++
Очередь на основе STL C++
Очередь на основе массива C++
C++ Очередь на основе статического массива
C++ Очередь на основе односвязного списка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Masha95
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 8
29.03.2014, 21:49  [ТС]     Очередь на основе массива #2
помогите ну... две функции написать, front и size..
остальное написала, точнее собрала
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
29.03.2014, 21:55     Очередь на основе массива #3
Мне кажется, или вам осталось написать самые простые функции? В чем у вас с ними загвоздка?
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     Очередь на основе массива
Ответ Создать тему
Опции темы

Текущее время: 01:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru