Форум программистов, компьютерный форум CyberForum.ru

Описать класс, реализующий бинарное дерево - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не получаеться решить http://www.cyberforum.ru/cpp-beginners/thread350749.html
Дана функция y(x)=Ax2+Bx+C, где A – количество букв в фамилии студента, B количество букв в имени студента, C количество букв в отчестве студента. Для функции y(x) составить программу построения таблицы значений функции при изменении аргумента от L до R с шагом T. В каждой строке выводить значения аргумента и соответствующее ему значение функции. Кроме того, в конце таблицы напечатать...
C++ как удалить все елементы с очереди queue Есть очередь queue и в ней элементы, как удалить их все чтобы очередь осталась пустой? http://www.cyberforum.ru/cpp-beginners/thread350748.html
C++ вектор string в масив указателей на char
Доброго дня, комрады. Вот несколько дней как начал разбираться в С++ по 4-му вводному курсу липмана. наткнулся на задачку в общем-то тривиальную, но в определенном месте немного вывихнул мозг. Задание: Напишите программу читающую строки в вектор. Скопируйте этот вектор в массив указателей на тип char. Для каждого элемента вектора создайте новый символьный массив и скопируйте данные из элемента...
Считать комманды пока они есть... C++
Здравствуйте! Есть команды в файле: ADD 192168812 ADD 125 ADD 321 EXTRACT EXTRACT CLEAR ADD 7 ADD 555
C++ Центр тяжести http://www.cyberforum.ru/cpp-beginners/thread350729.html
Горю! По координатам вершин многоугольника требуется найти координаты его центра тяжести. Стороны многоугольника друг с другом не соприкасаются (за исключением соседних - в вершинах) и не пересекаются. Площадь многоугольника не равна нулю. Технические условия Входные данные В первой строке находится число N, в следующих N строках - пары чисел - координаты точек. Если соединить...
C++ Семафоры(7 потоков) Требуется создать программу которая будет создавать 7 потоков и в каждом выполнять операцию а=а-1(изначально установить а=10). Доя решение задачи взаимного исключения использовать семафоры. Семафоры через библиотеку <windows.h>.( ReleaseSemaphore, WaitForSingleObject,CreateThread.) Кто умеет прошу помочь. Можно создать с 2-мя потоками, я думаю я пойму общий принцип. Заранее спасибо! подробнее

Показать сообщение отдельно
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
13.09.2011, 19:39     Описать класс, реализующий бинарное дерево
C++
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
/*  Вариант: 2 (задание №2)(BK55)
*  Задание: Вершина двоичного дерева содержит
*  массив целых и два указателя на правое и
*  левое поддерево. Массив целых в каждом
*  элементе упорядочен, дерево в целом также
*  упорядочено. Функция включает в дерево
*  целую переменную с сохранением упорядоченности.
*/
 
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
 
#define N 2 //Размер массива в дереве
 
// Элемент дерева.
struct tree
{
int s[N]; //Массив целых чисел.
  int count; //Число занятых элементов в массиве 's'.
tree *left; //Указатель на левый потомок дерева
  tree *right; //Указатель на правый потомок дерева.
};
 
//Прототипы функций и глобальные переменные.
 
void About(void);
void printsk (char* format,...);
int menu_select(void); /* Выбор пункта меню. */
void enter(struct tree *usel); /* Ввод числа. */
void show(struct tree *usel); /* Вывод чисел на экран. */
void insert(int number, struct tree *usel);/* Вставка нового числа. */
struct tree *first(void); /* Создание вершины дерева. */
 
int main ()
{
About (); /* Вывод информации о программе и авторе. */
 
  struct tree *pbegin = first(); //создание пустой вершины дерева.
  /* Объявление используемых в программе локальных переменных. */
  char choice;
  /* Меню. */
for(;;) {
   choice = menu_select();
   switch(choice) {
     case 1: enter(pbegin); //Ввод числа
       break;
     case 2: show(pbegin); //Вывод чисел на экран
       break;
     case 3: exit(0); //Выход из программы.
   }
 }
 
  getchar(); /* Заглушка. */
return 0;
  /* Конец программы. */
}
 
/*-----------------------------------------------------------------------*/
/* Выбор пункта меню. */
int menu_select(void)
{
char s[50];
int c;
printsk("\n1. Ввод числа\n");
printsk("2. Вывод всех чисел на экран\n");
printsk("3. Выход\n");
do {
   printsk("\nВведите номер нужного пункта: ");
   scanf("%s",&s);
   c = atoi(s);
 } while(c<0 || c>3);
 return c;
}
 
/*-----------------------------------------------------------------------*/
/* Ввод строки */
void enter (struct tree *usel)
{
clrscr(); //Очистка экрана.
printsk ("Введите число: \n");
int num;
  scanf("%d", &num);
  insert (num, usel);
}
 
/*-----------------------------------------------------------------------*/
/* Создание вершины дерева. */
struct tree *first(void)
{
struct tree *pv = new struct tree;
  for (int j = 0; j < N; j++) pv->s[j]=0;
  pv->left = NULL;
  pv->right = NULL;
  pv->count = 0;
  return pv;
}
 
/*-----------------------------------------------------------------------*/
/* Вывод строк на экран. */
void show(struct tree *usel)
{
if(!usel) return;
  show(usel->left);
  if(usel->s[0]) for (int m = 0; m < usel->count; m++) printsk(" %d\n", usel->s[m]);
  show(usel->right);
}
 
/*-----------------------------------------------------------------------*/
/* Упорядоченная вставка нового числа в дерево */
void insert(int number, struct tree *usel)
{
//Если массив полностью пуст.
  if (usel->count == 0)
  {
usel->s[0] = number;
     usel->count = 1;
     return;
  }
 
  //Если массив полностью заполнен.
  if (usel->count == N)
  {
  //Если число из диапозона чисел в данном массиве.
     if (number > usel->s[0] && number <= usel->s[N-1])
     {
//То нужно вставить в текущий массив, а последнее рекурсивно в правую ветку.
        int temp = usel->s[N-1]; //Запоминаем последнее число из массива.
        //Ищем место вставки
        int k = 0;
        for (k = 0; k < N; k++) if (number <= usel->s[k]) break;
//Раздвигаем массив
        for (int temp_2 = N-1; temp_2 > k; temp_2--)
        usel->s[temp_2] = usel->s[temp_2-1];
        //Копируем число в массив.
        usel->s[k] = number;
        //Проверяем существуют ли ветки дерева, если нет, то создаем.
        if (usel->left == NULL)
        {
        usel->left = first();
           usel->right = first();
        }
        insert (temp, usel->right);
        return;
     }
     else
     { //Если не входит в диапозон чисел данного массива.
//Проверяем существуют ли ветки дерева, если нет, то создаем.
        if (usel->left == NULL)
        {
        usel->left = first();
           usel->right = first();
        }
      if (number <= usel->s[0]){ insert (number, usel->left); return;}
        if (number > usel->s[N-1]){ insert (number, usel->right); return;}
     }
  }
 
  //Если есть место в текущем массиве.
  if (usel->count < N)
  {
//Ищем место включения числа в массив.
     int m = 0;
     for (m = 0; m < usel->count; m++)
      if (number <= usel->s[m]) break;
     //Раздвигаем массив
     for (int v = usel->count; v > m; v--)
     usel->s[v] = usel->s[v-1];
     //Записываем 'number' в массив
     usel->s[m] = number;
     usel->count++;
     return;
  }
}
 
/*-----------------------------------------------------------------------*/
/* Преобразования кодовой таблицы для Windows */
void printsk (char* format,...)
{
char buf[100];
va_list ptr;
CharToOem(format,buf);
va_start(ptr,format);
vprintf(buf,ptr);
}
 
/* Функция выводит информацию и названии программы и ее авторе */
void About (void)
{
printsk("\n               Работа с деревьями   v.1.0\n\n");
printsk("Автор: \n");
printsk("Назначение: Упорядоченное дерево из целых чисел.\n");
}
 
Текущее время: 22:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru