Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация и языки программирования.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
53.75 Кб
Скачать

10.Динамические структуры данных в с. Абстрактные типы данных.

Абстра́ктный тип да́нных (АТД) — это тип данных, который предоставляет для работы с элементами этого типа определённый набор функций, а также возможность создавать элементы этого типа при помощи специальных функций. Вся внутренняя структура такого типа спрятана от разработчика программного обеспечения — в этом и заключается суть абстракции. Абстрактный тип данных определяет набор функций, независимых от конкретной реализации типа, для оперирования его значениями. Конкретные реализации АТД называются структурами данных. Примеры АТД: Список; Стек; Очередь; Ассоциативный массив; Очередь с приоритетом.

Динамические структуры (или списки) - способ хранения информации, похожий на обычные структуры с тем лишь отличием, что в нашем случае кроме содержания информационные поля, существуют указатели на свой собственный тип структуры, а память выделяется динамически. Это приводит к экономии памяти и большей гибкости программы в отличие от массивов. Объявление и заполнение структуры:

NodePtr p; //указатель на текущий элемент

NodePtr tail; //указатель на "хвост" очереди

if (head == NULL)

{ head = new node;

head->info = 1; // или какому-то другому значению

head->next = NULL; }

for (int i=1;i<=N;i++) //где N -количество элементов

{ p = new node;

p->info = 2;

p->next = head->next; // в данном случае - NULL

head->next = p;

tail = p; }

Стеки - это множество элементов, сложенных в стопку. В стеках реализуется принцип first in last out (FILO) Для создания стека нужно подключить <stack> и в коде программы его объявить: stack <type> name, где type - тип стека, а name - имя стека. У стека есть немного функций: push() - добавить элемент; pop() - удалить верхний элемент; top() - получить верхний элемент; size() - размер стека; empty() - true, если стек пуст. Пример:

string s;

stack <string> st;

while (cin>>s);

st.push(s);

while (!(st.empty()))

{cout<<st.top();st.pop()}

Очереди, как следует из название, используют принцип first in first out (FIFO). Реализуются очереди также просто. Подключаем <queue>. И создаем очередь queue <type> name;

Перечень функций почти тот-же: push() - добавить элемент; pop() - удалить первый элемент; size() - размер очереди; empty() - true, если очередь пуста; front() - получить первый элемент; back() - получить последний элемент. Пример:

queue <int> events;

int n;

while (cin>>n)

events.push(n);

while (!events.empty)

{make(events.front());events.pop()}

В данном примере make - какая-то функция, обрабатывающая события