Массив
Здесь мы можем наблюдать как определение, так и индексирование массива:
#include <iostream>
1
2 int main()
3 {
4 int array[5]; // массив из пяти чисел
5 array[0] = 3; // индекс первого элемента - 0 (нулевой элемент)
6 array[1] = 2;
7 array[2] = 4;
8 array[3] = 8;
9 array[4] = 12; // индекс последнего элемента - 4
10
11 std::cout << "The array element with the smallest index has the value " <<
12 array[0] << "\n";
13 std::cout << "The sum of the first 5 numbers is " << array[0] + array[1] +
14 array[2] + array[3] + array[4] << "\n";
15
16 return 0;
}
Типы данных и массивы
Массив может быть любого типа данных. Double int и тд
Индексы массивов
В языке C++ индексы массивов всегда должны быть интегрального типа
данных (т.е. типа char, short, int, long, long long, bool и т.д.). Эти индексы
могут быть либо константными значениями, либо неконстантными
значениями. Например:
1 int array[4]; // объявляем массив длиной 4
2
3 // Используем литерал (константу) в качестве индекса
4 array[2] = 8; // хорошо
5
6 // Используем перечисление (константу) в качестве индекса
7 enum Animals
8 {
9 ANIMAL_CAT = 3
10 };
11 array[ANIMAL_CAT] = 5; // хорошо
12
13 // Используем переменную (не константу) в качестве индекса
14 short index = 4;
15 array[index] = 8; // хорошо
Стек(Lifo) Кезек Очередь(Fifo)
Список функций C++ для работы со стеком:
push() – добавить элемент;
pop() – удалить элемент;
top() – получить верхний элемент;
size() – размер стека;
empty() – проверить стек на наличие элементов.
Программа, имитирующая интерфейс стека, основанного на базе
статического массива, будет состоять из следующих операций,
реализованных в виде функций:
Creation() – создание пустого стека;
Full() – проверка стека на пустоту;
Add() – добавление элемента;
Delete() – удаление элемента;
Top() – вывод верхнего элемента;
Size() – вывод размера стека.
Как таковых пользовательских операций тут всего четыре: Add, Delete, Top,
Size. Они доступны из консоли. Функция Creation – создает пустой стек сразу
после запуска программы, а Full проверяет возможность выполнения
пользовательских операций.
Очередь (англ. queue) — это структура данных, добавление и удаление
элементов в которой происходит путём операций push и pop соответственно.
Притом первым из очереди удаляется элемент, который был помещен туда
первым, то есть в очереди реализуется принцип «первым вошел — первым
вышел» (англ. first-in, first-out — FIFO). У очереди имеется голова (англ. head)
и хвост (англ. tail). Когда элемент ставится в очередь, он занимает место в её
хвосте. Из очереди всегда выводится элемент, который находится в ее голове.
Очередь поддерживает следующие операции:
empty — проверка очереди на наличие в ней элементов,
push (запись в очередь) — операция вставки нового элемента,
pop (снятие с очереди) — операция удаления нового элемента,
size — операция получения количества элементов в очереди.
Списки
https://codelessons.ru/cplusplus/spisok-list-v-s-polnyj-material.html осы сайтта
толык жазылган
связные и двусвязные списки
связный список является простейшим типом данных
динамической структуры, состоящей из элементов
(узлов). Каждый узел включает в себя в классическом варианте
два поля:
данные (в качестве данных может выступать переменная, объект
класса или структуры и т. д.)
указатель на следующий узел в списке.
Элементы связанного списка можно помещать и исключать
произвольным образом.
Доступ к списку осуществляется через указатель, который
содержит адрес первого элемента списка, называемый корнем
списка.
Классификация списков
По количеству полей указателей различают
однонаправленный (односвязный) и двунаправленный
(двусвязный) списки.
Связный список, содержащий только один указатель на
следующий элемент, называется односвязным.
Связный список, содержащий два поля указателя – на следующий
элемент и на предыдущий, называется двусвязным.
По способу связи элементов различают линейные и
циклические списки.
Связный список, в котором, последний элемент указывает
на NULL, называется линейным.
Связный список, в котором последний элемент связан с первым,
называется циклическим.
Виды списков
Таким образом, различают 4 основных вида списков.
Односвязный линейный список (ОЛС).
Каждый узел ОЛС содержит 1 поле указателя на следующий узел.
Поле указателя последнего узла содержит нулевое значение
(указывает на NULL).
Односвязный циклический список (ОЦС).
Каждый узел ОЦС содержит 1 поле указателя на следующий узел.
Поле указателя последнего узла содержит адрес первого узла
(корня списка).
Двусвязный линейный список (ДЛС).
Каждый узел ДЛС содержит два поля указателей: на следующий
и на предыдущий узел. Поле указателя на следующий узел
последнего узла содержит нулевое значение (указывает на NULL).
Поле указателя на предыдущий узел первого узла (корня списка)
также содержит нулевое значение (указывает на NULL).
Двусвязный циклический список (ДЦС).
Каждый узел ДЦС содержит два поля указателей: на следующий
и на предыдущий узел. Поле указателя на следующий узел
последнего узла содержит адрес первого узла (корня списка).
Поле указателя на предыдущий узел первого узла (корня списка)
содержит адрес последнего узла.
Сравнение массивов и связных списков
Массив Список
Выделение памяти осуществляется
Выделение памяти осуществляется по мере ввода
единовременно под весь массив до начала
новых элементов
его использования
При удалении/добавлении элемента Удаление/добавление элемента осуществляется
требуется копирование всех последующих переустановкой указателей, при этом сами
элементов для осуществления их сдвига данные не копируются
Для хранения элемента требуется объем Для хранения элемента требуется объем памяти,
памяти, необходимый только для хранения достаточный для хранения данных этого элемента
данных этого элемента и указателей (1 или 2) на другие элементы списка
Доступ к элементам может осуществляться Возможен только последовательный доступ к
в произвольном порядке элементам