Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 2
Регистрация: 26.01.2011
Сообщений: 96

Добавить элемент в Б-дерево

10.07.2011, 14:55. Показов 1908. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь добавить элементы в Б-дерево из списка. Как на картинке "список".
Вложение 87537
В итоге получается как на картинке "дерево".
Вложение 87538
Вот процедура:
Pascal
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
type spis=^tbook;
        {книги}
        book=record
        autor:array[1..12] of char;
        titleFIO:array[1..32] of char;
        publisher:array[1..16] of char;
    year:word;
    pages:word;
     end;
     {список книг}
     tbook=record
       data:book;
       pr,sl:spis;
     end;
........
    {вершины дерева - дата выпуска и индеск массива}
     idate=record
       adate:integer;
       iindx:book;
......
    pVartex=^Vartex;
    Vartex=record
        tData:idate;
        Left:pVartex;
        Right:pVartex;
        HR:boolean;
        VR:boolean;
        BAL:0..1;
    end;
.......
{запуск процедуры из основной программы }
var p:spis;
......
    while p<>nil do begin
        ADDVartexB(p^.data.year,root,p^.data);
        p:=p^.sl;
    end;
........
       {добавление вершины в Б-дерево}
procedure ADDVartexB(dat:integer;p:pVartex;ind:book);
var
  HR,VR:boolean;
  q:pVartex;
begin
  if p=nil then   {если ноль}
    begin         {создаем вершину}
      add:=true;
      new(p);
      p^.tData.adate:=dat;
      p^.tData.iindx:=ind;
      p^.Left:=nil;
      p^.Right:=nil;
      p^.BAL:=0;
      VR:=true;
      TExist:=true;
  end
  else
    begin
      if p^.tData.adate>dat then  {переход на левую ветвь (двигаемся по дереву) }
        begin
          ADDVartexB(dat,p^.Left,ind); {переход или добавление левой вершины}
          if (VR=true) then
            begin
              if p^.BAL=0 then  {проверка страницы}
                begin
                  q:=p^.Left; {сцепляем вершину и размещаем ее на этой же странице}
                  p^.Left:=q^.Right;
                  q^.Right:=p;
                  p:=q;
                  p^.BAL:=1;
                  VR:=false;
                  HR:=true;
                end
              else
                begin
                  p^.BAL:=0;
                  HR:=true;
                end;
            end
          else
            begin
              HR:=false;
            end;
        end
      else
        begin
          if p^.tData.adate<dat then {переход на правую ветвь{двигаемся по дереву)}
            begin
              ADDVartexB(dat,p^.Right,ind); {переходим на левую ветвь или добавляем вершину}
              if VR=true then
                begin
                  p^.BAL:=1;
                  VR:=false;
                  HR:=true;
                end
              else
                begin
                  if HR=true then
                    begin
                      if p^.BAL>0 then
                        begin
                          q:=p^.Right;  {присоединение вершины со смещением вверх}
                          p^.Right:=p^.Left;
                          p^.BAL:=0;
                          q^.BAL:=0;
                          q^.Left:=p;
                          p:=q;
                          VR:=true;
                          HR:=false;
                        end
                      else
                        begin
                          HR:=false;
                        end;
 
                    end;
                end;
            end;
        end;
    end;
end;
Помогите решить проблему. Полный текст и исходная база прилагаются.
Миниатюры
Добавить элемент в Б-дерево   Добавить элемент в Б-дерево  
Вложения
Тип файла: 7z ZHZL20.pas.7z (4.6 Кб, 28 просмотров)
Тип файла: zip BASE1.zip (34.1 Кб, 24 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.07.2011, 14:55
Ответы с готовыми решениями:

Добавить в массив (дерево) элемент со значением текущего уровня вложенности
Необходимо добавить в массив (дерево) элемент со значением текущего уровня вложенности. Трудности с определением уровня. Есть такая ф-я...

Есть мин-ое остовое дерево к заданному графу. Нужно добавить к этому графу новое ребро, и предложить алгоритм, который перестроит мин-е остовое дерево
Полный текст задачи: &quot;Предположим, что у нас имеется минимальное остовое дерево Т заданного графа G (c n вершинами и m ребрами) и новое...

Структура "Информация": - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить элемент перед элемент
Структура &quot;Информация&quot;: - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить...

2
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
10.07.2011, 14:58
Что-то Ваши ссылки ведут в никуда...
0
0 / 0 / 2
Регистрация: 26.01.2011
Сообщений: 96
11.07.2011, 00:11  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Что-то Ваши ссылки ведут в никуда...
Поэтому отредактировал сообщение. Картинки внизу предыдущего поста.
На первой список сформированный после чтения из базы, в таком виде он по-идее должен заноситься в дерево.
На второй - то что занестось в дерево.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.07.2011, 00:11
Помогаю со студенческими работами здесь

Добавить узел в бинарное дерево
Мне нужно добавить узел в бинарное дерево, чтобы вышло так: &quot;Binary Tree is a kind of orderly table&quot;. Условие задачи: Вот мой код: ...

Невозможно добавить строки в элемент управления DataGridView, в котором нет столбцов. Сначала необходимо добавить столбцы
Дан массив студентов ВУЗа: ФИО, возраст, регион, факультет. Вывести на экран результирующую таблицу: регион, количество студентов из этого...

Бинарное дерево. Добавить вывод вершин и нумерацию
Вообщем есть такая программа. Сюда нужно добавить методы, которые выводят на екран все вершины дерева(по 1 разу),и метод который нумерует...

Двусвязный список - Добавить элемент после заданного, удалить заданный элемент
Реализуйте списочную структуру в виде класса. работа состоит из двух частей: из класса (структуры, алгоритма) и из тестирующего кода. ...

Создать список, ввести элемент и добавить этот элемент в начало списка
создать список,ввести элемент и добавить этот элемент в начало списка


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru