Простыми данными для программы являются

Предлагаем укрепить (или получить) знания о базовых структурах данных. Эти понятия являются основой всего, что связано с программами. Вспомните азы, а если не знаете – получите их. Они пригодятся в работе, а если есть цель найти ее, то и при прохождении интервью. Укажите, что вы знаете составляющие структуры данных, их применение, и это поможет в поиске работы.

Потратив немного времени, вы приятно удивите интервьюера, начальника или коллег по работе.

Основополагающие сведения о структурах данных

Классическая структура данных представляет собой определенный способ организации этих самых данных для дальнейшего эффективного использования. Это если кратко. В более развернутом виде – она представляет собой некую упаковку, в которой данные сохраняются в определенной «моделе».

Структуры данных делятся на:

  • линейные (стеки, очереди, массивы) – элементы выстраиваются в последовательность либо линейный список. Также линейны и обходы узлов;
  • нелинейные (графы, деревья) – данные выстраиваются без какой-либо последовательности. Также не линейны и обходы узлов.

Коснемся основных действий. Данные можно получить, найти, добавить, удалить. Для реализации этих целей существует много разнообразных структур данных. Каждая отдельно взятая более эффективна в одних вопросах и менее эффективна в других. Потому разработчик должен понимать функциональные составляющие каждой структуры.

Пишу простую, но реальную программу. Python + Excel.

Грамотное применение функциональных свойств структуры данных ускорит решение любой поставленной задачи.

Приходится часто искать информацию – укажите одну разновидность. Если нужно постоянно что-либо вставлять – укажите другую. А если частенько приходится выполнять действия по перестановке и удалению – укажите третье решение.

Базовые термины

Перед изучением структуры данных кратко коснемся их основы – терминов, а затем перейдем к применению. К ним относятся:

  • Интерфейс – определенный набор операций, поддерживающих структуру данных. Он присущ каждой структуре. Интерфейс может предоставлять только перечень поддерживаемых операций, тип принимаемых параметров и возвращает тип этих операций.
  • Реализация – обеспечивает внутреннее представление структуры данных, помогает в определении алгоритмов, которые используются в операциях.

Характеристики

Важными характеристиками структур данных являются:

  • Корректность – она должна грамотно реализовывать свой интерфейс.
  • Сложность времени – должно использоваться минимальное количество времени на выполнение операций.
  • Сложность пространства – при проведении операций память должна использоваться минимально.

Какие проблемы можно решить с помощью структуры данных

В связи с тем, что приложения становятся все более сложными, а количество составляющей информации в них постоянно растет, то возникают три проблемы:

  • замедление процесса поиска в связи с ростом данных;
  • ограниченная скорость процессоров. Несмотря на то, что она достаточно высокая, с ростом объема информации и она ограничивается;
  • многократные запросы через поиск на веб-серверах вызывают сбои в их работе.

Структуры данных помогают в решение вышеперечисленных проблем. Данные можно организовать в структуры таким образом, что поиск будет осуществляться практически мгновенно.

Алгоритмы и структуры данных простыми словами. Зачем учить алгоритмы? #codonaft

Случаи выполнения

Чтобы провести сравнение временных промежутков, необходимых для выполнения различной структуры, используются следующие случаи:

  • худший – сценарий, при котором для выполнения конкретной операции потребуется максимальное время, которое только возможно;
  • средний – сценарий, при котором на выполнение операции отводится среднее время;
  • наилучший – сценарий, который отображает кратчайший промежуток времени, необходимый для выполнения операции.

Основные виды структур

К основным видам структуры данных относятся:

Массивы

Это наипростейшие и широко используемые структуры данных, в которых элементы следуют один за другим. Представляет собой контейнер, в котором может храниться фиксированное количество однотипных компонентов.

  • элементами называют все компоненты, хранящиеся в массиве;
  • индексы – местонахождение каждого элемента в массиве выражается целым числовым индексом, используемом для его идентификации.

Размерность массива определяет количество индексов в нем. Они бывают одномерными (называют векторами) и многомерными (массив в середине массива). Массивы могут объявляться разными способами на различных языках программирования.

Некоторые структуры являются производными массивов (стеки, очереди). В массиве каждый элемент имеет индекс (положительное целое числовое значение), соответствующий тому, какую позицию в массиве он занимает.

Язык программирования определяет, с какого значения в массиве начинается нумерация. Во многих языках начальным индексом массива определен 0.

  • статическими — характеризуются однородностью данных;
  • динамическими – характеризуются непостоянством размера, который может меняться в ходе выполнения программы. Это усложняет процесс, ухудшает быстроту действий, но работа с информацией становится более гибкой;
  • гетерогенными – характеризуется неоднородностью данных.

Основные операции, которые поддерживаются массивами:

  • Traverse – выставляет один за одним все компоненты массива;
  • Insert – добавляет один или несколько элементов по указанному индексу;
  • Get – производит возврат элемента по указанному индексу;
  • Delete – выполняет удаление элемента по указанному индексу;
  • Size – позволяет узнать общую численность элементов, содержащихся в массиве.

Списки

Список является абстрактным типом данных. Существует несколько их разновидностей. Рассмотрим наиболее популярные:

Связные (связанные) списки

Связной список представляет собой массив с конечным множеством элементов (отдельных объектов) и указателями на них.

Каждый объект содержит:

  • поле информации (тип данных может быть любым);
  • ссылки (указатели) на последующий узел.

Таким образом упорядоченные элементы связного списка связаны друг с другом указателями. Вместе эти группы образуют последовательность.

Как и массив, список лежит в основе понятия классической структуры данных. Их функциональные особенности часто сравнивают, т.к. большинство других структур могут быть реализованы с помощью массивов или связных списков. Последний отличается от массива структурной гибкостью. Доступ к спискам осуществляется последовательно, а к массивам – произвольно.

Связанные списки бывают следующих видов:

  • Однонаправленные (односвязные) – каждый узел сохраняет адрес либо ссылку на тот узел, который числится следующим. А узел, являющийся последним, содержит последующий адрес либо ссылку как NULL. Линейные однонаправленные списки встречаются чаще всего.
  • Двунаправленные (двусвязные) – имеют две ссылки, которые связаны с каждым отдельным узлом (первая указывает на последующий, вторая – на предыдущий).
  • Круговые (кольцевые) – все узлы списка соединены в круг при отсутствии в последнем NULL. Является подвидом двух предыдущих видов связных списков. Они могут быть одно- или двусвязными.

Чтобы односвязный список стал круговым, необходимо в его последний узел вставить указатель на первый элемент. Чтобы двунаправленный список преобразовать в кольцевой, следует добавить две ссылки на узлы: первый и последний.

Операции, являющиеся основными:

  • InsertAtEnd – вставка заданного элемента в конце списка;
  • InsertAtHead – вставка заданного элемента в начало списка;
  • Delete – удаление заданного элемента из списка;
  • DeleteAtHead – удаление первого элемента в списке;
  • Search – возвращение заданного элемента из списка
  • isEmpty – в тем случае, когда список пустой, производится возврат True.

Стеки

Являются базовой структурой, в которой реализовано лишь добавление и удаление объектов в начало стека (через его вершину). Представляет собой список элементов, которые организованы по принципу LIFO (на английском языке Last In – First Out, что в переводе означает «последним зашел – первым ушел»). По тому же принципу работает в приложениях функционал «Отменить».

Отличное сравнение – стопка тарелок. Чтобы из стопки взять тарелку, необходимо вначале снять верхние тарелки. А положить тарелку можно только на верх стопки.

  • Push – вставка в стек элемента наверху;
  • Pop – удаление верхнего элемента из стека;
  • Pip – отображается содержимое;
  • isEmpty – происходит возврат True в случае, когда стек пустой;
  • Top – возвращает элемент сверху, не удаляя его из стека.

Чаще всего в программировании применяется:

  • стек изменений в редакторе кода, позволяющий быстро делать отмену изменений и возвращаться к предыдущему состоянию;
  • стек передвижения по страницам в браузере – позволяет быстро переходить по страницам.

Очереди

Является яркой аналогией с очередью в магазин. Порядок входа в него определяет то, в каком порядке была занята очередь. Первый занявший очередь зайдет первым, за ним – второй и т.д. В очереди используется принцип доступа к данным FIFO (на английском языке – First In First Out, в переводе означает «Первый вошел, первый ушел»).

Если кратко, то очередью является список, в котором добавление новых элементов допустимо строго в его конец, а извлечение – происходит строго с другого конца, который называют началом списка.

Читайте также:
Программа для настройки подсветки вентиляторов ПК deepcool

Элементы сохраняются последовательно. Но для очереди используется принцип FIFO, а не LIFO.

  • Enqueue – вставка элемента в конец очереди;
  • Dequeue – удаление элемента из начала очереди;
  • isEmpty – будет возвращено значение True, если очередь пуста;
  • Top – возвращает первый элемент из очереди.

Дек или двухсторонняя очередь

Дек (двухсторонняя очередь) – это вид списка (стека) с двумя концами. Он позволяет добавлять и извлекать элементы с двух сторон (как в начале, так и в конце).

Дек работает одновременно по FIFO и LIFO. Потому он и относится к отдельной программной единице, которая была получена в результате суммирования стека и очереди.

Графы

Графом называют набор узлов (вершин), соединенных между собой связями (называют ребра, дуги).

  • ориентированными – имеют ребра с единственно возможным направлением между парой связанных вершин;
  • неориентированными – для каждой дуги переход между вершинами может происходить в любом направлении, а также из каждой вершины можно перейти в другую;
  • смешанные – отличаются присутствием дуг, перечисленных выше.

Графы могут иметь различную форму:

  • матрицы смежности – таблицы целых чисел, в которой каждая строка либо столбец являются другим узлом на графе. В месте пересечения столбца и строки находится число, указывающее на отношение. Нули указывают, что ребер нет, а единицы – что связи есть;
  • матрицы инцидентности;
  • списка смежности – представлен списком, в котором левая сторона выступает вершиной, а правая – перечнем всех иных узлов, соединенных с ней;
  • списка ребер.

В графах используются алгоритмы обхода:

  • в глубину (depth-first search) – обход осуществляется по узлам.
  • в ширину (breadth-first search) – поиск осуществляется по уровням;

Стиль дуг граф может быть не только в виде прямой линии, а вершин – выражен в цифрах. Существуют графы, именуемые взвешенными, где ребрам соответствует определенное значение (именуемое его весом). При совпадении концов ребра его называют петлей.

Графы довольно часто используются в транспортных и компьютерных сетях, веб-технологиях. По принципу граф построены социальные сети, где люди являются узлами, а дуги – их связями.

Множества

Хранение данных во множество организовано беспорядочно и без повторяющихся значений. В них можно добавлять и удалять объекты, а также есть еще ряд важнейших функций, позволяющих работать одновременно с двумя наборами функций.

Так, при двух заданных множествах функции выполнят:

  • Union (объединение множеств) – объединятся все элементы, принадлежащие им обеим. Результат будет возвращен в качестве нового (не имеющего дубликатов);
  • Intersection (пересечение множеств) – будет возвращено новое множество, которому будут принадлежать объекты, имевшиеся в обеих заданных множествах;
  • Difference (разница множеств) – будет возвращено множество с элементами, содержавшимися в одном и не повторявшиеся в другом;
  • Subset (подмножество) – возвращает булево значение, демонстрирующее содержатся ли в множестве все объекты иного.

Map

Map также именуют ассоциативный массив или словарь. Это структура данных, которая сохраняет данные в связке уникальный ключ/ значение. Чаще всего он используется, когда необходим быстрый поиск информации

С помощью Map можно:

  • добавить пару;
  • удалить пару;
  • изменить пару;
  • найти значения, которые связаны с определенными ключами.

Хэш-таблицы

Это структуры, реализующие интерфейс Map, позволяющий сохранять пару (ключ/ значение). Хеширование применяется для нахождения в массиве значения индекса, по которому будет найдено нужное значение.

При детальном рассмотрении можно увидеть, что хэш-таблица является массивом. В нем хэш-функция является индексом.

Коллизией называют хеширование двух вводов, имеющих одинаковый цифровой выход. Цель – уменьшение числа коллизий.

Когда в хэш-таблицу вводится пара ключ/ значение, с уникальным ключом проводится хеширование, после чего он становится числом. Оно в последствии используется в качестве фактического ключа, в котором это значение хранится. При повторной попытке получить доступ к этому же ключу, хеш-функция проведет его обработку и вернет то же числовое значение, которое в дальнейшем будет использовано для нахождения связанного значения. Это способствует быстрому поиску.

Производительность хеширования зависит от:

  • функций хеширования;
  • параметров хэш-таблиц;
  • методов устранения коллизий.

Деревья

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

От деревьев, встречающихся в природе, классическое математическое дерево отличается тем, что корень последнего расположен вверху. А его ветви «растут» сверху вниз.

Дереву присущи характеристики:

  1. Каждое имеет единственную вершину (корневой узел), расположенную сверху и не имеющую предков. Никакая вершина не ссылается на корень, а из него можно достичь любой имеющейся вершины дерева (это следствие свойства связанности древовидной структуры).
  2. Вершины, которые не имеют потомков (не ссылаются на иные) называются терминальными узлами (листьями).
  3. Объекты, которые располагаются между вершиной и листьями, называются промежуточными узлами.
  4. Каждая вершина древовидной структуры имеет лишь единого предка, а если он является корневым – не имеет ни одного предка.
  5. У корневого узла может быть от нуля или более потомков.
  6. У каждого дочернего узла может быть от нуля или более дочерних вершин.

Поддеревом называется часть древовидной структуры, которая имеет вершину и имеющиеся потомки.

Существует несколько типов деревьев. Чаще других встречается бинарное дерево. Оно представляет собой структуру данных с иерархией, в которой каждый узел имеет определенное значение (которое является ключом) вместе со ссылками на потомков (слева и справа).

Для деревьев используются следующие методы обхода:

  • прямой – осуществляется сверху вниз (начинается с посещения предков и постепенно переходит к потомкам);
  • обратный – обход осуществляется снизу вверх (прежде посещаются потомки, потом – предки);
  • симметричный – обход осуществляется слева направо (по очереди осуществляется обход поддеревьев главного дерева).

Выражение информации в виде древовидных структур оправдано в том случае, если у нее есть явная иерархия. Иерархически выраженная структура потребуется при работе с данными о географических объектах, служебных должностях и т.д. В таких случаях информацию лучше представлять в виде классических математических деревьев.

Дерево двоичного (бинарного) поиска

Кроме вышеуказанных характеристик деревьев, дереву двоичного поиска характерны еще ряд характеристик:

  1. Узел может иметь не больше двух детей (потомков).
  2. Левые потомки меньше текущего узла, что меньше, чем у правых детей.

Бинарные деревья помогают существенно ускорить работу объектами (находить, удалять, добавлять их).

Префиксные деревья (Trie), боры, лучи

Префиксные деревья, именуемые иногда борами и лучами, являются разновидностью древовидных структур. Они особенно эффективны для работы со строками, т.к. обеспечивают быстрый поиск информации. По сути бор является деревом поиска.

Чаще всего боры используют для:

  • поиска слов в словарях;
  • автозавершений в поисковиках;
  • IP-маршрутизации.

Бор хранит данные в узлах. Такие деревья часто используются для хранения слов. Они хранятся в борах сверху вниз – в каждом узле по букве.

Для записи слова необходимо проследовать по ветвям дерева, вписывая за раз по одной букве. Если порядок букв не похож на другие слова в дереве либо слово заканчивается, шаги начинают расходиться. В каждой вершине находится буква (данные) вместе с логическим значением, которое указывает на то, является ли данный узел в слове последним или нет.

Двоичная куча

Так называют полное дерево, у которого в каждом узле до двух детей. У двоичной кучи все уровни до последнего заполнены полностью. В последнем уровне заполнение ведется слева направо.

  • максимальной – у родительских узлов ключи всегда больше либо равны тем ключам, которые у детей;
  • минимальной – у родительских узлов ключи меньше либо равны ключам у дочерних элементов.

В двоичной куче прослеживается важность порядка между уровнями, но не между узлами одного уровня.

Это вся важная информация о структурах данных программы. Изучайте материал, находите новое и применяйте на практике. Если возникли вопросы – задавайте. Обязательно ответим на них.

Источник: otus.ru

Типы данных

Информация, поступающая в компьютер, состоит из определенного множества данных, относящихся к какой-то проблеме, — это именно те данные, которые относятся к конкретной задаче и из которых требуется получить желаемый ответ. В математике классифицируют данные в соответствии с некоторыми важными характеристиками. Принято различать целые, вещественные и логические данные, множества, последовательности, векторы, матрицы (таблицы) и т.д. В обработке данных на компьютере классификация играет даже боRльшую роль.

Любая константа, переменная, выражение или функция относятся к некоторому типу. Тип данных определяет диапазон допустимых значений и операций, которые могут быть применены к этим значениям. Кроме того, тип данных задает формат представления объектов в памяти компьютера, ведь в конце концов любые данные будут представлены в виде последовательности двоичных цифр (нулей и единиц). Тип данных указывает, каким образом следует интерпретировать эту информацию. Тип любой величины может быть установлен при ее описании, а в некоторых языках может выводиться компилятором по ее виду (Fortran, Basic).

Читайте также:
Программы стиральной машины атлант 50с101

Например, если переменная имеет целочисленный тип данных, то таким образом определен диапазон значений, которые могут быть сохранены в этой переменной (целые числа) и определены операции, которые могут быть применены к этой переменной (арифметические, логические, возможность ввода и вывода значений этой переменной). Каждый язык программирования поддерживает один или несколько типов данных. Наличие в языке программирования типизации означает жесткую связку операций и типов объектов, над которыми их можно выполнять. Не все языки обладают таким свойством. Например, в языке С практически любые операции можно выполнять над любыми данными (например, складывать два символа или число с логическим значением, но в большинстве случаев такие операции бессмысленны и соответствуют ошибке в программе, на которую компилятор указать не сможет).

Классификация типов данных

Любые данные могут быть отнесены к одному из двух типов: простому (основному), форма представления которого определяется архитектурой ЭВМ, или сложному, конструируемому пользователем для решения конкретных задач. Данные простого типа — это символы, числа и т.п. элементы, дальнейшее дробление которых не имеет смысла. Из таких элементарных данных формируются структуры (сложные типы) данных.

Принято различать следующие типы данных:

Рассмотрим перечисленные типы данных подробнее.

Простые типы

Числовые типы. Значениями переменных таких типов являются числа. К ним могут применяться обычные арифметические операции, операции сравнения (в результате получается логическое значение). Принципиально различны в компьютерном представлении целые и вещественные типы.

Целочисленные типы данных делятся, в свою очередь, на знаковые и беззнаковые. Целочисленные со знаком могут принимать как положительные, так и отрицательные значения, а беззнаковые — только неотрицательные значения. Диапазон значений при этом определяется количеством разрядов, отводимых на представление конкретного типа в памяти компьютера (см. “Представление чисел”).

Вещественные типы бывают: с фиксированной точкой, то есть хранятся знак и цифры целой и дробной частей (в настоящее время в языках программирования реализуются редко), и с плавающей точкой, то есть число приводится к виду m х 2 e , где m — мантисса, а e — порядок числа, причем 1/2 m 1, e — целое число. В данном случае хранятся знак, число e и двоичные цифры дробной части числа m, которые умещаются в отведенную для этого память. Говорят, что вещественные числа представимы с некоторой точностью.

Символьный тип. Элемент этого типа хранит один символ. При этом могут использоваться различные кодировки, которые определяют, какому коду (двоичному числу) какой символ (знак) соответствует. К значениям этого типа могут применяться операции сравнения (в результате получается логическое значение). Символы считаются упорядоченными согласно своим кодам (номерам в кодовой таблице).

Логический тип. Данные этого типа имеют два значения: истина (true) и ложь (false). К ним могут применяться логические операции. Используется в условных выражениях, операторах ветвления и циклах. В некоторых языках, например С, является подтипом числового типа, при этом ложь = 0, истина = 1 (или истинным считается любое значение, отличное от нуля).

Перечислимый тип. Отражает самый прямолинейный способ описания простого типа — перечисление всех значений, относящихся к этому типу. Каждая константа такого типа получает свой порядковый номер, что позволяет реализовать ряд простых операций над этим типом, таких, как получить следующее по порядку значение данного типа.

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

Указатель (тип данных). Если описанные выше типы данных представляли какие-либо объекты реального мира, то указатели представляют объекты компьютерного мира, то есть являются исключительно компьютерными терминами. Переменная-указатель хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — на другую переменную.

Составные типы

Составные типы формируются на основе комбинаций простых типов.

Массив является индексированным набором элементов одного типа, простого или составного (см. “Операции с массивами”). Одномерный массив предназначен для компьютерной реализации такой структуры, как вектор, двухмерный массив — таблицы.

Строковый тип. Хранит строку символов. Вообще говоря, может рассматриваться как массив символов, но иногда рассматривается в качестве простого типа. Часто используется для хранения фамилий людей, названий предметов и т.п. К элементам этого типа может применяться операция конкатенации (сложения) строк.

Обычно реализованы также операции сравнения над строками, в том числе операции “”, которые интерпретируются как сравнение строк согласно алфавитному порядку (алфавитом здесь является набор символов соответствующей кодовой таблицы). Во многих языках реализованы и специальные операции над строками: поиск заданного символа (подстроки), вставка символа, удаление символа, замена символа.

Запись. Наиболее общий метод получения составных типов из простых заключается в объединении элементов произвольных типов. Причем сами эти элементы могут быть, в свою очередь, составными. Так, человек описывается с помощью нескольких различных характеристик, таких, как имя, фамилия, дата рождения, пол, и т.д.

Записью (в языке С — структурой) называется набор различных элементов (полей записи), хранимый как единое целое. При этом возможен доступ к отдельным полям записи. К полю записи применимы те же операции, что и к базовому типу, к которому это поле относится (тип каждого поля указывается при описании записи).

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

Преимущества от использования типов данных

Типы данных защищают программы по крайней мере от следующих ошибок:

1. Некорректное присваивание. Пусть переменная объявлена как имеющая числовой тип. Тогда попытка присвоить ей символьное или какое-либо другое значение приведет к ошибке еще на этапе компиляции. Такого рода ошибки трудно отследить обычными средствами.

2. Некорректная операция. Типизация позволяет избежать попыток применения выражений вида “Hello world” + 1. Поскольку, как уже говорилось, все переменные в памяти хранятся как наборы битов, то при отсутствии типов подобная операция была выполнима (и могла дать результат вроде “Hello worle”!). С использованием типов такие ошибки отсекаются опять же на этапе компиляции.

3. Некорректная передача параметров в процедуры и функции (см. “Подпрограммы”). Если функция “синус” ожидает, что ей будет передан числовой аргумент, то передача ей в качестве параметра строки “Hello world” может иметь непредсказуемые последствия. При помощи контроля типов такие ошибки также отсекаются на этапе компиляции или приводят к ошибкам выполнения программы, если значения параметра вводятся с клавиатуры или файла.

Кроме того, типы данных позволяют программисту абстрагироваться от машинного представления информации в виде наборов нулей и единиц и строить программы, основываясь на знакомых понятиях, таких, как числа, множества, последовательности, и т.п. В конечном итоге это приводит к получению более надежных программ.

Методические программы

При изучении данной темы самое главное — разделить следующие понятия:

данные — тип данных — абстрактная структура данных — структура данных

Типом данныхпеременной называют множество значений, которые может принимать эта переменная, и множество операций, которые применимы к этим значениям.

Абстрактная структура данных (см. “Структуры данных”) — это некоторая математическая модель данных (см. выше), включающая различные операции, определенные в рамках этой модели. Для реализации абстрактной структуры в том или ином языке программирования используются структуры, которые представляют собой набор переменных, возможно различных типов данных, объединенных определенным образом. При этом одна и та же абстрактная структура данных может быть реализована через различные структуры языка программирования. Например, такая абстрактная структура данных, как список, может быть реализована с использованием массива, файла или списка динамических переменных. Примеры различных структур данных, реализующих абстрактную структуру граф, приведены в статье “Табличные модели” 2.

Читайте также:
Bmp какие программы открывают

Изучение конкретных типов данных производится в процессе рассмотрения определенного языка программирования в курсе информатики. При этом нельзя совсем не касаться таких вопросов, как представление определенного типа данных в памяти компьютера и диапазон значений, которые могут принимать переменные каждого из типов. Рассказывать стоит и о преобразованиях типов, как автоматических, выполняемых компилятором при анализе операции присваивания, например, вещественной переменной целочисленного выражения, так и производимых программистом, например, при переводе текстовой информации в числовую и т.д.

Изучение особенностей представления целых чисел (а именно этот тип данных встречается в учебных задачах по программированию чаще всего) полезно проиллюстрировать следующим примером.

Пример. С помощью программы на языке Borland Pascal вычислим значение n! (факториал числа n). Версия языка в данном случае указана потому, что ею определяется количество разрядов, отводимых на переменные определенного типа. В данном случае на переменные типа integer отводится 16 бит, что определяет диапазон значений этого знакового типа от –32 768 до 32 767.

var a,i,n: integer;

for i := 2 to n do

При запуске этой программы для n = 7, 8 и 10 мы получим 5040, –25 216 и 24 320 соответственно. Первое полученное значение является верным, второе (отрицательное) может натолкнуть программиста на мысль, что в результате арифметических действий произошел выход за границу диапазона значений типа, а вот третье число само по себе может показаться верным, хотя, конечно, это не так.

На этом примере можно показать, что правильный алгоритм решения задачи при неправильном выборе типов данных может привести к абсурдному результату. И при разработке программы одним из важных этапов является оценка возможных значений (в том числе промежуточных) используемых переменных и выбор подходящих типов данных.

Следует подчеркнуть, что для целого типа выход за диапазон значений не приводит к прерыванию работы процессора (компьютер выдает неверные результаты), а для вещественных чисел (переполнение порядка) — это аварийная ситуация (floating point error), которая не пройдет незамеченной.

Источник: xn—-7sbbfb7a7aej.xn--p1ai

Базовые конструкции алгоритмов. Типы данных: простые и структурированные

Метод структурной алгоритмизации является одним из системных методов разработки алгоритмов. Он основан на визуальном представлении алгоритмов в виде последовательностей управляющих структурных фрагментов.

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

Определение 1

Линейной называется конструкция алгоритма, реализованная в виде последовательности действий (шагов), причем каждое действие (шаг) выполняется только 1 раз, после каждого действия (шага) выполняется увеличение действия (шага) на 1 до тех пор, пока значение не станет больше конечного параметра алгоритма.

Сдай на права пока
учишься в ВУЗе
Вся теория в удобном приложении. Выбери инструктора и начни заниматься!

С помощью линейных алгоритмов представляют линейные процессы. Алгоритмы этого типа используют при описании обобщенного решения задач в виде последовательностей модулей.

Определение 2

Разветвляющейся (ветвящейся) называют алгоритмическую конструкцию, обеспечивающую выбор между 2 вариантами решений в зависимости от значений входных данных.

Ветвления бывают двух типов: неполное (если—то) и полное (если—то—иначе). С помощью полного ветвления можно организовать 2 ветви в алгоритме (то или иначе), каждая из которых приведет к общей точке их слияния, алгоритм будет выполняться независимо от того, по какому пути пошло решение. При наличии неполного ветвления предполагаются некоторые действия алгоритма лишь на одной ветви (то), поскольку вторая отсутствует, для одного из результатов проверки действия производить нет необходимости, управление сразу перейдет к точке слияния. Различают 4 базовые варианта структуры ветвления:

«Базовые конструкции алгоритмов. Типы данных: простые и структурированные»
Готовые курсовые работы и рефераты
Решение учебных вопросов в 2 клика
Помощь в написании учебной работы

  1. Неполное ветвление типа «если – то», при котором все действия будут выполняться истинности условия.
  2. Полное ветвление типа «если – то – иначе», при котором будут выполняться 2 действия в зависимости от истинности условия.
  3. Ветвление с выбором типа «то», при котором действие 1 будет выполняться при условии 1, действие 2 при условии 2 и т.д.
  4. Ветвление с выбором типа«иначе», при котором при условии 1 будет выполняться действие 1, при условии 2 действие 2 и т.д., а иначе будут выполняться все другие действия.

Определение 3

Циклической (или циклом) называется конструкция алгоритма, в которой некоторая группа идущих подряд действий (шагов) выполняется несколько раз в зависимости от условия задачи и входных данных.

Определение 4

Такую группу повторяющихся действий на каждом шагу цикла называют телом цикла.

В любой циклической конструкции содержатся элементы ветвящейся конструкции алгоритма.

  • цикл с параметром (арифметический цикл);
  • цикл с предусловием;
  • цикл с постусловием (последние два называют итерационными).

Арифметический цикл

В цикле данного типа число шагов однозначно определено правилом изменения параметра, задаваемом с помощью его начальных и конечных значений, а также шага его изменения. Т.е., на каждом шаге цикла значение параметра изменяется согласно шагу цикла, пока не достигнет значения, равного конечному значению параметра.

Цикл с предусловием

В данном цикле количество шагов заранее не определяется, оно зависит от входных данных. В этой циклической структуре сначала происходит проверка значения условного выражения (условия), стоящего перед выполнением очередного шага цикла. При истинном значении условного выражения будет исполняться тело цикла. После чего снова будет выполняться проверка условия. Эти действия будут повторяться до тех пор, пока значение условного выражения не станет ложным, тогда цикл завершится.

Особенностью данного типа цикла является то, что при изначальной ложности значения условного выражения тело цикла не будет выполняться совсем.

Цикл с постусловием

В данной циклической конструкции, как и в предыдущей, заранее не определяется число повторений тела цикла, оно будет зависеть от входных параметров. Отличительной чертой цикла с предусловием является то, что тело цикла с постусловием в любом случае будет выполнено хотя бы 1 раз и только после этого проверится условие. В данной конструкции тело цикла выполняется до тех пор, пока значение условного выражения будет ложным. Как только оно станет истинным, выполнение команд прекратится.

В реальных задачах, как правило, присутствует любое количество циклов.

Ниже приведены блок-схемы циклических алгоритмов.

Типы данных: простые и структурированные

К реальным данным, которые обрабатываются программой, относят целые и вещественные числа, логические величины и символы. Они относятся к простым типам данных и называются базовыми. Все обрабатываемые компьютером данные хранятся в его ячейках памяти, каждая из которых имеет свой адрес. В языках программирования существуют переменные, позволяющие не обращать внимание на адреса ячеек памяти и обращаться к ним с помощью имени (идентификатора).

Определение 5

Переменная представляет собой именованный объект (ячейку памяти), изменяющий свое значение.

Имя переменной указывает на значение, а адрес и способ ее хранения остаются скрытыми от про¬граммиста. Помимо имени и значения переменные имеют свой тип, помогающий опре¬делить какого типа информация находится в памяти.

Типом переменной задается:

  • используемый способ записи информации в ячейки памяти;
  • необходимый объем памяти для ее хранения.

Для каждого типа объем памяти определяется так, чтобы в него можно было поместить любое значение из допустимо¬го диапазона значений для данного типа.

Определение 6

Переменные, которые присутствуют в программе на протяжении всего периода ее работы, называются статическими.

Определение 7

Переменные, которые создаются и уничтожаются на разных этапах выполнения про¬граммы, называются динамическими.

Определение 8

Остальные данные, значения которых не изменяются на протяжении всего выполнения программы, называются константами или постоянными.

Константы также имеют тип. Их возможно ука¬зывать явно или с помощью идентификаторов.

Чтобы повысить производительность и качество работы нужно иметь данные, которые будут максимально приближены к реальным аналогам.

Определение 9

Тип данных, который позволяет хранить вместе под одним именем несколько переменных, называется структурированным.

Любой язык программирования имеет свои структурированные типы. Рассмотрим одну из таких структур — массив.

Определение 10

Массивом называют упорядоченную совокупность однотипных величин, которые имеют общее имя, порядковые номера у элементов (индексы).

Элементы массива хранятся в памяти компьютера по соседству в отличие от одиночных элементов. Массивы различают по количеству индексов элементов.

Одномерный массив характеризуется наличием у каждого элемента лишь одного индекса. Примерами одномерных массивов являются геометрическая и арифметическая последовательности, которые определяют конечные ряды чисел.

Определение 11

Количество элементов массива называется размерностью.

У одномерного массива его размерность записывают рядом с именем в круглых скобках.

Элементы одномерного массива вводятся поэлемен¬тно, в порядке, необходимом для решения конкретной задачи. При необходимости ввода всего массива элементы вводятся в порядке возрастания индексов.

Источник: spravochnick.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru