Помогите с реализацией шаблона класса Бинарное дерево: Visual Studio 2010, С++.
Вот задание:
Создать шаблон класса «бинарное дерево» . Написать программу, которая содержит текущую информацию о заявках на авиабилеты, с использованием данного шаблона класса.
Каждая заявка содержит:
-пункт назначения;
-номер рейса;
-фамилию и инициалы пассажира;
-желаемую дату вылета.
Программа должна обеспечивать:
*хранение всех заявок в виде двоичного дерева;
*добавление и удаление заявок;
*вывод заявок по заданному номеру рейса и дате вылета с их последующим удалением;
*вывод всех заявок.
Шаблон класса я создал, но вот как с ним работать, как добавить заявку в дерево? Параметр Т — типа int, Т1 — string. Что не пробовал, ничего не выходит.. .Привожу текст шаблона класса Tree, еще я создал 2 класса Заявка и Узел:
#pragma once
template
#pragma once
#include «Node.h»
template
class Tree
<
Node * root;
public:
Tree() <
root=NULL;
>;
void insert(Node * New, Node * cur) <
if(cur==NULL)
cur=New;
else <
if(cur->Num>New->Num)
insert(* New, cur->left)
else
insert(* New, cur->right)
>
>
void search(Node * cur, T value) <
if(cur==NULL)
return;
else <
if(cur->Num=value)
return;
else <
if(cur->Num>value)
search(cur->right, value)
else
search(cur->left, value)
>
>
>
void obhod(Node * cur) <
if(cur==NULL)
return;
else <
obhod(cur->right);
obhod(cur->left);
>
>
void remove(Node * cur, T value) <
if(cur==NULL)
return;
else <
if(cur->Num>value)
remove(cur->left, value);
if(cur->Num right, value);
if(cur->Num==value)
cur=NULL;
>
>
>;
Вставка в бинарное дерево — самый сложный момент. Алгоритм такой
1. Ищем узел, к которому надо присоединить новое значение.
2. Если с нужное стороны ничего не присоеденено — добавляем узел и возвращаемся.
3. Остоединяем старое значение, просоединяем новое.
4. Последовательно присоеденяем элементы, попавшие в отсоединенную ветку по этому же алгоритму.
Есть еще один способ, заодно и балансирует дерево.
1. Рушим все связи дерева.
2. Добавляем все элементы в массив, включая новый.
3. Сортируем элементы.
4. Строим новое дерево по алгоритму — Выбираем средний элемент. Соответственно средний элемент левой стороны будет левым элементом, средний элемент правой стороны будет правым и так рекурсивно, пока все элементы не будут присоеденены.
Составить программу которая содержит текущую информацию о заявках на авиабилеты
Имеется следующая задача.
Составить программу, которая содержит текущую информацию о заявках на
авиабилеты.
Каждая заявка содержит определенные поля.
Программа должна обеспечивать:
-хранение заявок в виде списка
-добавление заявок в список
-удаление заявок
-вывод заявки по заданному номеру рейса и дате
-вывод всех заявок
Возникли некоторые трудности:
1) при выводе заявок они выводятся не в том порядке (1-2-4-3)
2) при удалении всех заявок функция добавления вылетает с исключением
Составить программу которая содержит текущую информацию о заявках на авиабилеты
Профиль
Группа: Участник
Сообщений: 8
Регистрация: 5.12.2014
Репутация: нет
Всего: нет
Выполняю задание. Условие следующее:
Составить программу, которая содержит текущую информацию о заявках на авиабилеты.
Каждая заявка содержит:
1) пункт назначения
2) номер рейса
3) фио
4) дату
Требуется реализовать функции:
1) хранения заявок в виде списка
2) добавления заявок
3) вывода всех заявок
4) поиск заявки по номеру и дате
5) удаление заявок.
Не могу понять, как правильно добавлять заявки и их выводить.
Заполнив одну заявку, всё выводится хорошо.
Но как только хочу заполнить ещё или вывести больше одной, то не работает.
Прошу подсказать, что исправить нужно.
Код прикладываю:
| Код |
| #include <iostream> #include <string> #include <cstring> using namespace std; |
struct List // объявление структуры с данными
<
string point;
int reis_n;
string fio;
string date;
List *next;
>;
// прототипы функций
int Menu();
void add(List *first);
void cout_all(List *first);
void cout_one(List *first);
void del(List *first);
void add(List *first) // добавление одной заявки в список
<
List *t;
Профиль
Группа: Участник
Сообщений: 131
Регистрация: 17.5.2007
Репутация: нет
Всего: нет
в функ. add() при создание tmp не задано поле tmp->next = NULL поэтому цикл не отрабатывает при последующих добавлениях.
можно или дописать tmp->next = NULL или
в структуре задать в конструкторе (чтобы каждый раз не задавать)
List(): reis_n (0), next(NULL)<>
Профиль
Группа: Комодератор
Сообщений: 7045
Регистрация: 28.8.2007
Где: Химки, Московская обл
Репутация: 35
Всего: 223
В функции count_all написан явный бред (не считая того, что название функции не отражает ее действия)
Не надо было ее делать из функции add — у них разное предназначение и реализация должна бвть разная.
Запрещается!
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Вопросы по реализации алгоритмов рассматриваются здесь
- FAQ раздела лежит здесь!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
[ Время генерации скрипта: 0.1092 ] [ Использовано запросов: 21 ] [ GZIP включён ]