![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Компьютеры, Программирование
Программирование, Базы данных
Структуры данных: бинарное упорядоченное несбалансированное дерево |
Казанский Государственный Технический Университет им. А. Н. Туполева Курсовая работа по программированию на тему Структуры данных: бинарное упорядоченное несбалансированное дерево Выполнил: Зверев И. М. Проверил: Рахматуллин А. И. Казань 2003 План работы: Постановка задачи Описание программы Код программы на языках Pascal и С Постановка задачи Требуется написать программу, реализующую основные операции работы с деревом. Причём, обязательным условием является использование структуры данных класс для описания дерева и методов работы с ним. Описание программы Описание ведётся для кода на Pascalе, отличия для С будут указаны ниже. В программе основным элементом является класс ree. Его методы – это основные процедуры работы с деревом: Crea e – конструктор класса – процедура, создающая дерево, Add – метод добавления элемента в дерево, Del – метод удаления элемента из дерева, View – метод вывода элементов дерева на экран, Exis – метод проверки существования элемента с некоторым ключом, по сути поиск элемента, Des roy – деструктор класса – процедура, удаляющая дерево. Рассмотрим алгоритмы работы процедур. Crea e – создание дерева. Присваивает полю Roo (корень) значение il – указателя, который никуда не указывает. Add – добавление элемента в дерево. Для построения дерева используем следующий алгоритм. Первый элемент помещаем в корень (инициализируем дерево). Далее поступаем следующим образом. Если добавляемый в дерево элемент имеет ключ больший, чем ключ узла, то, если узел не лист, обходим его справа. Если добавляемый элемент имеет ключ не больший чем ключ узла, то, если узел не лист, обходим его слева. Если дошли до листа, то добавляем элемент соответственно справа или слева. Del – удаление элемента из дерева. Удаление узла довольно просто если он является листом или имеет одного потомка. Например, если требуется удалить узел с ключом М надо просто заменить правую ссылку узла К на указатель на L. Трудность заключается в удалении узла с двумя потомками, поскольку мы не можем указать одним указателем на два направления. Например, если просто удалить узел с ключом , то левый указатель узла с ключом Т должен указывать одновременно на К и R что не возможно. В этом случае удаляемый узел нужно заменить на другой узел из дерева. Возникает вопрос, каким же узлом его заменить? Этот узел должен обладать двумя свойствами: во-первых, он должен иметь не более одного потомка; во-вторых, для сохранения упорядоченности ключей, он должен иметь ключ либо не меньший, чем любой ключ левого поддерева удаляемого узла, либо не больший, чем любой ключ правого поддерева удаляемого узла. Таким свойствам обладают два узла, самый правый узел левого поддерева удаляемого узла и самый левый узел его правого поддерева. Любым из этих узлов им можно заменить удаляемый узел. Например, на рисунке это узлы М и Р. Необходимо различать три случая: Узла с ключем, равным х, нет. Узел с ключем, равным х, имеет не более одного потомка. Узел с ключем, равным х, имеет двух потомков Вспомогательная рекурсивная процедура del вызывается только в случае, когда удаляемый узел имеет двух потомков.
Она “спускается вдоль” самой правой ветви левого поддерева удаляемого узла q^ (при вызове процедуры ей передается в качестве параметра указатель на левое поддерево) и, затем, заменяет существенную информацию (в нашем случае ключ da a) в q^ соответствующим значением самого правого узла r^ этого левого поддерева, после чего от r^ можно освободиться. View - печать дерева, обходя его справа налево. Чем дальше элемент от корня, тем больше ему будет предшествовать пробелов, т. о. путём несложного алгоритма получается вполне удобно читаемое дерево. Exis – проверка существования элемента с заданным ключом. Ищем элемент, двигаясь от корня и переходя на левое или правое поддерево каждого узла в зависимости от его ключа. Des roy – удаление дерева. Обходя дерево слева направо, удаляет элементы. Сначала удаляются потомки узла, затем сам узел. Различия между описаниями кодов программах на разных языках относятся в основном к конструкторам и деструкторам. В .pas программах они определяются директивами и вызываются явно как методы класса из программы, а в .cpp конструктор вызывается при создании элемента класса и деструктор автоматически при выходе из программы (для чего объект класса размещается в памяти динамически). Код программы program P ree;{$APP YPE CO SOLE} ype I fo = By e; PI em = ^I em; I em = record Key: I fo; Lef , Righ : PI em; e d; ree = class priva e Roo : PI em; public co s ruc or Crea e; procedure Add(Key: I fo); procedure Del(Key: I fo); procedure View; procedure Exis (Key: I fo); des ruc or Des roy; override; e d; co s ruc or ree.Crea e; begi Roo := il; e d; procedure ree.Add(Key: I fo); procedure I i ree(var P: PI em; X: I fo); //создание корня дерева begi ew(P); P^.Key :=X; P^.Lef := il; P^.Righ := il; e d; procedure I Lef (var P: PI em; X : I fo); //добавление узла слева var R : PI em; begi ew(R); R^.Key := X; R^.Lef := il; R^.Righ := il; P^.Lef := R; e d; procedure I Righ (var P: PI em; X : I fo); //добавить узел справа var R : PI em; begi ew(R); R^.Key := X; R^.Lef := il; R^.Righ := il; P^.Righ := R; e d; procedure ree Add (P: PI em; X : I fo); var OK: Boolea ; begi OK := false; while o OK do begi if X > P^.Key he //посмотреть направо if P^.Righ il //правый узел не il he P := P^.Righ //обход справа else begi //правый узел - лист и надо добавить к нему элемент I Righ (P, X); //и конец OK := rue; e d else //посмотреть налево if P^.Lef il //левый узел не il he P := P^.Lef //обход слева else begi //левый узел -лист и надо добавить к нему элемент I Lef (P, X); //и конец OK := rue e d; e d; //цикла while e d;begi if Roo = il he I i ree(Roo , Key) else ree Add(Roo , Key); e d; procedure ree.Del(Key: I fo); procedure Dele e (var P: PI em; X: I fo); var Q: PI em; procedure Del(var R: PI em); //процедура удаляет узел имеющий двух потомков, заменяя его на самый правый //узел левого поддерева begi if R^.Righ il he //обойти дерево справа Del(R^.Righ ) else begi //дошли до самого правого узла //заменить этим узлом удаляемый Q^.Key := R^.Key; Q := R; R := R^.Lef ; e d; e d; //Del begi //Dele e if P il he //искать удаляемый узел if X < P^.K
занский Государственный Технический Университет им. А. Н. Туполева Курсовая работа по программированию на тему Структуры данных: бинарное упорядоченное несбалансированное дерево Выполнил: Зверев И. М. Проверил: Рахматуллин А. И. Казань 2003 План работы: Постановка задачи Описание программы Код программы на языках Pascal и С Постановка задачи Требуется написать программу, реализующую основные операции работы с деревом. Причём, обязательным условием является использование структуры данных класс для описания дерева и методов работы с ним. Описание программы Описание ведётся для кода на Pascalе, отличия для С будут указаны ниже. В программе основным элементом является класс ree. Его методы – это основные процедуры работы с деревом: Crea e – конструктор класса – процедура, создающая дерево, Add – метод добавления элемента в дерево, Del – метод удаления элемента из дерева, View – метод вывода элементов дерева на экран, Exis – метод проверки существования элемента с некоторым ключом, по сути поиск элемента, Des roy – деструктор класса – процедура, удаляющая дерево. Рассмотрим алгоритмы работы процедур. Crea e – создание дерева. Присваивает полю Roo (корень) значение il – указателя, который никуда не указывает. Add – добавление элемента в дерево. Для построения дерева используем следующий алгоритм. Первый элемент помещаем в корень (инициализируем дерево). Далее поступаем следующим образом. Если добавляемый в дерево элемент имеет ключ больший, чем ключ узла, то, если узел не лист, обходим его справа. Если добавляемый элемент имеет ключ не больший чем ключ узла, то, если узел не лист, обходим его слева. Если дошли до листа, то добавляем элемент соответственно справа или слева. Del – удаление элемента из дерева. Удаление узла довольно просто если он является листом или имеет одного потомка. Например, если требуется удалить узел с ключом М надо просто заменить правую ссылку узла К на указатель на L. Трудность заключается в удалении узла с двумя потомками, поскольку мы не можем указать одним указателем на два направления. Например, если просто удалить узел с ключом , то левый указатель узла с ключом Т должен указывать одновременно на К и R что не возможно. В этом случае удаляемый узел нужно заменить на другой узел из дерева. Возникает вопрос, каким же узлом его заменить? Этот узел должен обладать двумя свойствами: во-первых, он должен иметь не более одного потомка; во-вторых, для сохранения упорядоченности ключей, он должен иметь ключ либо не меньший, чем любой ключ левого поддерева удаляемого узла, либо не больший, чем любой ключ правого поддерева удаляемого узла. Таким свойствам обладают два узла, самый правый узел левого поддерева удаляемого узла и самый левый узел его правого поддерева. Любым из этих узлов им можно заменить удаляемый узел. Например, на рисунке это узлы М и Р. Необходимо различать три случая: Узла с ключем, равным х, нет. Узел с ключем, равным х, имеет не более одного потомка. Узел с ключем, равным х, имеет двух потомков Вспомогательная рекурсивная процедура del вызывается только в случае, когда удаляемый узел имеет двух потомков.
Иного рода ошибку допускают, на наш взгляд, ученые, стремящиеся превратить "бинарную" структуру действия в "триаду", выделив наряду с субъектом и объектом некое отличное от них средство деятельности, при помощи которого субъект передает свое целенаправленное воздействие на объект. О чем конкретно идет речь? Представим себе человека, который вопреки всем медицинским рекомендациям разгрызает зубами фецкий орех. Анализируя структуру данного действия, мы признаем человека субъектом, а орех - объектом, на который направлены его усилия. Трудно будет переоценить степень нашего удивления, если кто-нибудь спросит нас о месте, которое занимают в данном действии... зубы, с помощью которых передается воздействие субъекта на объект. В самом деле, выше мы признали социального субъекта предметным существом, обладающим - в отличие от гносеологического или психологического субъекта - "телесной" организацией. Поэтому представляется вполне логичным отнести человеческие зубы к субъектной стороне действия, признав их компонентом субстратной организации человека, естественной частью его органического тела
1. Конструкции из дерева и пластмасс. Жилое здание из дерева в г.Купянск
2. Насекомые лиственных пород деревьев
4. Дерево непосредственных составляющих
5. Задача остовных деревьев в k–связном графе
9. Аралия маньчжурская (шип-дерево)
10. Бинарная структура Солнечной системы
11. Дерево непосредственных составляющих
12. Экологические проблемы лесного сектора России: породы деревьев, экосистемы, территории
14. Построение дерева решений проекта
15. Методика количественного анализа безопасности с помощью дерева отказов
16. Дерево
17. Азимина, или Банановое дерево
19. Полынь – божье дерево и полынь-эстрагон
21. Экспертная система по породам дерева
25. Огнестойкость конструкций из дерева и полимеров
26. Насекомые-вредители плодовых деревьев Астраханской области
27. Виды сорных растений. Обрезка плодовых деревьев и винограда. Типы удобрений
28. Плодово-ягодные деревья в ландшафтном дизайне
30. Компрессия информации и упорядочение дерева по алгоритму Виттера
31. Определение связанного множества пикселей на бинарном изображении
32. Работа с полноцветными, полутоновыми и бинарными изображениями
33. Структура данных программного комплекса "Q-дерево"
34. Резьба по дереву
36. Деревья и их свойства (частный вид графов)
37. Свойства бинарных отношений
41. Конструкции из дерева и пластмасс
42. Проектирование конструкций из дерева и пластмасс плавательного бассейна
43. Живые свидетели истории - мемориальные деревья
44. История и охрана деревьев Крыма
45. Резьба и роспись по дереву у башкир
47. Экономическая сказка-реферат "НДС - вражья морда" или просто "Сказка про НДС"
48. Несколько рефератов по культурологии
49. Реферат по научной монографии А.Н. Троицкого «Александр I и Наполеон» Москва, «Высшая школа»1994 г.
50. Субъект преступления ("подновлённая" версия реферата 6762)
51. Психология труда (Обзорный реферат по психологии труда)
52. "Русский Тарзан" (реферат о российском пловце Александре Попове)
53. Реферат по статье П. Вайнгартнера «Сходство и различие между научной и религиозной верой»
57. Реферат по биографии Виктора Гюго
58. Реферат - Физиология (Транспорт веществ через биологические мембраны)
59. США и Канада в АТР: набор рефератов
60. Как написать хороший реферат?
61. Сборник рефератов о конфликтах
62. Реферат кондитерское изделие
63. Реферат по статье Гадамера Неспособность к разговору
64. Реферат Евро
65. Реферат о прочитаной на немецком языке литературы