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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Rena
0 / 0 / 0
Регистрация: 15.01.2012
Сообщений: 9
#1

Работа с бинарной кучей - C++

18.01.2012, 17:41. Просмотров 1039. Ответов 0
Метки нет (Все метки)

У меня есть программа связанная с бинарной кучей,добавлением в неё элемента, поиска необходимого и его удаление.Но в ней есть неполадки, не вставляет в корень наибольший элемент и при удалении дублирует последний или предпоследний элемент. Помогите в решении и объясните пожалуйста. Заранее спасибо!

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
// kucha.cpp: главный файл проекта.
 
 
 
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int kol=0;
struct heap
{ int p; char s[10];};
heap mas[20];
void outputheap ();
void inputheap();
void sort(int g);
void seakheap();
void delheap();
void del0();
 
 
void outputheap ()
{ int i=1,j; float k=1;
cout<<mas[0].p<<":"<<mas[0].s<<endl;
while (i<=kol)
{
 for (j=1;j<=pow(2,k) && kol>=i;j++)
 {cout<<mas[i].p<<":"<<mas[i].s<<"\t";i++;} k++;
 
 cout<<endl;}
}
 
void inputheap()
{ cin>>mas[kol].p>>mas[kol].s;
if (kol!=0) sort(kol);
kol++;
}
 
void sort(int g)
{ int i;
if (g%2==0)
i=(g-2)/2;
else i=(g-1)/2;
if (mas[g].p>mas[i].p)
{heap c=mas[g];
mas[g]=mas[i];
mas[i]=c;
g=i; 
sort(g);}
}
 
void seakheap()
{ char s2[10];
cin>>s2;
int i;
for(i=0; i<=kol; i++)
if (strcmp(s2, mas[i].s)==0)
cout<<i<<":"<<mas[i].p<<"-"<<mas[i].s<<endl;
}
 
void delheap()
{char s2[10];
int i,g;
cin>>s2;
for (i=0; i<=kol; i++)
if (strcmp(s2,mas[i].s)==0)
{
 
for (g=i+1;g<kol;g++)
mas[g-1]=mas[g];
kol--;
}
else
cout<<"\n now"<<endl;
if (i==kol)
kol=kol-1; 
else 
 
 if ((mas[2*i+1].p==mas[2*i+2].p)&& (mas[2*i+2].p==0))
 { mas[i]=mas[i+1];
 del0 ();
 }
 
 if (mas[2*i+2].p>0)
 { mas[2*i+2].p=0; sort (2*i+1);
 del0 ();
 }
 
 else 
  if (mas[2*i+2].p>0)
  {
   mas[i]=mas[2*i+2];
 mas[2*i+2].p=0; 
 sort (2*i+2);
 del0 ();
 }
}
 void del0()
 { 
  int i=0;
  for (i=0; i<=kol-1; i++)
   if (mas[i].p==0)
   {
    for (int j=i+1; j<=kol; j++)
    { mas[j-1]=mas[j]; sort(j);
    }
mas[kol].p=0;
kol--;
   }
 }
 
void main ()
{
 kol=0;
 for (int i=0;i<20;i++) mas[i].p=0;
 int f=0;
 
 while (f==0)
 {
  inputheap();
  cout<<"nazmite 1 esli xotite vyiti";
  cin>>f;
 }
 cout<<"\n kucha"<<endl;
 outputheap ();
 cout<<"\n poisk:"<<endl;
 seakheap ();
 cout<<"\n delete:"<<endl;
 delheap ();
    del0();
 outputheap ();
 system ("pause");
}
void insertsort(int i,int mas[20])
{
 int k,j,temp;
 for (k=0;k<i;k++)
 {
  temp=mas[k];
  for (j=k-1;j>=0 && mas[j]>temp;j--)
   mas[j+1]=mas[j];
  mas[j+1]=temp;
 }
}
 Комментарий модератора 
Именуйте темы осмысленно!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2012, 17:41     Работа с бинарной кучей
Посмотрите здесь:

Реализовать алгоритм Прима с бинарной кучей, в которой нужно хранить ребра - C++
Здравствуйте уважаемые программисты тут вот такая задачка попалась нужно реализовать алгоритм Прима с бинарной кучей, в которой нужно...

Работа с кучей. Перевыделение памяти - C++
Для объяснения вопроса приведу сначала пример: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; class Man { private: char* Name; ...

Является ли массив кучей? - C++
1.Пусть массив отсортирован по возрастанию. Является ли он кучей?Если да,то почему?Если нет,то приведите контрпример. 2.Является ли кучей...

Сортировка пирамидой (кучей) - C++
Реализовал сортировку массива пирамидальным способом. Но не пойму, это нормально или нет, что упорядоченный массив упорядочен не до...

Ошибка в программе (с кучей) - C++
Подскажите где ошибка в программе.Программа работает нормально,но в конце работы программы выдаётся ошибка Heap corruption detected ...

Перегрузка бинарной операции < - C++
Всем привет написал перегрузку для структуры: typedef struct t_FileInfo { t_String file_name; /*имя файла*/ t_String...

В чем разница между управляемой и неуправляемой кучей? - C++
Здравствуйте.... извиниТЕ если кому-либо покажется вопрос глупым, но хоть убейте, понять не могу в чем разница между native и managed...

3. Игра Ним с одной кучей камней и с инвертированными правилами - C++
Решите задачу методом динамического программирования : Игра Ним с одной кучей камней и с инвертированными правилами (взявший последний...

Размер бинарной кучи, процедура heapify - C++
Не могу понять, каким образом надо работать с параметром &quot;размер кучи&quot; при реализации сортировки пирамидой. В псевдокоде написано, что в...

Чтение из stdin и запись в stdout бинарной информации - C++
Привет. Посмотрите, пожалуйста. Мне нужен т.н. &quot;прозрачный&quot; ехе-шник, чтобы он передавал в StdOut тоже, что и получил из StdIn. ...

Ошибка компиляции: нет перегруженной бинарной операции +. - C++
Подскажите в чем ошибка. Компилятор говорит что нет перегруженной бинарной операции + для такого типа (41 строка) #include &lt;iostream&gt; ...

Функция, которая число с клавиатуры выводит в бинарной форме - C++
Kak mozno napisat funkciju ili programu, kotoraja zadanoje cislo na klaviature vivodit na ekran v binernoj forme. Spasibo


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru