Структуры данных: массив, связный список, стек, очередь
Структура данных — это способ расположить данные так, чтобы программа могла быстро и удобно с ними работать.
- Массив: фиксированный размер, элементы лежат рядом, к любому можно попасть по индексу (a[3]). Вставка в середину медленная.
- Связный список (динамический): каждый узел хранит значение и ссылку на следующий узел. Он растёт и уменьшается по мере надобности, но чтобы добраться до элемента 5, нужно пройти элементы с 1 по 4.
- Стек: push и pop только с одного конца (LIFO). Применяется для отмены действий, кнопки «Назад» и проверки скобок.
- Очередь: добавляем в конец, убираем из начала (FIFO). Применяется для заданий печати и очередей ожидания.
В библиотеках эти инструменты уже есть. В Python обычный list работает как стек (append, pop), а collections.deque — как быстрая очередь. Если готовое средство есть, пользуйся им и не пиши заново.
stack = []
stack.append(5); stack.append(8)
stack.pop() # gives 8
from collections import deque
q = deque([4, 9]); q.append(2)
q.popleft() # gives 4
Работа в IDE: писать, запускать, проверять
IDE (integrated development environment, интегрированная среда разработки) собирает в одном месте редактор, кнопку запуска, отладчик и другие инструменты. Она подсвечивает код цветом, подсказывает имена и показывает ошибки прямо во время набора.
- Запусти программу и прочитай результат.
- Проверь её на простых, обычных и подвохных данных (пустой список, ноль, очень большое число).
- Отлаживай: поставь точку останова (breakpoint) и иди по строкам, следя за значениями переменных.
2D- и 3D-визуализация и анимация
Картинки помогают увидеть закономерности. Программы умеют рисовать графики (столбчатые, линейные, точечные), двумерные рисунки и трёхмерные сцены. Анимация — это одна и та же картинка, нарисованная снова и снова с небольшим изменением (примерно 30–60 раз в секунду). Простой способ: заведи переменную, например x, на каждом кадре немного увеличивай её и перерисовывай. 3D на этой странице сделан так же, с помощью 3D-библиотеки.
Продвинутые функции электронных таблиц
Электронные таблицы с помощью функций могут делать работу, похожую на программирование:
IF(B2>=50,"Pass","Fail")выбирает один из двух результатов.SUMIF(B2:B5,">=50")складывает только те ячейки, которые подходят под правило;COUNTIFих считает.VLOOKUP(2, A2:B5, 2, FALSE)ищет 2 в первом столбце и возвращает значение из столбца 2 той же строки (в русской версии это ВПР).XLOOKUPделает то же самое проще.- Сводные таблицы подводят итоги по большим данным в разрезе групп, а диаграммы показывают результат.
Реляционные базы данных и SQL
Реляционная база данных хранит данные в таблицах из строк и столбцов. У каждой таблицы есть первичный ключ — столбец с неповторяющимися значениями (id). Другая таблица использует это значение как внешний ключ, чтобы сослаться на первую. Хороший проект хранит каждый факт один раз, без повторов.
SQL — это язык, на котором мы задаём вопросы и меняем данные:
SELECT name, score FROM students
JOIN marks ON students.id = marks.id
WHERE score >= 50 ORDER BY score DESC;
INSERT INTO marks (id, score) VALUES (5, 67);
UPDATE marks SET score = 55 WHERE id = 2;
DELETE FROM marks WHERE id = 5;Целостность значит, что данные остаются верными: ключи уникальны, внешний ключ обязан указывать на настоящую строку, а значения имеют правильный тип. Безопасность — это пароли для пользователей, выдача каждому только нужных прав, резервные копии и правило никогда не собирать SQL-запрос склеиванием текста пользователя (используй параметры): так защищаются от SQL-инъекции.
Вклад в открытые ресурсы
Многие инструменты и библиотеки — с открытым исходным кодом (open source): любой может читать, использовать и улучшать их по лицензии. Помочь можно так: исправить ошибку, улучшить инструкцию, перевести страницу или добавить пример. Всегда читай лицензию, указывай авторов и пиши понятные, вежливые сообщения, когда предлагаешь изменение.
Попробуй сам
В 3D на шаге 5 положи в стек 3 элемента, потом достань их. Запиши порядок. Сделай то же самое с очередью. Потом сначала предскажи, а потом проверь: после добавления 4, 9, 2 и удаления одного элемента, какое значение осталось в начале очереди и на вершине стека?
Главные формулы и определения
- Стек = LIFO (последним вошёл, первым вышел): push, pop.
- Очередь = FIFO (первым вошёл, первым вышел): enqueue, dequeue.
- Массив: фиксированный размер, доступ по индексу. Связный список: размер меняется, идём по ссылкам.
- SELECT columns FROM table WHERE condition
- Первичный ключ = уникальный id. Внешний ключ = ссылка на другую таблицу.
Разобранные примеры
1. Элементы 5, 8 и 2 кладут в стек в таком порядке. Потом дважды делают pop. Что теперь на вершине?
Стек после добавления: 5, 8, 2 (2 сверху). Pop убирает 2, потом 8. Остаётся 5. Вершина = 5.
2. Элементы 4, 9, 2 встают в очередь в таком порядке. Делают один dequeue. Какой элемент теперь в начале?
Уходит тот, кто пришёл первым, то есть убирается 4. В начале теперь 9.
3. Таблица оценок: id от 1 до 4, баллы 72, 45, 88, 51. Сколько строк вернёт WHERE score >= 50?
72, 88 и 51 не меньше 50. Это 3 строки.
4. В ячейках B2:B5 числа 72, 45, 88, 51. Что даст =SUMIF(B2:B5,">=50")?
Складываются только 72, 88 и 51: 72 + 88 + 51 = 211.
5. Почему для проверки скобок в выражении, например ( [ ] ), используют стек?
Каждую открывающую скобку кладём в стек. Когда встречается закрывающая, достаём верхнюю и проверяем, что они подходят друг другу. Последняя открытая скобка должна закрыться первой (LIFO), а именно это и даёт стек. Если в конце стек пуст, скобки расставлены верно.
Частые ошибки
- Брать массив, когда заранее не известно, сколько будет элементов. Лучше список или связный список.
- Путать стек и очередь. Стек убирает самый новый элемент, очередь — самый старый.
- Забыть WHERE в UPDATE или DELETE: тогда изменятся все строки.
- Собирать SQL склеиванием текста пользователя в строку. Используй параметры.