випадку розмір поля type може бути розширений, наприклад, до 1 байта і це поле може индицировать не тільки атом/подсписок, але й тип атомарних даних, поле next в дескрипторі даних може використовуватися для представлення ще якийсь описової інформації, наприклад, розміру атома.
Приклад подання списку елементами одного формату
Постановка завдання
Для демонстрації застосування списків, потрібно написати гру. Програма написана на мові С ++. Тип - односпрямований, що не кільцевої, без головного елементом. У силу особливостей реалізації ігри, список, також, є розгалуженим. Тип гри вибирається довільно, у разі даної роботи - морський бій.
Кораблі на поле розставляються автоматично і кожен раз випадково. При розстановці кораблів відбувається додавання корабля в список. Кожен корабель також є списком, де елементу списку відповідає палуба корабля. При попаданні в корабель елемент списку видаляється. Гра триває доки хоча б один із списків, комп'ютера або гравця, не стане порожній.
Опис роботи
Програма написана на мові С ++. Тип списку - односпрямований, що не кільцевої, без головного елемента, розгалужений.
При запуску програми відбувається виклик меню. Меню циклічне.
Пункти меню:
1. New game (Старт гри)
2. Options (Налаштування)
. Information (Інформації про розробника)
. Exit (Вихід)
Початок гри відбувається при виборі відповідного пункту меню. Гра являє собою 2 поля розміром 10 на 10. При натисканні enter відбувається постріл по клітці поля. Мета гри - знищити всі корабля супротивника.
У грі використовуються 2 списки, кожен з яких складається з безлічі списків, кількість яких дорівнює кількості кораблів на полі. Якщо один з гравців потрапляє в клітину, де знаходиться корабель іншого, елемент списку з даними цього поля видаляється зі списку.
Тестування
Нова гра. 2 поля 10х10. Сформовано 2 списку
Гравець зробив хід подій і промахнувся. Черга комп'ютера робити хід.
Першим ходом комп'ютер потрапляє в четирёхпалубний корабель гравця, і знищує його подальшими ходами. Після цього він потрапляє в двопалубний корабель, але наступним ходом промахується. Знову черга ходити гравця.
Другим ходом гравець знову промахується, хід переходить до комп'ютера, і він знову б'є в невірному управлінні, і третім ходом гравець потрапляє по кораблю комп'ютера.
Після цього він знищує четирёхпалубний корабель гравця.
Після цього гра продовжується.
У підсумку переміг гравець.
Висновок
Всі змінні, оголошені в програмі, розміщуються в одній безперервній області пам'яті, яку називають сегментом даних. Такі змінні не змінюють свого розміру в ході виконання програми і називаються статичними. Розміру сегмента даних може бути недостатньо для розміщення великих обсягів інформації. Виходом з цієї ситуації є використання динамічної пам'яті. Динамічна пам'ять - це пам'ять, що виділяється програмі для її роботи за вирахуванням сегмента даних, стека, в якому розміщуються локальні змінні підпрограм і власне тіла програми.
Для роботи з динамічною пам'яттю використовують покажчики. З їх допомогою здійснюється доступ до ділянок динамічної пам'яті, які називаються динамічними змінними . Для зберігання динамічних змінних виділяється спеціальна область пам'яті, звана купою raquo ;.
Список матеріалів
Література: Р.Лафоре Об'єктно-орієнтоване програмування в C ++.
Бьерн Страуструп. Мова програмування С ++
Подбельский В. Мова С ++
Лістинг списків
class shiplist
{: ship//елемент списку
{x, y; * nextright; * nextdown; (int _x, int _y, ship * nr=NULL, ship * nd=NULL)//конструктор з передающ значеннями
{= _x;=_y;=nr;=nd;
}
}; shipCount;
ship * first;// Перший елемент * firstdown;// Верхній елемент * lastright;// Останній елемент у списку корабля * lastdown;//Останній елемент ...