Бинарные деревья, С++ |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Бинарные деревья, С++ |
Nike |
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Никита Репутация: 0 |
У меня есть динамическая структура данных: Студент (фамилия, имя, факультет, группа), реализованная с помошью бинарного дерева. Подскажите пожалуйста как мне сделать сортировку всей базы данных, например по фамилии...
|
Тёмный Эльф |
Сообщение
#2
|
Влюблённый псих Группа: Пользователи Сообщений: 185 Пол: Женский Реальное имя: Лейла Репутация: 1 |
Подскажите пожалуйста как мне сделать сортировку всей базы данных, например по фамилии... Ну вот посмотри например здесь про сортировку с помощью бинарного дерева. Там даже пример есть, правда на Java. Википедия Сообщение отредактировано: Тёмный Эльф - |
volvo |
Сообщение
#3
|
Гость |
Тёмный Эльф, понимаешь, сортировка-то с помощью бинарного дерева в принципе не нужна, дерево хранит информацию уже в отсортированном виде:
Цитата в левом поддереве содержатся только ключи, имеющие значения, меньшие, чем значение данного узла, а в правом поддереве содержатся только ключи, имеющие значения, большие, чем значение данного узла. Проблема вся в том, что автор не указал, что является ключом в том представлении, которое у него есть. Если добавляются данные в бинарное дерево, скажем, по ID студента, а отсортировать надо по фамилии, то проще всего будет построить новое дерево, с ключом - фамилией, и пройти по нему в симметричном порядке... Nike, реализацию структуры можно посмотреть? |
Nike |
Сообщение
#4
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Никита Репутация: 0 |
struct node volvo, так мне тогда проще все засунуть в новое дерево? |
Тёмный Эльф |
Сообщение
#5
|
Влюблённый псих Группа: Пользователи Сообщений: 185 Пол: Женский Реальное имя: Лейла Репутация: 1 |
volvo, да ты прав
Nike, кстати можешь прочитать "Алгоритмы и структуры данных" Никлауса Вирта. Там очень хорошо изложено про деревья в том числе и про бинарные. (с примерами на Паскале) |
volvo |
Сообщение
#6
|
Гость |
Nike, смотри...
Функция, добавляющая элемент в дерево, на Паскале выглядит так (X - добавляемый элемент): procedure Insert(var Root: TTree; X: T);, на С тоже будет что-то очень похожее... Вот если сравнения if(value < X) и if(value > X) не делать непосредственно в теле функции, а определить вспомогательную функцию, которая будет возвращать -1, когда ключ добавляемого элемента меньше ключа текущего узла, и +1, если больше, и передавать эту функцию как параметр в Insert, то вполне реально одной функцией создавать деревья с любым ключом... То есть, просто делаешь полный обход существующего у тебя дерева в любом порядке, и добавляешь информационную структуру каждого узла в новое дерево (но ключевым уже должно быть поле surname, т.е., в функцию Insert надо передавать параметр-функцию, сравнивающую значения именно этих полей). А по новому дереву - обход в симметричном порядке даст тебе отсортированную по фамилии базу... Если хочешь - покажи свою функцию добавления записи в дерево, я покажу, как переделать функцию, чтобы можно было создавать деревья с любым полем в качестве ключа... Сообщение отредактировано: volvo - |
Nike |
Сообщение
#7
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Никита Репутация: 0 |
Всем спасибо! Все понятно теперь
|
Текстовая версия | 24.12.2024 1:19 |