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

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

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

Author24 — интернет-сервис помощи студентам
Очередью (англ. 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2014, 23:37
Ответы с готовыми решениями:

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

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

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

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

3
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 8
29.03.2014, 21:49  [ТС] 2
помогите ну... две функции написать, front и size..
остальное написала, точнее собрала
0
89 / 51 / 15
Регистрация: 26.06.2013
Сообщений: 179
29.03.2014, 21:55 3
Мне кажется, или вам осталось написать самые простые функции? В чем у вас с ними загвоздка?
0
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
31.03.2014, 20:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2014, 20:43
Помогаю со студенческими работами здесь

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

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

Реализовать двунаправленную очередь на основе одномерного символьного массива
Добрый день! Реализовал программу по данной задаче. На основе одномерного массива символьных...

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


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

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