pepe450 Temat założony przez niniejszego użytkownika |
Kopcowanie. » 2014-06-06 15:43:38 Witam mam za zadanie napisać program, buduje kopiec o ilości elementów podanych przez użytkownika. A następnie usuwa z korzenia element też określoną przez użytkownika ilość razy. Budowanie kopca napisałem ale nie mam pomysłu jak się zabrać za usuwanie. Proszę o jakieś wskazówki. #include<iostream> #include<iomanip> using namespace std; void kop( int dane[], int rozmiar ); void pokaz( int dane[], int rozmiar ); int budowanie( int dane[], int element ); void usuwanie( int dane[], int ile, int rozmiar ); int main() { const int rozmiar = 1000; int dane[ rozmiar ]; kop( dane, rozmiar ); } void kop( int dane[], int rozmiar ) { int element; int ile; int wielkosctablicy; cout << endl; cout << "Ile elementow chcesz dodac do kopca?" << endl; cin >> ile; for( int i = 1; i <= ile; i++ ) { cout << endl; cout << "Podaj element numer: " << i; cout << endl; cin >> element; wielkosctablicy = budowanie( dane, element ); pokaz( dane, i ); } cout << "Ile elementow chcesz usunac?" << endl; int ile2; cin >> ile2; usuwanie( dane, ile2, wielkosctablicy ); } void pokaz( int dane[], int rozmiar ) { int i = 1; int n = 6; while( i <= rozmiar ) { cout << i << " " << setw( n ) << dane[ i ] << endl; i++; } } int budowanie( int dane[], int element ) { static int licznik = 0; licznik++; int k; int l; l = licznik; k = licznik / 2; dane[ l ] = element; while(( k > 0 ) &&( dane[ k ] > element ) ) { swap( dane[ k ], dane[ l ] ); l = k; if( k > 1 ) k = k / 2; element = dane[ l ]; } return licznik; } void usuwanie( int dane[], int ile, int rozmiar ) { }
|
|
pekfos |
» 2014-06-06 20:33:39 |
|
pepe450 Temat założony przez niniejszego użytkownika |
» 2014-06-07 01:04:29 #include<iostream> #include<iomanip> using namespace std; void kop( int dane[], int rozmiar ); void pokaz( int dane[], int rozmiar ); int budowanie( int dane[], int element ); void usuwanie( int dane[], int ile, int rozmiar ); int main() { const int rozmiar = 1000; int dane[ rozmiar ]; kop( dane, rozmiar ); } void kop( int dane[], int rozmiar ) { int element; int ile; int wielkosctablicy; cout << endl; cout << "Ile elementow chcesz dodac do kopca?" << endl; cin >> ile; for( int i = 1; i <= ile; i++ ) { cout << endl; cout << "Podaj element numer: " << i; cout << endl; cin >> element; wielkosctablicy = budowanie( dane, element ); pokaz( dane, i ); } cout << "Ile elementow chcesz usunac?" << endl; int ile2; cin >> ile2; usuwanie( dane, ile2, wielkosctablicy ); } void pokaz( int dane[], int rozmiar ) { int i = 1; int n = 6; while( i <= rozmiar ) { cout << i << " " << setw( n ) << dane[ i ] << endl; i++; } } int budowanie( int dane[], int element ) { static int licznik = 0; licznik++; int k; int l; l = licznik; k = licznik / 2; dane[ l ] = element; while(( k > 0 ) &&( dane[ k ] > element ) ) { swap( dane[ k ], dane[ l ] ); l = k; if( k > 1 ) k = k / 2; element = dane[ l ]; } return licznik; } void usuwanie( int dane[], int ile, int rozmiar ) { int k = 1; int l = 2; int x = 2; dane[ k ] = dane[ rozmiar ]; rozmiar--; while( l < rozmiar ) { if( dane[ l ] <= dane[ l + 1 ] ) { cout << "A" << endl; cout << "K" << k << endl; cout << "L" << l << endl; swap( dane[ k ], dane[ l ] ); } else { cout << "B" << endl; cout << "K" << k << endl; cout << "L" << l << endl; swap( dane[ k ], dane[ l + 1 ] ); } k = l; l = x * 2; x = x * 2; } pokaz( dane, rozmiar ); }
Napisałem funkcję usuwającą tylko nie wiem jak sprawdzać czy doszedłem do poziomu liści. Jakaś porada by się przydała. :) |
|
pekfos |
» 2014-06-07 19:20:13 |
|
pepe450 Temat założony przez niniejszego użytkownika |
» 2014-06-07 23:00:11 Czytałem stronkę ale nie wiem jak się zabezpieczyć w sytuacji gdy dochodzę do przed ostatniej gałęzi. w wtedy mam sprawdzić potomków a prawego potomka nie ma |
|
pekfos |
» 2014-06-07 23:51:00 Jak masz n elementów w kopcu, numerowanych 1..n, to jak nie ma prawego potomka, to jego numer jest większy od n. W czym problem..? |
|
pepe450 Temat założony przez niniejszego użytkownika |
» 2014-06-08 04:06:55 Ok dałem radę. :) Dzięki za pomoc. |
|
« 1 » |