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

Как представиь очередь, состоящую из структур, на статическом массиве? - C++

Восстановить пароль Регистрация
 
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
10.04.2014, 14:17     Как представиь очередь, состоящую из структур, на статическом массиве? #1
из условия задачи:
Разработать программу, реализующую алгоритм очереди (20 элементов). Задача решается в двух вариантах: статическом (на основе массива структур) и динамическом.

так вот динамическую очередь я себе представляю так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//-----------------------------------------------------------
const int MAX_SIZE = 20;       // максимальное количество элементов в очереди
const int L_NAME = 30;         // длина полей "Наименование магазина" и "ФИО директора" в структуре
 
// структура Магазин
struct Magazin
{
    int     nomer;         // номер магазина
    char    name[L_NAME];  // наименование магазина
    char    fio[L_NAME];   // ФИО директора магазина
    int     kol_sotr;      // количество сотрудников
    double  dohod;         // годовой доход
};
 
//-----------------------------------------------------------
// структура Node - узел, элемент очереди
struct Node
{
    Magazin Data;       // Магазин
    Node *next;         // указатель на следующий узел очереди
};
и далее работаю с указателями next.

Но вот ну никак не могу представить себе очередь на статическом массиве (
у меня перепутались в голове два варианта:

1) или очередь делать структурой с вложенным массивом структур arr_mag[MAX_SIZ]:

C++
1
2
3
4
5
struct Node
{
    Magazin arr_mag[MAX_SIZ];       // Магазин
    Node *next;         // указатель на следующий узел очереди
};
2) или же просто в функции main() определять массив структур

C++
1
magazin arr_mag[MAX_SIZ];
и далее работать с этим массивом?

Добавлено через 11 минут
3) или же вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct Magazin
{
    int     nomer;         // номер магазина
    char    name[L_NAME];  // наименование магазина
    char    fio[L_NAME];   // ФИО директора магазина
    int     kol_sotr;      // количество сотрудников
    double  dohod;         // годовой доход
    Node *next;         // указатель на следующий узел очереди
};
 
//-----------------------------------------------------------
// структура Node - узел, элемент очереди
struct Node
{
    Node *top;  // голова
    Node *end;  // конец
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2014, 14:17     Как представиь очередь, состоящую из структур, на статическом массиве?
Посмотрите здесь:

C++ Сеть и очередь структур
Поиск в массиве структур. C++
Как проинициировать в массиве структур (создонном ранее) каждый элемент C++
C++ Реализовать очередь на одномерном массиве
C++ занесение структур находящихся в разных потоках, в общую очередь C++
Реализовать классы для структур данных «стек» и «очередь» C++
C++ Освобождение памяти из под Объектов в статическом массиве указателей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2014, 14:26     Как представиь очередь, состоящую из структур, на статическом массиве? #2
Цитата Сообщение от don_keyhot Посмотреть сообщение
очередь на статическом массиве
Выделяем память размером с максильную длину очереди. И дополнительно имеем указатель на элемент, который считаем первым в очереди. Когда первый элемент обработан - передвигаем указатель на следующий элемент (циклически).
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
10.04.2014, 14:37  [ТС]     Как представиь очередь, состоящую из структур, на статическом массиве? #3
Tulosba,
спасибо, но не совсем понял
как, в чем, где мне хранить записи magazin?

Добавлено через 1 минуту
мне вариант что попроще

Добавлено через 5 минут
опишите мне нужные структуры, а то я не могу представить себе их вложенность друг в друга
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2014, 14:40     Как представиь очередь, состоящую из структур, на статическом массиве? #4
Цитата Сообщение от don_keyhot Посмотреть сообщение
как, в чем, где мне хранить записи magazin?
Ну, если magazin это элемент очереди, то заводите массив вида:
C++
1
magazin queue[MAX_SIZE];
И указатель на элемент, который считаем первым в очереди.
В качестве "указателя" имеет смысл взять просто число, т.е. номер эл-та в массиве.
C++
1
int first = 0;
Ещё конечно надо знать текущий размер очереди.
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
10.04.2014, 14:49  [ТС]     Как представиь очередь, состоящую из структур, на статическом массиве? #5
я не понимаю в чем разница между
очередью на основе статического массива структур
от простого массива структур
magazin arr_mag[MAX_SIZ];
?

Добавлено через 2 минуты
неужели разница между ними только в том, что в случае очереди запрещен доступ по произвольному индексу, только последовательный доступ?

Добавлено через 5 минут
да магазин - элемент очереди
и размер известен заранее = 20 элементов
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2014, 14:54     Как представиь очередь, состоящую из структур, на статическом массиве? #6
В понятии очереди доступ должен быть только последовательный. Если структура, на базе которой реализована очередь (массив например) допускает случайный доступ, то это ничего не значит, т.к. внутренняя структура не должна быть доступна пользователю класса.
Возможно Вам стоит ознакомиться с такими базовыми структурами данных как: списки, очереди, массивы ... Если еще не знакомы конечно.
В STL можно посмотреть конкретную реализацию. std::list, std::queue, std::vector и т.д.
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
10.04.2014, 14:54  [ТС]     Как представиь очередь, состоящую из структур, на статическом массиве? #7
подведем итоги
1) объявляем структуру элемент очереди
struct Magazin {...};

2) объявляем статический массив
magazin arr_mag[20];

3) заводим переменную-индекс для доступа к очереди
int top = 0;

так?
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2014, 14:57     Как представиь очередь, состоящую из структур, на статическом массиве? #8
Цитата Сообщение от don_keyhot Посмотреть сообщение
так?
Так. Но ещё текущее кол-во элементов в очереди тоже надо знать.
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
10.04.2014, 15:01  [ТС]     Как представиь очередь, состоящую из структур, на статическом массиве? #9
Tulosba, спасибо, так и сделаю
но я вообще-то не понимаю смысла в очереди на основе статического массива?
получается, что интерфейс тот же что и с обычным массивом, только дополнительно накладываются ограничения на доступ? так просто, а я голову ломаю )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 15:09     Как представиь очередь, состоящую из структур, на статическом массиве?
Еще ссылки по теме:

C++ Сортировка в массиве структур
C++ Как сделать ввод строки с пробелами в динамическом массиве структур?
C++ В массиве целых чисел найти предпоследнюю группу, состоящую из возрастаю- щей последовательности цифр
C++ Как найти заданный элемент (типа char) в массиве структур?
Реализовать очередь на массиве C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2014, 15:09     Как представиь очередь, состоящую из структур, на статическом массиве? #10
Цитата Сообщение от don_keyhot Посмотреть сообщение
с обычным массивом
А что Вы называете обычным массивом?
Цитата Сообщение от don_keyhot Посмотреть сообщение
интерфейс тот же
Интерфейс не должен зависеть от реализации. Одно из основных правил ООП.
Yandex
Объявления
10.04.2014, 15:09     Как представиь очередь, состоящую из структур, на статическом массиве?
Ответ Создать тему
Опции темы

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