Создание списков в языке Паскаль
Заказать уникальную курсовую работу- 37 37 страниц
- 20 + 20 источников
- Добавлена 28.04.2012
- Содержание
- Часть работы
- Список литературы
- Вопросы/Ответы
1.Типы данных в языке Паскаль
2.Списки
2.1Линейный однонаправленный ( односвязный ) список
2.2Линейные двунаправленные списки
3.Структуры данных: стеки, очереди, деревья
3.1 Стек
3.2 Очередь
3.3 Деревья
Заключение
Список литературы
Дерево поиска – это двоичное дерево, в котором выполняются следующие условия (см. рис.11): а) l(u) < l(v) для всех вершин u, v, если вершина u находится в поддереве, корень которого – левый преемник v; б) l(u) > l(v) для всех вершин u, v, если вершина u находится в поддереве, корень которого – правый преемник v; в) для всякого значения aS существует единственная вершина v, для которой l(v) = a (S – множество значений, допускающих сравнения).S TM ZNAXDРис.11Дерево поискаОпределение структуры дерева, данное выше, является рекурсивным и отражает рекурсивную природу самой структуры. Структуру данных – дерево можно представить как в статической, так и в динамической памяти. В динамической памяти дерево представляется иерархическим списком. Задать элемент двоичного дерева можно как элемент списка с тремя полями: два ссылочных поля, содержащие указатели на его левое ( L ) и правое ( R ) поддеревья, и информационное поле ( E ):Определение типа элемента бинарного динамического дерева:TypeU = ^btreebtree = Recordelem: btype; left,right: Uend;Здесь btype – тип информационного поля (если информационное поле имеет сложную структуру, то type может быть типом - указатель на объект, содержащий значение элемента дерева).Чтобы определить дерево как единую структуру, надо задать указатель на корень дерева:D: U;На рис.12 представлено двоичное динамическое дерево d в cсоответствии с определением типа элемента, сделанным выше. Элементы дерева со степенью 0 и 1 имеют два или одно ссылочное поле со значением равным пустому указателю (NIL). dРис.12 Динамическое бинарное деревоОбрабатывая дерево, приходится просматривать его элементы – эта операция называется обход дерева (или прохождение дерева).Обход дерева – это способ методичного исследования его узлов, при котором каждый узел проходится точно один раз. Полное прохождение динамического дерева дает линейную расстановку его узлов.Возможны два способа прохождения бинарного дерева (если дерево не пусто): а) в глубину:прямой (префиксный) порядок: корень, левое поддерево в прямом порядке, правое поддерево в прямом порядке (линейная расстановка узлов дерева, представленного на рис.10.б: ABDCEGFHJ ); - обратный (инфиксный) порядок: левое поддерево в обратном порядке, корень, правое поддерево в обратном порядке (линейная расстановка узлов дерева, представленного на рис.10.б: DBAEGCHFJ);концевой (постфиксный) порядок: левое поддерево в концевом порядке, правое поддерево в концевом порядке, корень (линейная расстановка узлов дерева, представленного на рис.10.б: DBGEHJFCA);б) в ширину: узлы дерева посещаются слева направо, уровень за уровнем вниз от корня (линейная расстановка узлов дерева, представленного на рис.10.б: ABCDEFGHJ).Основные операции при работе с деревьями:а) поиск элемента в дереве. Операция заключается в прохождении узлов дерева в одном из рассмотренных выше порядке. При прохождении дерева поиска достаточно пройти только то поддерево, которое возможно содержит искомый элемент;б) включение элемента в дерево. Операция заключается в добавлении листа (исключая сбалансированное дерево – включение элемента в сбалансированное дерево приводит, как правило, к его перестройке) в какое-то поддерево, если такого элемента нет в исходном дереве. При включении нового элемента в дерево поиска лист добавляется в то поддерево, в котором не нарушается отношение порядка;в) удаление элемента из дерева. Операция заключается в изменении связей между дочерними и родительскими, по отношению к удаляемому, элементами (исключая сбалансированное дерево – удаление элемента из сбалансированного дерева приводит, как правило, к его перестройке); здесь необходимо рассматривать три случая: удаление листа (см. рис.13.а), удаление элемента с одним потомком (см. рис.13.б), удаление элемента с двумя потомками (см. рис.13.в). При удалении элемента степени 2 из дерева поиска изменять связи необходимо так, чтобы не нарушалось установленное в дереве отношение порядка. Лучшим вариантом в этом случае будет перемещение на место удаляемого элемента либо самого правого листа из левого поддерева удаляемого элемента, либо самого левого листа из правого поддерева удаляемого элемента;xx x а б вРис.13. Операции с леревомг) сравнение деревьев (проверка деревьев на равенство). Операция заключается в прохождении обоих деревьев в одном порядке до тех пор, пока либо не будут пройдены оба дерева, либо одно из них, либо соответствующие элементы окажутся не равными, либо в одном из деревьев не будет обнаружено отсутствие соответствующего элемента. Только в случае равенства деревьев оба дерева будут пройдены одновременно;д) копирование дерева. Операция заключается в прохождении исходного дерева и построении нового дерева с элементами, информационные поля которых равны информационным полям соответствующих элементов исходного дерева.Чтобы ввести дерево надо выбрать какой-то способ перечисления его узлов. Одним из возможных способов является так называемая списочная запись (представление). Список – это конечная последовательность атомов либо списков, число которых, может быть и равно нулю (атом – это понятие, определяющее элемент из любого множества предметов). Используя скобки, список можно задать перечислением через запятую его атомов (порядок перечисления атомов определяет их упорядочение). Таким образом, дерево, представленное на рис.10.б можно записать в виде следующего списка:( A, ( B, ( D, 0, 0 ), 0 ), ( C, ( E, 0, ( G, 0,0 ) ), ( F, ( H, 0, 0 ), ( I, 0, 0 ) )))ЗаключениеВ версиях Турбо-Паскаля, работающих под операционной системой MS DOS, под данные одной программы выделяется 64 килобайта памяти (или, если быть точнее, 65520 байт). Это и есть статическая область памяти. При необходимости работать с большими массивами информации этого может оказаться мало. Размер динамической памяти — много больше (сотни килобайт). Поэтому использование динамической памяти позволяет существенно увеличить объем обрабатываемой информации.Приведем основные отличия между статическими и динамическими структурами данных.Статическая структура данных:имеет идентификатор, по которому можно к ней обратиться; память выделяется в процессе трансляции;количество элементов такой структуры ограничено и определяется в момент описания;размерность структуры, т.е. количество ее элементов, не может быть изменено в процессе выполнения программы.Динамическая структура данных:не имеет идентификатора, а обращение происходит с помощью указателя;память выделяется в процессе выполнения программы;можно не фиксировать количество элементов структуры;можно менять размерность структуры в процессе выполнения программы;структурные взаимосвязи (связь между элементами) может меняться в процессе выполнения программы. Основным недостатком динамической памяти по сравнению с статической является проигрыш во времени при обращении к величине, так как этот процесс разбит на два шага: сначала ищется указатель, затем по нему — величина.Таким образом, выигрыш в возможностях и памяти приводит к проигрышу во времени динамической структуры данных по сравнению с статической.Использование динамических массивов в качестве динамических величин не всегда возможно и целесообразно. Приведем основные недостатки такой структуры данных:нет возможности менять просто и быстро удалять элементы из массива или добавлять новые;при выделении памяти необходимо указывать число элементов, которое точно хватит для данных целей;не учитываются характерные структуры данных для реализуемой задачи.Для решения этих недостатков используются более гибкие структуры, основанные на списках [3, c27].Для решения первых двух недостатков наибольшей популярностью и простотой пользуются линейные динамические списки. Количество связанностей выбирается в зависимости от специфики задачи.Более сложные структуры, учитывающие структуру данных задачи, позволяют строить более эффективные и наглядные алгоритмы. Так, например, стек используется в методах трансляции для перевода выражений из стандартной формы записи в постфиксную или инфиксную форму (в зависимости от реализации). Такие структуры данных как очередь широко применяется в теории массового обслуживания, которая целиком и полностью построена на понятии очереди. Так же очереди применяются и в нашей повседневной жизни (во многих учреждениях появились электронные очереди, которые реализуются с помощью такой структуры данных). Также применяются и более сложные структуры: деревья, хештаблицы и пр. Преимущество линейных структур. В линейных структурах элементы данных располагаются последовательно, друг за другом. Между соседними элементами данных существует отношение непосредственного предшествования. С каждым элементом данных непосредственно или косвенно сопоставляется его порядковый номер в наборе данных, определяющий его адрес, по которому в свою очередь элемент данных При применении структуры данных иерархического характера (бинарные деревья, хеш-таблицы с неограниченным числом элементов по одному ключу и т.п.) имеют недостатки. Основным недостатком иерархических структур данных является увеличенный размер пути доступа. Очень часто бывает так, что длина маршрута оказывается больше, чем длина самих данных, к которым он ведет. Поэтому в информатике применяют методы для регуляризации иерархических структур с тем, чтобы сделать путь доступа компактным.Несмотря на многочисленные удобства, у простых структур данных есть и недостаток – их трудно обновлять.Иерархические структуры данных по форме сложнее, чем линейные и табличные, но они не создают проблем с обновлением данных. Их легко развивать путем создания новых уровней. Даже если в учебном заведении будет создан новый факультет, это никак не отразится на пути доступа к сведениям об учащихся прочих факультетов.Недостатком иерархических структур является относительная трудоемкость записи адреса элемента данных и сложность упорядочения. Часто методы упорядочения в таких структурах основывают на предварительной индексации,которая заключается в том, что каждому элементу данных присваивается свой уникальный индекс, который можно использовать при поиске, сортировке и т.п.Список литературыРусскоязычные источникиБондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. — Харьков: Фолио, Ростов н/Д: Феникс, 1997. — 368 с. Гагарина Л. Г., Колдаев В. Д. Алгоритмы и структуры данных:— Москва, Финансы и статистика, Инфра-М, 2009 г.- 304 с.Данчула А.Н.Информатика: Учебник / Под общ. ред. – М.: Изд-во РАГС, 2004.Культин Н. Программирование в Turbo Pascal 7.0 и Delphi (+ CD-ROM):— Москва, БХВ-Петербург, 2007 г.- 390 с.Культин Н. Turbo Pascal в задачах и примерах:— Санкт-Петербург, БХВ-Петербург, 2006 г.- 256 с.Лавров С. Программирование. Математические основы, средства, теория. – СПб.: БХВ-Петербург, 2001. – 320 с.Марченко А. И., Марченко Л. А. Программирование в среде Turbo Pascal 7.0. Базовый курс: — Москва, Век +, 2004 г.- 464 с.МеженныйО. А. Turbo Pascal. Самоучитель:— Санкт-Петербург, Вильямс, Диалектика, 2008 г.- 336 с. Окулов С.М. Основы программирования. — М.: ЮНИМЕДИАСТАЙЛ, 2002. — 424 с. Павловская Т.А., Щупак Ю.А. C/C++. Структурное и объектно-ориентированное программирование. Практикум: — Москва, Питер, 2010 г.- 352 с.Попов В. Б. Turbo Pascal для школьников:— Москва, Финансы и статистика, Инфра-М, 2010 г.- 352 с. Потопахин В. Turbo Pascal. Освой на примерах: — Санкт-Петербург, БХВ-Петербург, 2005 г.- 240 с. Рапаков Г. Г., Ружецкая С. Ю. Turbo Pascal для студентов и школьников:— Санкт-Петербург, БХВ-Петербург, 2007 г.- 352 с. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования: Учебник для сред. проф. образования — М.: Издательский центр "Академия", 2008. — 400 с.Симонович С.В. и др. Информатика: Базовый курс:– СПб.: Питер, 2003.Иностранные источникиАльфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман. Структуры данных и алгоритмы: — Москва, Вильямс, 2010 г.- 400 с.Вирт Н. Алгоритмы и структуры данных. – СПб.: Невский Диалект, 2001. – 352 с.Кнут Д. Искусство программирования. Том1. М.: Издательский дом «Вильямс», 2000. – 720с.Эллиот Б. Коффман Turbo Pascal:— Санкт-Петербург, Вильямс, 2005 г.- 896 с.Электронные источники:http://comp-science.narod.ru
1.Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. — Харьков: Фолио, Ростов н/Д: Феникс, 1997. — 368 с.
2.Гагарина Л. Г., Колдаев В. Д. Алгоритмы и структуры данных:— Москва, Финансы и статистика, Инфра-М, 2009 г.- 304 с.
3.Данчула А.Н. Информатика: Учебник / Под общ. ред. – М.: Изд-во РАГС, 2004.
4.Культин Н. Программирование в Turbo Pascal 7.0 и Delphi (+ CD-ROM):— Москва, БХВ-Петербург, 2007 г.- 390 с.
5.Культин Н. Turbo Pascal в задачах и примерах:— Санкт-Петербург, БХВ-Петербург, 2006 г.- 256 с.
6.Лавров С. Программирование. Математические основы, средства, теория. – СПб.: БХВ-Петербург, 2001. – 320 с.
7.Марченко А. И., Марченко Л. А. Программирование в среде Turbo Pascal 7.0. Базовый курс: — Москва, Век +, 2004 г.- 464 с.
8.Меженный О. А. Turbo Pascal. Самоучитель:— Санкт-Петербург, Вильямс, Диалектика, 2008 г.- 336 с.
9.Окулов С.М. Основы программирования. — М.: ЮНИМЕДИАСТАЙЛ, 2002. — 424 с.
10. Павловская Т.А., Щупак Ю.А. C/C++. Структурное и объектно-ориентированное программирование. Практикум: — Москва, Питер, 2010 г.- 352 с.
11. Попов В. Б. Turbo Pascal для школьников:— Москва, Финансы и статистика, Инфра-М, 2010 г.- 352 с.
12. Потопахин В. Turbo Pascal. Освой на примерах: — Санкт-Петербург, БХВ-Петербург, 2005 г.- 240 с.
13. Рапаков Г. Г., Ружецкая С. Ю. Turbo Pascal для студентов и школьников:— Санкт-Петербург, БХВ-Петербург, 2007 г.- 352 с.
14. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования: Учебник для сред. проф. образования — М.: Издательский центр "Академия", 2008. — 400 с.
15. Симонович С.В. и др. Информатика: Базовый курс:– СПб.: Питер, 2003.
Иностранные источники
16. Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман. Структуры данных и алгоритмы: — Москва, Вильямс, 2010 г.- 400 с.
17. Вирт Н. Алгоритмы и структуры данных. – СПб.: Невский Диалект, 2001. – 352 с.
18. Кнут Д. Искусство программирования. Том1. М.: Издательский дом «Вильямс», 2000. – 720с.
19. Эллиот Б. Коффман Turbo Pascal:— Санкт-Петербург, Вильямс, 2005 г.- 896 с.
Электронные источники:
20. http://comp-science.narod.ru
Вопрос-ответ:
Какие типы данных используются в языке Паскаль?
В языке Паскаль используются различные типы данных, например: целые числа (integer), действительные числа (real), символы (char), строки (string), булевы значения (boolean) и т.д.
Что такое линейный однонаправленный односвязный список?
Линейный однонаправленный односвязный список представляет собой структуру данных, состоящую из узлов, каждый из которых содержит значение и ссылку на следующий узел. Последний узел списка указывает на нулевую ссылку, что обозначает конец списка. Доступ к элементам списка осуществляется последовательно, начиная с первого узла.
Что такое линейные двунаправленные списки?
Линейные двунаправленные списки - это структуры данных, похожие на линейные однонаправленные списки, но с той разницей, что каждый узел списка содержит две ссылки: одну на следующий узел и одну на предыдущий узел. Это позволяет эффективно перемещаться как вперед, так и назад по списку.
Что такое стек?
Стек - это структура данных, которая работает по принципу "последним пришел, первым ушел" (Last-In-First-Out, LIFO). Это означает, что последний элемент, добавленный в стек, будет первым, который будет удален. Операции, которые можно выполнять со стеком, включают добавление элемента на вершину (push) и удаление элемента с вершины (pop).
Что такое дерево поиска в контексте структур данных?
Дерево поиска - это особый вид двоичного дерева, в котором каждый узел имеет значение и двух потомков: левого и правого. Значение в левом потомке должно быть меньше значения текущего узла, а значение в правом потомке должно быть больше. Это свойство позволяет эффективно выполнять операции поиска элемента в дереве.
Какие типы данных используются в языке Паскаль?
В языке Паскаль используются различные типы данных, такие как целые числа (integer), дробные числа (real), символы (char), строки (string), логические значения (boolean), а также пользовательские типы данных, которые можно определить с помощью ключевых слов type и record.
Что такое линейный однонаправленный односвязный список?
Линейный однонаправленный односвязный список - это структура данных, состоящая из узлов, каждый из которых содержит информацию и ссылку на следующий узел. В таком списке можно перемещаться только в одном направлении - от начала списка к его концу. Крайний узел списка ссылается на nil (пустую ссылку), что означает его конец.
Что такое линейные двунаправленные списки?
Линейные двунаправленные списки - это структура данных, состоящая из узлов, каждый из которых содержит информацию и две ссылки: на предыдущий и следующий узлы. Таким образом, в таком списке можно перемещаться как вперед, так и назад. Отдельно обрабатываются случаи первого и последнего узлов, которые имеют только одну ссылку.
Что такое стек?
Стек - это структура данных, работающая по принципу "последний вошел, первый вышел" (Last-In-First-Out, LIFO). Это означает, что элементы добавляются и удаляются только с одного конца - верхнего. В верхней части стека всегда находится текущий элемент, к которому можно получить доступ или удалить его. Операции со стеком включают добавление элемента на вершину (push) и удаление элемента с вершины (pop).
Что такое дерево поиска?
Дерево поиска - это двоичное дерево, в котором выполняются определенные условия. Каждый узел этого дерева содержит значение и две ссылки на потомков - левого и правого. Все значения в левом поддереве меньше значения корня, а в правом - больше. Это позволяет эффективно хранить и искать элементы, так как при поиске можно исключать половину оставшихся элементов на каждом шаге.