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

Очередь «первый вошел — первый вышел» (FIFO) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
01.08.2014, 18:39     Очередь «первый вошел — первый вышел» (FIFO) #1
Очередь — это устройство для хранения данных, похожее на стек. Отли-чие в том, что в стеке последний сохраненный элемент будет первым извлеченным, тогда как в очереди первый сохраненный элемент будет первым извлеченным. То есть в стеке используется подход «последний вошел — первый вышел» (LJFO), а в очереди используется подход «пер-
вый вошел — первый вышел» (FIFO). Очередь похожа на простую оче-редь посетителей магазина: первый, кто встал в очередь, будет обслужен первым.
суть задания такова:
Перепишите программу STAKARAY из этой главы, включив в нее класс queue вместо класса stack. Кроме того, класс должен иметь два метода: один, называемый put(), для помещения элемента в очередь; и другой, на- ваемый get(), для извлечения элемента из очереди. Эти методы эквива-лентны методам push() и pop() класса stack. Оба класса, stack и queue, используют массив для хранения данных. Одна-ко вместо одного поля top типа int, как в классе stack, вам понадобятся два поля для очереди: одна, называемая head, указывающая на начало очере-ди; и вторая, tail, указывающая на конец очереди. Элементы помещаются
в конец очереди (как посетители банка, становящиеся в очередь), а извле-каются из начала очереди. Конец очереди перемещается к началу по мас-сиву по мере того, как элементы добавляются и извлекаются из очереди.Такие результаты добавляют сложности: если одна из двух переменных head или tail примут значение конца массива, то следует вернуться на на-
чало. Таким образом, вам нужно выражение типа
if ( tail == MAX - 1 )
tail = -1;
для возврата переменной tail и похожее выражение для возврата перемен-ой head. Массив, используемый в очереди, иногда называют круговым буфером, так как начало и конец очереди циркулируют по нему вместе с ее данными.



я написала по своему, но что-то оно работает неправильно, подскажите, как исправить?

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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class Queue
{
private:
    enum { MAX = 10 }; // немного нестандартный синтаксис
    int st[MAX];       // стек в виде массива
    int head;
    int tail;           // вершина стека
public:
 
    Queue()            // конструктор
    { 
        head = 0;
        tail = MAX-1;
    }
    void put(int var) // поместить в стек
    { 
        st[++head] = var;
        st[--tail] = var;
 
    }
    int get()          // взять из стека
    { 
        st [head--];
        return st[tail--];
    }
};
 
int main()
{
    Queue s1;
 
    s1.put(11);
    s1.put(22);
    cout << "1: " << s1.get() << endl;
    cout << "2: " << s1.get() << endl;
 
    s1.put(33);
    s1.put(44);
    s1.put(55);
    s1.put(66);
    cout << "3: " << s1.get() << endl;
    cout << "4: " << s1.get() << endl;
    cout << "5: " << s1.get() << endl;
    cout << "6: " << s1.get() << endl;
    system ("pause");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2014, 18:39     Очередь «первый вошел — первый вышел» (FIFO)
Посмотрите здесь:

FIFO Очередь, как с ней разобратся?? C++
C++ Переставить местами первый минимальный и первый максимальный элементы массива из n вещественных чисел
Динамическая Очередь (FIFO). C++
Очередь FIFO C++
первый пришел, первый ушел C++
Изменить удаление и добавление элементов в очередь по правилу FIFO. C++
Релизация очереди (первый пришел первый ушел) в классе C++
Двумерная очередь (FIFO) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
02.08.2014, 03:49     Очередь «первый вошел — первый вышел» (FIFO) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
using namespace std;
 
class Queue
{
private:
    enum { MAX = 10 }; // немного нестандартный синтаксис
    int st[MAX];       // стек в виде массива
    int head;
    int tail;           // вершина стека
public:
 
    Queue()            // конструктор
    {
 
       head = tail = 0;
    }
    void put(int var) // поместить в стек
    {
        st[tail++] = var;
        if(head > 0) head--;
 
    }
    int get()          // взять из стека
    {
        if(tail > 0)tail--;
        return st[head++];
 
    }
};
 
int main()
{
    Queue s1;
 
    s1.put(11);
    s1.put(22);
    cout << "1: " << s1.get() << endl;
    cout << "2: " << s1.get() << endl;
 
    s1.put(33);
    s1.put(44);
    s1.put(55);
    s1.put(66);
    cout << "3: " << s1.get() << endl;
    cout << "4: " << s1.get() << endl;
    cout << "5: " << s1.get() << endl;
    cout << "6: " << s1.get() << endl;
    cin.get();
    return 0;
}
Добавлено через 8 часов 30 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 Queue()            // конструктор
    {
 
       head = tail = 0;
    }
    void put(int var) // поместить в стек
    {
        st[tail++] = var;
 
    }
    int get()          // взять из стека
    {
        return st[head++];
    }
так правильнее будет
__SOKOL__
3 / 3 / 0
Регистрация: 29.06.2013
Сообщений: 107
02.08.2014, 10:02     Очередь «первый вошел — первый вышел» (FIFO) #3
Вот так должно всё выглядеть:
Кликните здесь для просмотра всего текста
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
template<class T>
class Queue
{
private:
    unsigned int _count;
    T *_container;
    
public:
    Queue() { _count = 0; _container = 0; }
    
    unsigned int count() const { return _count; }
    
    void push(T value)
    {
        if(_container == 0) _container = new T[1];
        else
        {
            T *newCont = new T[_count + 1];
            for(int i = 0; i < _count; i++)
            {
                newCont[i] = _container[i];
            }
            delete _container;
            _container = newCont;
        }
        
        _container[_count++] = value;
    }
 
    T get()
    {
        if(_count == 0) return 0;
        
        T result = _container[0];
        
        T *newCont = new T[_count - 1];
        for(int i = 0; i < _count - 1; i++)
        {
            newCont[i] = _container[i + 1];
        }
        delete _container;
        _container = newCont;
        _count--;
 
        return result;
    }
};
Yandex
Объявления
02.08.2014, 10:02     Очередь «первый вошел — первый вышел» (FIFO)
Ответ Создать тему
Опции темы

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