Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для don_keyhot
8 / 8 / 6
Регистрация: 02.04.2014
Сообщений: 62

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

10.04.2014, 14:17. Показов 3400. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
из условия задачи:
Разработать программу, реализующую алгоритм очереди (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;  // конец
};
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2014, 14:17
Ответы с готовыми решениями:

Сформировать очередь, содержащую целые числа. Построить новую очередь, состоящую из элементов первоначальной очереди Q,
Сформировать очередь, содержащую целые числа. Построить новую очередь, состоящую из элементов первоначальной очереди Q, кратных числу 3.

Сформировать очередь, содержащую целые числа. Построить новую очередь, состоящую из элементов первоначальной очереди Q,
Сформировать очередь, содержащую целые числа. Построить новую очередь, состоящую из элементов первоначальной очереди Q, кратных числу 3

Реализовать очередь на массиве из 6 структур, каждая из которых представляет пару x, y
Реализовать очередь на массиве из 6 структур, каждая из которых представ- ляет пару x, y (тип "int"). Написать тестовую...

9
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2014, 14:26
Цитата Сообщение от don_keyhot Посмотреть сообщение
очередь на статическом массиве
Выделяем память размером с максильную длину очереди. И дополнительно имеем указатель на элемент, который считаем первым в очереди. Когда первый элемент обработан - передвигаем указатель на следующий элемент (циклически).
0
 Аватар для don_keyhot
8 / 8 / 6
Регистрация: 02.04.2014
Сообщений: 62
10.04.2014, 14:37  [ТС]
Tulosba,
спасибо, но не совсем понял
как, в чем, где мне хранить записи magazin?

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

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

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

Добавлено через 5 минут
да магазин - элемент очереди
и размер известен заранее = 20 элементов
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2014, 14:54
В понятии очереди доступ должен быть только последовательный. Если структура, на базе которой реализована очередь (массив например) допускает случайный доступ, то это ничего не значит, т.к. внутренняя структура не должна быть доступна пользователю класса.
Возможно Вам стоит ознакомиться с такими базовыми структурами данных как: списки, очереди, массивы ... Если еще не знакомы конечно.
В STL можно посмотреть конкретную реализацию. std::list, std::queue, std::vector и т.д.
0
 Аватар для don_keyhot
8 / 8 / 6
Регистрация: 02.04.2014
Сообщений: 62
10.04.2014, 14:54  [ТС]
подведем итоги
1) объявляем структуру элемент очереди
struct Magazin {...};

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

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

так?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2014, 14:57
Цитата Сообщение от don_keyhot Посмотреть сообщение
так?
Так. Но ещё текущее кол-во элементов в очереди тоже надо знать.
0
 Аватар для don_keyhot
8 / 8 / 6
Регистрация: 02.04.2014
Сообщений: 62
10.04.2014, 15:01  [ТС]
Tulosba, спасибо, так и сделаю
но я вообще-то не понимаю смысла в очереди на основе статического массива?
получается, что интерфейс тот же что и с обычным массивом, только дополнительно накладываются ограничения на доступ? так просто, а я голову ломаю )
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2014, 15:09
Цитата Сообщение от don_keyhot Посмотреть сообщение
с обычным массивом
А что Вы называете обычным массивом?
Цитата Сообщение от don_keyhot Посмотреть сообщение
интерфейс тот же
Интерфейс не должен зависеть от реализации. Одно из основных правил ООП.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2014, 15:09
Помогаю со студенческими работами здесь

Структура: Реализовать очередь на массиве из 6 структур, каждая из которых представляет пару x, y.
Условие: Реализовать очередь на массиве из 6 структур, каждая из которых представляет пару x, y (тип "int"). Написать тестовую...

Как переделать очередь основанную на массиве в циклическую очередь
Как переделать очередь основанную на массиве в циклическую очередь? Тут кое-какие попытки. Беда с выводом так же присутствует) uses ...

Как создать очередь переменных структур
Всем прив! Столкнулся с проблемкой. У меня есть допустим 3 типа структур (1-три поля, 2-два, 3-четыре). Понятное дело, что занимают они...

Стек на статическом массиве
Может кто-нибудь написать стек на статическом массиве. Т.е чтобы был объявлен массив, объявлен указатель на дно стека, проверка на то, что...

Мусор в строковом статическом массиве C++
Если строковый статический массив заполнить \0, а потом вводить символы, количество которых < количество элементов массива, то...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru