Главная » Просмотр файлов » Искусство программирования на Си

Искусство программирования на Си (984073), страница 36

Файл №984073 Искусство программирования на Си (Искусство программирования на Си) 36 страницаИскусство программирования на Си (984073) страница 362015-07-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 36)

Было бы неразумно ставить в ссКеаи1( = ОКООК КИРЕУГ Ье(ьоаг(ЬНОН САКЕ) = «0)1 ) редину автовоза автомобили, перевозимые на короткие САК К(ОЬЕСаг(КНОИ САКЕ) = (О); расстояния! Было бы идеально, если бы все автомобн- САК *Сап; гееигв Кеаи1г) ли, перевозимые на дальние расстояния, стояли в серелине автовоза, а по краям стояли автомобили, псрево(пв Удаление элементов иэ конца дека Симметрия дека, опять-хаки, в исходном коде для уда- томобили как с одной, так и с другой стороны лгог) с (ог(г = 0; г < ЬНОН САКЕ; г++) пения элемента из конца дека очень хорошо видна. Вот заезжать на него или съсз:кать только поочередно. Мож- ( Лрпсспне арстримпнне си~руин~урн пианин Глава 11 Часть [! ) рг1пгс( Ва, Ьоипб гог Ъв, аббеб аг Ьасх.тп Н)дьгсаг[1].ведвивЬег, С)гу[Н)дьгсаг[г].оевС1паггоп]); Организации данама Притч адлвралвлва ллархктррцдаанцл ! Глава !! ! рига("Сгипсь! 1пвигггсгепг вевогу.")! тельно ли эти данные необходимо убрать.

Это нсобяза- от боковых путей тем, что имеют точки пересечения с ехгС(ЕХТТ РД1ЬОНЕ)! тельно, если зарансс известно, что данные будут ула- другими главными путями, представляют собой двуляться независимо от их содержания. В этом случае мы связныс списки. Дажс поворотная платформа может псредаем в функцию [уейиейешочеггошргоп! или быть классически описана как циклический список. [)едиейеточеггошВасй алрес объекта слютвстствуюшс- И конечно жс, если требуется, можно создавать массиго размера.

Однако, если используются объекты смс- вы всех этих структур данных. ) шанных типов, то потребуется взглянуть наланные хотя Таким образом, используя комбинацию большого бы для того, чтобы определить, данные какого типа чиста структур данных различных типов можно создать рг1пгт( Окау, че'ге оп оиг чау Со Ъв!1п", С1гу[0))! находятся на ланном конце дека.

соответствующий уровень сложности, необходимый лля 1ог(1 О! решения какой бы то ни было задачи, стояшей перед Оедиесиипс(ьтгапьрогсег) > 0 ьь 1 < нвм с1т1ев! РмвзНОРОДНЬ[Е СтРУОРУРЬ[ И 06ЬЕКТНЬ[Е нами в ланное воема. это не значит, что можно было з++ ) бы легко написать программу моделирования сортиро( деревья вочной станции. Но можно немного облегчить себс рига("Оееб1е-бее-ОЕЕ, Оееб1е-бее-ОАВ..."); рггпгу('Охау, че'че агггчеб аг Сп.тп", Слгу[л)); жизнь.

взбивая задач на ешаемые подзадачи, а затем соответствующим образом объелиняя вместе решения Всю нашу жизнь нельзя аккуратно разложить по массисаг = Оедиеоесоасауговугопс(ьтгапарогсег, ноьь, воьь); вам, циклическим спискам или стекам. Однако если этих подзадач. В этом и заключается суть программигу(Саг == НОЬЬ) использовать классические структуры данных в комбирования. ( нации друг с другом, то можно осуществить моделирориса(-че пеев со ьаче тип оис ог сага,"); ванне реальных объектов на соответствуюшем уровне РЕЗЮМЕ чвчтГе в этой глдвв ° Анализ алгоритмов поиска ° Двоичные деревья ° Сбалансированные двоичные деревья Поиск ио Ввоивиаиу дереву Глава 12 П оиск по двоичному дереву случае мы знаем, что искомый элемент находится во Проще воспользоваться массивом, поскольку в массиве второй части списка, если он вообще сеть в списке.

легко получить доступ к любому элементу. При использовании такого алгоритма за один этап Массивы удобны для проведения двоичного поиск, мы сократили объем поиска в 2 раза. Дальнейший по- если нет необходимости в добавлении и удалении элеиск можно проводить с помощью этого же алгоритма. ментов. Если такая необходимость есть, то лля массива С к:седым шагом мы все больше приближасмся к иско- это будет проблемой, поскольку вставка или удаление мому элементу, уменьшая на каждом этапе количество элемента в середине массива означает, что все последу- сравниваемых элементов в списке примерно власе.

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

Точно так же элементы не могут быть удалены из сере- В качестве примера рассмотрим игру "Угадай число". дины списка без образования "дыр". В этой игре игрок загадывает число, скажем, межлу! н Следовательно, ни массив, нн связанный список не 15, а компьютер пьпается его угадать. После каждой полходят для реализации структуры данных, предназпопытки компьютера игрок говорит, соответствует лн наченных для двоичного поиска, если есть необходнотвш колспьютера загаланному, а если нет, то уточня- мость во вставке н удалении элементов. Требуется ноет, больше или меньше загаданного выданное компью- вая структура данных, которая называется двоиюсмм Даже если у вас не очень большой опыт программиро- ложены случайным образом, то скорость линеиного тером число.

деревом Ортииэояил даниил lгоисл пи а«галлаях Лсреву 1 1 Часть 1( Глава 12 больше значения узла х Двоичное дерево игры "Угадай зпаваемой в этом листинге: аггцс1 Ь(в воде содержит рсва и вызывакицей программе возвращается указатель гелей в операторах 1( и ИЫ)е и в некоторых друтих это число" являетсн двоичным деревом поиска. В этой гла- значение дага.

)казатель на левое подперсво — !ей и на лто дерево. не обязательно. Многие компиляторы одинаково будут ве мы будем рассматривать только пвоичные перевьн указатель на правое поддерево — г(КЬЬ воспринимать и азэег((ггее), и азяегт((гее!=Ь((ЛЛ.), но 45 аегчсе ьго егео *ьга сгоаее(чощ поиска, поэтому для удобства они иногда будут пазы- Для целей. которые поставлены в этой главе, значе- 46 ( поведение программы в случае первой проверки будет ваться либо двоичными деревьями, либо просто доре- ние узла булет иметь тип гв(. Расширение приведенно- 47 в1гчс1 Ьйа ггее *ггее = яа11ос(а1геог неопределенным. Поэтому лучше обезопасить себя, чем вьями, даже если это и не совсем верно.

го примера кода для использования значений другого 'ггее) Г потом сожалеть Далее, имеет смысл ввести еще несколько понявший. типа мы оставляем для самостоятельной проработки 4В гг ( ггее == ВВЬЬ 1 (ггее == ВВЬЬ) Собственно поиск по двоичному переву следует сра- 49 гегнга ЯВЬЬ; В двоичном переве поиска кюкпый узел является роди- читателю. > 1 явь„, зУ за пРовеРкой аРгУментов. ДлЯ поиска использУетсЯ телье«им узлам, или просто радителеч, двух своих под- алгоритм, который был подробно описан в начале этои дерсвьев.

Соответственно узлы попдсревьсв являются СТРУ)(ТУРО В ВЗЫКЕ С ДЛИ ДЕРЕВа 52 гегцгв ггее; главы. Начинается поиск с корня дерева (строка 62). дачериичи узлами. Узел, у котоРого нет дочерних Уз ов, )( оме ото живания отпсльных узлов необхопимо роме отслеживания отдельных 53 ) На каждом этапе процесса поиска нужно проверять, называетсЯ листам, л Узел У котоРого нет Родители или' и ть возм жность - бот. Ть .о всем дерево.. В боль- ПОИСК всс ли узлы просмотрены (строка 64). Если все, значит, чашс, Узел в вершине дерева — «ар«см своего перова. и „,, в эта .

сво к т исколюго элемента в дереве нет, и тогда в качестве прсПргтас дерево — это дерево без узлов. Само по ссбс пустое двоичное дерево бесполезно. Те- дупреждсния вызывающей программе возвращается 0 Обратите внимание, что пвоичныс персвья с опним псрево для обработки функциям. Но иногда ываст не- перь, когда код длн создания пустого двоичного дерева (строка 66).

Если текущий узел не последний, значение и тел2 же содержимым могут иметь различные структу- обходимо хранить и другую инцюрмацию о дереве. написан, необходимо наполнить его данными. Оказы- этого узла сравниваетсн со значенисл~1(ещ. Если эти пва ры. Сравните, например, рисунки )2.2 и 12.1. На обо- С.,„- лью п в сг и лается, что первым шагом при вставке узла (и при мно- значения равны, возвращается ), таким образом вызыих РисУнках изобРажены двоичные псРевьа поиска,, х г е е а и и м стить в н зател а туру для самого дерева и поместить в нее указатель на гих других операциях с двоичным пареном) является вающая программа узнаег об успешном нахождении его корень и дополнительную ин ормацию. Оргаиимкии данник Поиск то диииииииу дереку Часть й Глава 72 87 поде = *пен = па11ос!в>геог *поде>т делаем память под новый узел и сохраняем его в *пей, 145 х; узел из дерева, необходимо проанализировать значение ВВ >л !поде т= ВВЬЬ] проверяя успешность выделения памяти (строки 87 и 88).

146 х = ->1етст у т г. Возможны три различных случая, два из которых 89 поде->баса = лсепт Кроме того. для обеспечения более легкого доступа 147 > достаточно просты, а третий несколько сложнее. Каж- 90 аобе->1етс пабе->г>9ЬЕ 80661 148 У->1е>Ь = х->г>ВЬЕ] нужно сохранить новый узел в побе. Мы инициализисгее->совет+и! 149 х >1е(Е х >1е>Е дый из этих случаев представлен на рис.

12.3 и рассмат- 92 гесегп 1; руем новый узел значением Веш и устанавливаем зна- 150 х->г>9ЬЕ = а->г19ЬЕт ривается ниже. 93 ) чения указателей подлеревьев нового узла равными 151 *9 = х; Случай 1 (рис. 12.3 а, строки 134 и 135 предыдугде- 94 е1ве >л]>)ЕЕ (строки 89 и 90). И наконец, увеличиваем на 1 152 > го кола). Узел г не имеет правого дочернего узла, слегесегн 0; 96 счетчик элементов дсреваи возвращаем значение 1, го- 153 ) 154 ловательно, узел г чожно заменить его левым дочерним 97 воряшее о том, что новый узел быт успешно вставлен 155 Егее->сеанс-1 узлом. Мы просто заменяем указатель на г (*9) указа- 98 (строки 91 и 92).

156 Ггее(а]т тслелт на левый дочерний узел узла 2. Если узел г не 99 е1ае 11 (лсеп > поде->баса] ( Здесь програмлтный код прохождения по дереву нс- 157 гетагп 1; имеет и левого дочернего узла, значение *9 заменяется 100 вее = аноде->г19Ы> сколько изменен по сравнению с кодом для поиска. Это 158 ] на нулевой указатель, что тоже не представляет ника- 101 поде = пабе->глВЬЕ] было необходимо для сохранения значения переменной Л1ы объявляем функцию Ьтп бе]ете(), которая в ка- ких затрулнений. Воти все, чтотребуется сделать вэтом 102 > 103 е1ае псе и возвращения значения, которое используется в честнс аргучентов принимает двоичное дерево !гее и случае. 104 пен = лпобе->1е16! слу ]ае, если элемент !(еш найден.

В остазьном код фун- значение Веш, которое необхолимо удалить. функция Случай 2 (рис. 12.3 Ь, строки 137 — 141). Узел г име- 105 поде = аббе->1е14] кдии Ьтп !пяегт() соответствует коду функции Ьтп бе>е(еО возвращает О, если значения йещ н дереве ет правый лочерний узел, но тот не ичеет левого дочер- 106 ) Ып аеагсЦ). нет. и 1 — если значение йеш было успешно удалено.

него Узла. ПРавый дочсРний Узел Узла г полУчает левое 107 (Фюкция, в принципе, не можст завершиться неулач- поддерево узла г, а затем заменяет собой салт узел г. Мы 108 ] Упя пений но, поэтому в ней не прслусмотрено определенного заменяем г на у, устанавливая значение *9. Кроме того, <lоаеи оодноииномудереау $ЩОрганизация данна» часть и Глава 12 1[ [соапе == О) Уничтожение дерева Давайте напишем простую функцию, которая будет Формированиедвоичногодерева случайным В конце концов настает мол<сит, когда дерево становит определять количество узлов в указанном двоичном де- ОбраЗОм ргзпс[("аб , пабе->бага)< ся ненужныл<.

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

Тип файла
DJVU-файл
Размер
12,26 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6367
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее