Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / ЛЕКЦИИ / Линейные структуры данных.DOC
Скачиваний:
48
Добавлен:
23.03.2015
Размер:
310.27 Кб
Скачать

Линейные структуры данных, их представление и реализация.

Линейная структура данных – это С.Д. совокупность элементов которой является линейно упорядоченной. Линейными С.Д. являются : 1)Последовательность 2)Эластичная лента 3)Линейные списки а)стек б)дек в)очередь г)приоритетная очередь 4)Строки. Можно дать более полное определение линейной структуре данных. Это множество состоящее из n>=0 узлов x1, x2, x3,,, xn структурные(топологические) свойства которого по сути ограничиваются лишь линейным(одномерным) относительным положением узлов. Т.е. если n>0, то x1 – первый узел ; если 1<k<n , то xk-1 , xk , xk+1 – порядок следования узлов, если к=n, то xn – последний узел. Приведем операции, которые можно выполнять над линейными С.Д. 1)Создать 2)Получить доступ к узлу 3)Включить новый узел 4)Исключить узел 5)Объединить две структуры в одну 6)Разбить структуру на две 7)Сделать копию 8)Определить кол-во узлов в списке 9)Выполнить сортировку узлов 10)Найти узел, удовлетворяющий заданному условию 11)Уничтожить. Особую роль играют операции 2),3),4). Именно с помощью их можно последовательно конструировать, изменять и обрабатывать списки. Важными представляются случаи когда к=1 и к=n, т.е. операции, выполняемые с первым и последним элементами структуры. Дело в том, что в таких структурах получение доступа к первому и последнему элементу выполняется значительно проще, чем к другим элементам. Существуют различные способы представления линейных С.Д. и в зависимости от конкретного набора операций, то или иное представление будет эффективным. Видимо не существует единственного метода представления таких структур, при котором все эти операции реализовались бы эффективно. Поэтому имеет смысл классифицировать типы линейных структур по главным операциям, которые сними выполняются. Особую группу представляют списки, в которых включение, исключение и доступ почти всегда производится в первом или последнем узлах. Рассмотрим эти часто используемые С.Д. 1)Стек – линейный список, в котором все включения и исключения делаются в одном конце списка 2)Очередь– линейный список, в котором все включения на одном конце, а исключения на другом. 3)Дек – очередь с двумя концами, включ. и исключ. на обеих концах 4)Архив – дек с ограниченным входом 5)Реестр – дек с ограниченным выходом. В математике все эти структуры называются очередями с различными дисциплинами обслуживания. Наиболее часто используются стек и очередь. Стек организован по принципу LIFO (Last-In-First-Out), очередь по принципу FIFO (First-In-First-Out). Очереди в широком понимании слова, играют важную роль в теории массового обслуживания, которая определяет поведение реальной системы методом моделирования на ЭВМ.

Теперь рассмотрим другие линейные структуры данных. Последовательность. Элементы последовательности в каждый момент времени разделены на две части – прочитанную и непрочитанную. Можно провести аналогию между последовательностью и файлом.

После создания посл. прочитанная и непрочитанная часть являются пустыми. При добавлении элемента в посл. он добавляется в конец. При этом непрочитанная часть увеличивается, а прочитанная не изменяется. Запись в последовательность идет только в конец.По операции “встать в начало посл.” (Reset) прочитанная часть делается пустой, а непрочитанная часть совпадает со всей посл. Непрочитанная часть ведет себя как очередь. Строки. Строки состоят из символов, которые нужно кодировать. Возможны коды: 1)Фиксированной длинны ДКОИ – 6 бит ; КОИ – 7 бит; ASCII – 8, бит. сейчас реализуется 16 битовый код, он кодирует 65536 символов. 2)Коды переменной длинны. Рассмотрим специальные операции для строк: 1)Конкатенация 2)Дописывание одного символа в конец строки 3)Поиск вхождения подстроки в строку 4)Сопоставление с образцом 5)Удаление подстроки 6)Вставка подстроки в строку 7)Контекстная замена. Представление строк. строки могут быть представлены разными способами. 1)Строки фиксированной длинны с указанием длинны(TP) 2)последовательность символов до первого встретившегося нуля(Си) 3)Хранение в виде списка посимвольно 4)Хранение в виде списка многосимвольных звеньев фиксированной длинны 5) - || - переменной длинны.

Линейные структуры данных.

1)Интуитивное понятие о реализуемой структуре данных.

2)Функциональное описание структуры данных.

(Спецификация): РОР (PUSH(S,X)) =S-аксиома.

3)Логическое описание.

Описываем в определенных ранее понятиях.

Новое понятие определяем через набор операций:

а) логическое описание структуры;

б) логическое описание операций над этой структурой;

(логическое описание на абстрактном уровне).

4)Физическое представление.

(Реализация операций над представителем).

Объединение, соединение, разделение вариантов.

Операции над линейной структурой данных

1)Создать(CREATE,INIT,…)

CREATE – для динамических структур;

INIT - для статических структур;

2)получить доступ к k-му элементу структуры с целью исследования или изменения этого элемента (селектор);

3)включить новый элемент непосредственно перед заданным (после);

4)исключить заданный элемент

Если 3) и 4) существуют, то структуру данных будем называть динамической;

5)объединить две структуры данных в одну (конкатенация строк)

6)разбить структуру на две;

7) сделать копию структуры данных;

8)определить количество элементов в структуре (операции наблюдателя);

9)сортировать элементы структуры данных в некотором порядке;

10)искать;

11)уничтожить структуру данных (деструктор);

(done,Dtstroy).

Виды линейных структур данных.

Стек (диверсивная память).

Очередь типа LIFO – lost-in-first-out.

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

выборка

хвост (tail)

000000 голова(head)

добавление

Очередь кольцевой буфер, циклическая память или очередь типа (FIFO).

Дек – двухвходовая очередь(Double-Ended-Quene).

.

000000

Разновидности дека:

дек с ограниченным входом – архив;

дек с ограниченным выходом – перечень или реестр.

Приоритетная очередь выборка производится с одного конца (головы), а включение в любое место – в зависимости от приоритета.

Дек:

Реализация стека.

СТЕК

1).Интуитивное понятие.

Операции:

  • пополнение стека; (PUSH)

  • просмотр верхнего элемента; (TOP)

  • уничтожение верхнего элемента; (POP)

  • проверка стека на пустоту; (IS EMPTY)

2,3)Логическое описание.

- верхушка

- тело стека=новый стек новая вершина

новое дно

тело

Тип стек_Т={непустой_ стек_T/пустой_ стек_T} рекурсивное

определение

непустой_ стек_T=(вершина;T;тело: стек_T ) стека

АЛГ. NEW: стек_Т;

new пустой_ стек_T

АЛГ. PUSH(S: стек_Т,t:T): стек_Т;

push стек_Т(непустой_ стек_T(t,s))

АЛГ. POP(S: стек_Т): стек_Т;

если S есть непустой стек_Т, то

pop тело (S),

иначе ошибка

АЛГ. SIZE(S:стек_Т): INT;

size если S есть пустой_ стек_T,то 0

иначе 1+size(тело(S))

АЛГ. IS EMPTY (S:стек_T):bool;

is empty S есть пустой_ стек_T

4.Физическое представление

Способы реализации объекта стек_T:

  1. ограниченная реализация на база вектора

А

дескриптор

rep REPresantation - представление

тело

В

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

Неявная связь: тело начинается сразу за дескриптором.

body const topint

rep

  1. 2 3 ……………..maxsize

дно

вершина дно const

C

2)неограниченный стек на базе списка

стек вершина

В ддддддддддд юll.юбю

тело вершина - представление

А

стека на базе списка

тело вершина

пустое тело

1 1 1 0

3)маленький стекиз 0 и 1 на базе слова

свободная

часть

Частный случай.

Д

стек А

стекВ

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

A: .

.

2

B: 1

Тип стек_Т=…

var A,B:стек_Т; (Статическая реализация)

INIT (A); INIT (B);

Для динамического регулирования стека:

а) дескриптор и тело выделяются статически;

б) дескриптор – статически, тело - динамически;

var A,B:стек_Т

С

А create(A,k1); - такие стеки тяжело

В create(B,k2); разделять через

k1 разные

куча ссылки

k2

в) выделять и тела, и дескрипторы динамически

create(A,k1); create(B,k2);

A1 A

A2 k1

B

k2

Замечание по поводу обработки ошибок.

1) Обнаружить ошибку и, непрерывая выполнение программы, известить пользователя с помощью сообщения об ошибке (напр.протокол ошибок).

2)Завести специальный параметр “Код завершения”. несовре-

При возникновении ошибки формировать специальное менное

значение кода завершения и обрабатывать его. решение

3)Использование исключительных ситуаций–современный способ

Типы ошибок при работе со стеком.

1-Overflow-переполнение стека.

2-Underflow-опустошение стека(натолкнулись на дно).

Неправильный анализ предметной области (ПО).

Логическая ошибка программиста.