Элементарные структуры данных

Нужным условием хранения инфы в памяти компьютера является возможность преобразования этой самой инфы в подходящую для компьютера форму. В этом случае, если это условие производится, следует найти структуру, применимую конкретно для наличествующей инфы, ту, которая предоставит требующийся набор способностей работы с ней. Тут под структурой понимается метод представления инфы, средством которого совокупа Элементарные структуры данных раздельно взятых частей образует нечто единое, обусловленное их связью вместе. Скомпонованные по любым правилам и логически связанные межу собой, данные могут очень отлично обрабатываться, потому что общая для их структура предоставляет набор способностей управления ими – одно из того за счет чего достигаются высочайшие результаты в решениях Элементарные структуры данных тех либо других задач. Но не каждый объект представляем в случайной форме, а может быть и совсем для него имеется только один единственный способ интерпретации, как следует, бесспорным плюсом для программера будет познание всех имеющихся структур данных. Таким макаром, нередко приходиться делать выбор меж разными способами хранения инфы, и Элементарные структуры данных от такового выбора зависит работоспособность продукта[1].

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

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

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

Массивы

Массив – это структура данных с фиксированным и упорядоченным набором однотипных частей Элементарные структуры данных (компонент). Доступ к какому-либо из частей массива осуществляется по имени и номеру (индексу) этого элемента. Количество индексов определяет размерность массива. Так, к примеру, в большинстве случаев встречаются одномерные (вектора) и двумерные (матрицы) массивы. 1-ые имеют один индекс, 2-ые – два. Пусть одномерный массив именуется A, тогда для получения доступа Элементарные структуры данных к его i-ому элементу будет нужно указать заглавие массива и номер требуемого элемента: A[i]. Когда A – матрица, то она представляема в виде таблицы, доступ к элементам которой осуществляется по имени массива, также номерам строчки и столбца, на скрещении которых размещен элемент: A[i, j], где i – номер Элементарные структуры данных строчки, j – номер столбца[1].

В различных языках программирования работа с массивами может в чем либо различаться, но главные принципы, обычно, всюду одни. В языке Pascal, воззвание к одномерному и двумерному массиву происходит точно так, как это показано выше, а, к примеру, в C++ двумерный массив следует указывать так: A Элементарные структуры данных[i][j]. Элементы массива нумеруются попеременно. На то, с какого значения начинается нумерация, оказывает влияние язык программирования. В большинстве случаев этим значением является 0 либо 1.

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

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

Списки

Перечень – абстрактный тип данных, реализующий упорядоченный набор значений. Списки отличаются от массивов тем, что доступ к их элементам осуществляется поочередно, в то время как массивы – структура данных случайного доступа. Данный абстрактный тип имеет несколько реализаций в виде Элементарные структуры данных структур данных. Некие из их подвергнутся рассмотрению здесь[1].

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

Рис Элементарные структуры данных.2. Односвязный перечень

В односвязном перечне, приведенным выше, исходным элементом является Head list (голова перечня [произвольное наименование]), а все другое именуется хвостом. Хвост перечня составляют элементы, разбитые на две части: информационную (поле info) и указательную (поле next). В последнем элементе заместо указателя, содержится признак конца перечня – nil.

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

Рис.3. Двусвязный перечень

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

Для 2-ух видов списков, обрисованных выше существует подвид, именуемый кольцевым перечнем. Сделать из односвязного перечня кольцевой можно добавив всего только один указатель в последний элемент, так чтоб он ссылался на 1-ый. А для двусвязного будет Элементарные структуры данных нужно два указателя: на 1-ый и последний элементы.

Рис.4. Кольцевой перечень

Кроме рассмотренных видов списочных структур есть и другие методы организации данных по типу «список», но они, обычно, почти во всем идентичны с разобранными, потому тут они будут опущены.

Не считая различия по связям, списки делятся по Элементарные структуры данных способам работы с данными. О неких таких способах сказано дальше.

Абстрактный тип данных

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

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

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

Внедрение АТД имеет массу преимуществ:

1. Инкапсуляция деталей реализации.

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

2. Понижение трудности.

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

3. Ограничение области использования данных.

Используя АТД мы можем быть убеждены, что данные, представляющие внутреннюю структуру АТД не будут зависеть от Элементарные структуры данных других участков кода. При всем этом реализуется “независимость” АТД.

4. Высочайшая информативность интерфейса.

АТД позволяет представить весь интерфейс в определениях сущностей предметной области, что, согласитесь, увеличивает удобочитаемость и информативность интерфейса.

Очередь

Структура данных «Очередь» употребляет принцип организации FIFO (First In, First Out — «первым пришёл — первым вышел»). В неком смысле таковой способ Элементарные структуры данных более справедлив, чем тот, по которому работает стек, ведь обычное правило, лежащее в базе обычных очередей в разные магазины, поликлиники считается полностью справедливым, а конкретно оно является базисом этой структуры. Пусть данное наблюдение будет примером. Строго говоря, очередь – это перечень, добавление частей в который допустимо, только в его конец Элементарные структуры данных, а их извлечение выполняться с другой стороны, именуемой началом списка[2].

Рис.5. Очередь

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

Стек

Стек характерен тем, что получить доступ к его элементом можно только Элементарные структуры данных с 1-го конца, именуемого верхушкой стека, по другому говоря: стек – структура данных, функционирующая по принципу LIFO (last in — first out, «последним пришёл — первым вышел»). Изобразить эту структуру данных лучше в виде вертикального перечня, к примеру, стопки каких-то вещей, где чтоб пользоваться какой-то из них необходимо поднять все Элементарные структуры данных те вещи, что лежат выше нее, а положить предмет можно только на ввысь стопки.

В показанном односвязном перечне операции над элементами происходят строго с 1-го конца: для включения подходящего элемента в пятую по счету ячейку нужно исключить тот элемент, который занимает эту позицию. Если б было, к примеру Элементарные структуры данных, 6 частей, а воткнуть определенный элемент требовалось также в пятую ячейку, то исключить бы пришлось уже два элемента[2].

Рис.6. Стек

Рекурсия и деревья

Рекурсия относится к одному из базовых понятий в математических и компьютерных науках. В языках программирования рекурсивной программкой именуют программку, которая обращается к самой для себя (подобно тому, как в арифметике Элементарные структуры данных рекурсивной функцией именуют функцию, которая определена через понятия самой этой функции). Рекурсивная программка не может вызывать себя до бесконечности, так как в данном случае она никогда не закончилась бы (точно так же рекурсивная функция не может всегда определяться понятиями самой функции, так как тогда определение стало бы Элементарные структуры данных повторяющимся). Как следует, 2-ая принципиальная особенность рекурсивной программки — наличие условия окончания, позволяющего программке закончить вызывать себя (применительно к арифметике это условие, при выполнении которого функция перестает определяться понятиями самой этой функции). Все практические вычисления можно представить рекурсивными структурами[3].

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

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

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

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

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

Рекурсивный метод — это метод, решающий задачку методом решения Элементарные структуры данных 1-го либо нескольких более узеньких вариантов той же задачки. Для реализации рекурсивных алгоритмов в C++ употребляются рекурсивные функции — функции, которые вызывают самих себя. Рекурсивные функции в C++ соответствуют рекурсивным определениям математических функций. Исследование рекурсии начнем с исследования программ, которые конкретно вычисляют математические функции. Как будет показано, базисные Элементарные структуры данных механизмы можно расширить, что приведет к обобщенной парадигме программирования[3].


elementarnie-zakoni-izobiliya-22-glava.html
elementarnie-zakoni-izobiliya-4-glava.html
elementarnie-zakoni-izobiliya-9-glava.html