Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2010, 09:46   #1
T@tali
Пользователь
 
Регистрация: 06.05.2010
Сообщений: 72
По умолчанию Как сделатьформирование данных в виде двоичного дерева?

Здравствуйте программисты. У меня вопрос. Изучаю С++ пока для чайников. Как вместо списка вывести начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева? У меня пока списком

Код:
struct Kniga{
  int number_UDK;
  char Familia [15];
  char Iniciali [4]; //вида X.X.
  char Name [20];
  int God_izdania;
  int count;
  Kniga* next; //указатель на след элемент списка
 
};
 
int main(){
 Kniga* Head=0; //голова списка
 Kniga* Tail=0; // хвост списка
 
  //Заполнение списка
 
 while (true){
    if (Head=0){ //если список пустой
      Head=new Kniga;
      Tail=Head;
      (*Tail).next=0;
    }
    else {
    (*Tail).next= new Kniga;
    Tail=(*Tail).next;
    (*Tail).next=0;
    }  
 
   cout<<"Введите номер УДК: ";
   cin>>(*Tail).number_UDK;
 
   ...........................
   ...........................
 
  char c;
   cout<<"Продолжить ввод Y/N?";
   cin>>c;
 
   if ((c='n') || (c='N'))
     break;
  
 
 
}; 
 
 
return 0;
}

Последний раз редактировалось T@tali; 28.12.2010 в 09:49.
T@tali вне форума Ответить с цитированием
Старый 28.12.2010, 10:41   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Я бы посоветовал выделить книгу в отдельную структуру:
Код:
struct Kniga{
  int number_UDK;
  char Familia [15];
  char Iniciali [4]; //вида X.X.
  char Name [20];
  int God_izdania;
  int count;
};
А в узлах списка/дерева хранить экземпляры этой структуры:
Код:
struct list_node
{
Kniga data;
list_node* next;
};

struct tree_node
{
Kniga data;
tree_node *left, *right;
};
А добавление в бинарное дерево происходит примерно так:
Код:
tree_node* root = 0;
while (/*получаем данные для записи в дерево*/)
 {
 tree_node** curr = &root;
 while (true)
  {
  if (*curr = 0)
   {
   *curr = new tree_node;
   (*curr) -> data = curr_data;
   break;
   }
  if (curr.data > curr_data)
   *curr = (*curr) -> left;
  else
   *curr = (*curr) -> right;
  }
 }
Только замените соответствующие сравнения на нужный вам критерий, и будет практически то, что нужно.
Кстати, обычно голова списка/стека/очереди называется top, а хвост - bottom. Ну это так, замечание об общепринятой терминологии.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 28.12.2010, 11:11   #3
T@tali
Пользователь
 
Регистрация: 06.05.2010
Сообщений: 72
По умолчанию

Спасибо. Буду разбираться
T@tali вне форума Ответить с цитированием
Старый 29.12.2010, 19:20   #4
T@tali
Пользователь
 
Регистрация: 06.05.2010
Сообщений: 72
По умолчанию

У меня вопрос. А если я хочу создать эту программу в С++ билдер. Чтобы кнопочки и гриды и все такое было Мне нужно сначала базу в аксесе создать как для делфи да ?
T@tali вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно организовать непростой шаблон двоичного дерева? nowaalex Общие вопросы C/C++ 10 02.12.2010 02:47
Поиск двоичного дерева mtg Общие вопросы C/C++ 2 01.12.2010 21:15
Обход двоичного дерева слева Дядя Тёма Фриланс 2 22.06.2010 17:02
Обход двоичного дерева слева Дядя Тёма Помощь студентам 0 05.06.2010 18:25
Обход двоичного дерева F1nk Помощь студентам 0 03.06.2010 17:51