
- •Типы и структуры данных. Опредления, классифиация.
- •Простые типы данных, операции над ними. Сильная и слабая типизация.
- •Массивы. Операции, способы предсавления, сложность операций.
- •Записи. Операции над ними, способы представления, сложность операций.
- •Объединения. Операции, представление. Сложность операций.
- •Множества. Операции, способы представления, сложность операций.
- •Последовательности вкратце
- •Линейные списки
- •Очереди.
- •Линейный список, сложность операции o(1)
- •Динамические струкутуры данных. Работа динамической памяти в c.
- •Деревья. Определения, классификация, способы представления.
- •Двоичные деревья, операции.
- •Дерево поиска. Основные операции, вычисление средней длины пути.
- •Виды сбалансированных деревьев, достоинства и недостатки.
- •Дерево оптимального поиска
- •Красно-черные деревья.
- •Splay-деревья.
- •Асоциативные массивы и хэши
Простые типы данных, операции над ними. Сильная и слабая типизация.
Простые типы данных - не содержат внутри себя никаких других типов.
Предопределенные – типы, имеющиеся (строенные) на большинстве выч. машин. Все, кроме вещественного, упорядочены.
Integer
– некоторое подмножество целых чисел.
Если для представления в машине
используется n разрядов
и дополнительный код, то диапазон чисел:
.
Основные стандартные операции : +, -, /,
*.
Имеет место проблема деления.
character - множество печатаемых символов. Не существует такого стандартного множества символов, которое было бы принято на всех выч. машинах.
Для создания алгоритмов работы с данным типом необходимо учитывать следующие свойства множества:
Тип Character содержит 26 заглавных латинских букв, 26 строчных, 10 десятичных цифр, а также некоторые другие графические символы (например, знаки препинания).
Подмножества букв и цифр упорядочены и между собой не пересекаются (но соприкасаются).
Тип содержит непечатаемые символы пробела и конца строки, которые можно использовать как разделители.
Boolean - логический. Два значения обозначаются идентификаторами TRUE и FALSE. Операции OR, AND, NOT, XOR для каких-либо p и q (логические выражения) определяются следующим образом:
p AND q = если p, тогда q, иначе FALSE;
p OR q = если p, тогда FALSE, иначе q;
NOT(p) = если p, тогда TRUE, иначе FALSE;
P XOR q (возвращает значение true когда один из ее операндов true, а другой – false).
P |
q |
p&&q |
p||q |
!p |
p^q |
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
Результат некоторого сравнения можно присвоить какой-либо переменной или же использовать в качестве логического операнда в булевском выражении.
Float – подмножество вещественных типов. Операции такие же, как и с целыми, но результат может быть неточен в пределах ошибок округления.
Перечисляемый – новый, простейший тип, определяющийся простым перечислением входящих в него различных значений.
задается следующим образом: enum color {red, blue, green}.
Первое имя в enum имеет значение 0, следующая – 1, и т. д. (если для значений констант не было явных спецификаций). Если е все значения специфицированы, то они продолжают прогрессию, начиная от последнего специфицированного значения: enum winter_mounths {dec=1, jan, feb}.
Мощность множества = количеству констант в нем.
Стандартные операции, присваивающие своим аргументам следующее (inc(++)) или предыдущее значение (dec(--)), а также операции сравнения <,>, ==, !=.
Можно сделать enum Boolean {FALSE, TRUE}.
Диапазонный – используется, когда переменной присваивается значение некоторого типа, лежащее только внутри определенного интервала значений
Задается следующим образом type index = 1..10 или type s = spring..summer.
Базовый тип должен быть упорядочен.
Если применить диапазонный тип к индексам массива, то можно гарантировать, сто не выйдем за границы массива.
Сильная типизация:
Каждый объект обладает уникальным типом;
Каждый тип определяет множество значений и множество операций над ним;
В каждой операции присваивания типы, стоящие в левой и правой части, должны быть эквивалентны; *
Каждая применяемая операция над объектом данного типа должна входить в множество допустимых операций.
Для С: int I; I =2.0.
Для языка с сильной типизацией: i=(int) 2.0.