С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
5 / 5 / 1
Регистрация: 05.11.2011
Сообщений: 190

Из списка в двоичное дерево

11.06.2012, 17:32. Показов 1032. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Эта программа, которая содержит текущую информацию о заявках на авиабилеты. Каждая заявка включает:
• пункт назначения;
• номер рейса;
• фамилию и инициалы пассажира;
• желаемую дату вылета.
Программа обеспечивает:
• хранение всех заявок в виде списка;
• добавление и удаление заявок;
• по заданному номеру рейса и дате вылета вывод заявок с их последующим удалением;
• вывод всех заявок.


C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <locale>
#include <ctime>
#include <string>
using namespace std;
 
struct Aviabileti
 
{
 char punkt_naznachenia[51];
 int nomer_reysa;
 char  fio[51];
 char jelayemaia_data[21];
};
 
int main()
{
int flag=1, i=0, reg, kol=7;
Aviabileti mas[61]; 
 
while (f==1)
 
{
    cout<<"1.Vvod dannix ";
    cout<<"2.Poisk po reysu i date vileta ";
    cout<<"3.Vivod zayavok ";
    cout<<"4.Udaleniye zayavok ";
 
    //добавление данных в массив
    if(reg==1)
{
        for(i=0;i<kol;i++)
        cout<<"Vvedite punkt naznacheniya ";
        cin>>(mas[i].punkt_naznachenia);
        cout<<"Vvedite nomer reysa ";
        cin>>mas[i].nomer_reysa);
        cout<<"Vvedite fio passagira ";
        cin>>(mas[i].fio);
        cout<<"Vvedite datu vileta ";
        cin>>(mas[i].jelayemaia_data);
 
        
        }
 
    if(reg==3)
 
    {
//сортировка значений
int j, min, p1,pp, pp2, temp;
for(i=0;i<kol;i++)
{
min=mas[i].nomer_reysa;
p1=i;
for(j=i;j<kol;j++)
if(mas[j].nomer_reysa<min)
{
min=mas[j].nomer_reysa;
p1=j;
}
temp=mas[i].nomer_reysa;
mas[i].nomer_reysa=mas[p1].nomer_reysa;
mas[p1].nomr_reysa=temp;
strcpy(temp, mas[i].punkt_naznachenia);
strcpy(mas[i].punkt, mas[p1].punkt);
strcpy(mas[p1].punkt_naznachenia,temp);
strcpy(temp, mas[i].tip_samoleta);
strcpy(mas[i].tip_samoleta, mas[p1].tip_samoleta);
strcpy(mas[p1].tip_samoleta, temp);
}
 
for(i=0;i<kol;i++)
        {
        cout<<"Zapis "<<i;
        cout<<"Punkt naznacheniya "<<mas[i].punkt_naznachenia;
        cout<<"Nomer reysa "<<mas[i].nomer_reysa;
        cout<<"Fio passagira "<<mas[i].fio;
        cout<<"Jelaemaya data "<<mas[i].jelayemaia_data;
        }
        }
 
//поиск по рейсу и дате вылета
        if(reg==2)
        {
            cout<<"Vvedite nomer reysa dlya poiska ";
            cin>>pp;
            cout<<"Vvedite datu vileta dlya poiska ";
            cin>>pp2;
            cout<<"Rezultat poiska ";
            fl=0;
        for(int i=0;i<kol;i++)
        {
            if(strcmp(pp2,mas[i].jelayemaia_data, mas[i].nomer_reysa)==0);
            {
        cout<<"Zapis "<<i;
        cout<<"Punkt naznacheniya "<< mas[i].punkt_naznachenia;
        cout<<"Nomer reysa "<<mas[i].nomer_reysa;
        cout<<"Fio passagira "<<mas[i].fio;
        cout<<"Jelayemaia data "<<mas[i].jelayemaia_data;
        
        
            }
        }
 
        if(fl==0)
        cout<<"Biletov s takim punktom naznacheniya net ";
 
        }

двоичное дерево

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <conio.h>
#include<time.h>
using namespace std;
 
struct Node
{
    int d;         //Данные элемента
    Node *left;    //Ссылка на левое поддерево
    Node *right;   //Ссылка на правое поддерево
};
Node *first(int d);                    //Формирование первого элемента
Node *search_insert(Node *root, int d); //Поиск с включением
void print_tree(Node *root, int l);     //Обход дерева
 
//-------------------------------------------
void main()
{
    srand(time(0));
    setlocale(0,"Rus");
    int n;             //количество элементов в дереве
    cout << "Введите n: ";
    cin >> n;
    int *b = new int[n];
    cout << "Сгенерированная последовательность: " << endl << endl;
    for(int i = 0; i < n; i ++)
    {
        b[i] = 1 + rand()%100;
        cout << b[i] << " ";
    }
    cout << "\nДерево: " << endl << endl;
    Node *root = first(b[0]);    //Формируем корень дерева
    //Ищем место куда вставить и вставляем новые элементы
    for(int i = 1; i < n; i ++)
    {
        search_insert(root,b[i]);
    }
    print_tree(root,0);            //вывод дерева на экран
    
    int k;               //значения, которые больше заданного к будут удалены
    cout<<"Введите k: "; 
    cin>>k;
    for(int i=0;i<n;i++)
    {
        if(b[i] > k)
        {
            b[i]=-1;
        }
    }
    int o;
    int x=0;
for(int i = 0; i < n; i ++)
    {
        if(b[i]!=-1)
        {
            o=i;
            break;
        }
        else x++;
    }
    if(x==n)
    {
        cout<<"Дерево пустое";
        getch();
        exit(1);
    }
    cout << "\nНовое дерево: " << endl << endl;
    Node *root1 = first(b[o]);
    for(int i = 1; i < n; i ++)
    {
        if(b[i]!=-1)
        {
            search_insert(root1,b[i]);
        }
    }
    print_tree(root1,0);
    delete b;
    getch();
}
 
//--------------------------------------------
//Формирование первого элемента
Node *first(int d)
{
    Node *pv = new Node;      //Создаём элемент
    pv -> d = d;              //Присваиваем значение элементу поля
    pv -> left = 0;           //Ссылка на левое поддерево равна NULL
    pv -> right = 0;          //Ссылка на правое поддерево равна NULL
    return pv;               //Возвращаем адрес элемента
}
 
//---------------------------------------------
 
 
 
//Поиск с включением
Node *search_insert(Node *root,int d)
{
    Node *pv = root, *prev;
    bool found = false;    //Переменная отвечающая за то что нашли ли элемент или нет
    /*Ниже приведён алгоритм поиска, если нашли такой же элемент то мы его не вставляем в дерево выходим из функции возвратив адрес совпавшего элемента*/
    while(pv&&!found)
    {
        prev = pv;                       //получаем адрес элемента от которого будем пускать корни
        if(d == pv -> d)found = true;        //совпадение выходим из цикла
        else if(d < pv -> d)pv = pv -> left;   //Всовываемя в левое поддерево
        else pv = pv -> right;             //Всовываемя в правое поддерево 
//Выход из цикла осуществляется, тогда когда нашли свободный адрес : ссылку у дерева : для вставки нового узла */
    }
//---------------------------
/*Если совпало значение элемента со значением элемента который хотим вставить то выходим из функции возвращая адрес элемента
с которым совпало */
    if(found)return pv;               
    //Создание нового узла
    Node *pnew = new Node;
    pnew -> d = d;
    pnew -> left = 0;
    pnew -> right = 0;
    if(d < prev -> d)
    //Присоединение к левому поддереву предка
    prev -> left = pnew;
    else 
    //присоединяем к правому поддереву предка
    prev -> right = pnew;
    return pnew;
}
//---------------------------------------
//Обход дерева
void print_tree(Node *p,int level)
{
    if(p)
    {
        print_tree(p -> left, level + 1);           //Перемещение по левым поддеревьям
        for(int i = 0; i < level; i ++)cout<<"   ";
        cout << p -> d << '\n';                      //вывод значений дерева
        print_tree(p -> right, level + 1);          //Перемещение по правым поддеревьям        
     }
}

нужно как-то соединить эти две программы так, чтобы вместо хранения всех заявок в виде списка было хранение всех заявок в виде двоичного дерева. Но у самой не получается сделать! Помогите, пожалуйста!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2012, 17:32
Ответы с готовыми решениями:

Двоичное дерево
Здравствуйте! Помоги задачу решить! Сразу говорю: это не от лени, нам просто мало объясняют! Хотя бы направление дайте, подсказку...Прогу...

Двоичное дерево
Помогите найти ошибку, в консоль вообще ничего не выводится: #include&lt;iostream&gt; #include&lt;string&gt; #include&lt;fstream&gt; ...

Двоичное дерево
Помогите пожалуйста построить двоичное дерево и найти в нём длину пути(количество ветвей от корня) до минимального элемента

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2012, 17:32
Помогаю со студенческими работами здесь

Двоичное дерево
Добрый день! Если поможете хотя бы с несколькими стратегиями, буду благодарен! Задание звучит так: &quot;Сделайте двоичное...

Двоичное дерево поиска
Даны 2 вершины дерева .Для каждой из данных вершины вывести ее уровень или информацию что такой вершины нет Подскажите как...

Двоичное дерево. Программа
Формулу вида &lt;формула&gt;::=&lt;терминал&gt;(&lt;формула&gt;&lt;знаk&gt;&lt;формула&gt;) &lt;знак&gt;::= +|-|*|/ &lt;терминал&gt;::= 0|1|2|3|4|5|6|7|8|9 Можно...

Двоичное дерево Haskell
Доброго времени суток, помогите, пожалуйста. На просторах интернета был найден данный код, в котором get - поиск элемента дерева, add -...

Двоичное дерево поиска
Здравствуйте. Разбираюсь с двоичным деревом поиска, нашел в литературе код, почти разобрался как он работает, но есть некоторые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru