Marys Temat założony przez niniejszego użytkownika |
Strukty - na stos i ze stosu » 2011-01-24 03:43:44 Witam, teraz zajmuję się strukturami, a właściwie usuwaniem i sortowaniem ich. Czy macie może jakieś algorytmy i materiały, gdzie jest to ładnie opisane. Dla lepszego zrozumienia o co mi chodzi podaj treść przykładowego zadnia:
Utwórz listę składającą się z 10 elementów całkowitych wygenerowanych losowo z zakresu <1, 10>. Wyświetl listę. Wyszukaj element o wartości maksymalnej i określ położenie tego elementu. Usuń listę.
Chodzi głównie o znajdowanie danych elementów i dodawanie lub usuwanie oraz sortowanie.
|
|
dmx81 |
» 2011-01-24 07:44:31 pewnie chodzi ci tez o jakis kontener, np wektor na struktury - poszukaj sobie "sortowanie c++" (jest kilka rodzajow, najwolniejsze, ale chyba najprostsze do zrozumienia jest sortowanie babelkowe) - do tego poczytaj o wektorach - jest tam funkcja swap - zamieniajaca pozycje w wektorze miejscami, wiec jesli ladnie to zakodujesz i postawisz dobre warunki,np for( int j = 0; j < wektor.size() - 1; j++ ) { for( int i = 0; i < wektor.size() - 1; i++ ) { if( wektor[ i ]->wartosc1 < wektor[ i + 1 ]->wartosc1 ) swap( wektor[ i ], wektor[ i + 1 ] ); } }
cos takiego, wektor ma tez usuwanie z okreslonej pozycji (erase) i podajesz tam iterator (ew wektor.begin()+ktora_pozycja) PS>> post pisany w pospiechu, wiec nie traktuj kodu doslownie, moga pojawic sie w nim bledy logiczne ;) ale mniej wiecej tak to wyglada, sam musisz doczytac wiecej - wystrczy wygooglowac sortowanie C++ |
|
Marys Temat założony przez niniejszego użytkownika |
» 2011-01-24 13:18:08 Nie chodzi mi sortowanie bąbelkowe. Chodzi mi sortowanie list, struktur (struct). Później wrzucę przykład programu. |
|
ison |
» 2011-01-24 13:32:05 #include <list> #include <cstdio> #include <ctime> #include <algorithm>
int main() { srand( time( NULL ) ); std::list < int > MyList; for( int i = 0; i < 10; ++i ) MyList.push_back( rand() % 100 ); MyList.sort(); for( std::list < int >::iterator it = MyList.begin(); it != MyList.end(); ++it ) { printf( "%d ", * it ); } }
gdy chcesz posortować listę struktur to musisz użyć komparatora #include <list> #include <cstdio> #include <ctime> #include <algorithm>
struct Foo { int a; Foo() { } Foo( int new_a ) : a( new_a ) { } ~Foo() { } };
bool smaller( Foo & f1, Foo & f2 ) { return f1.a < f2.a; }
int main() { srand( time( NULL ) ); std::list < Foo > MyList; for( int i = 0; i < 10; ++i ) MyList.push_back( Foo( rand() % 100 ) ); MyList.sort( smaller ); for( std::list < Foo >::iterator it = MyList.begin(); it != MyList.end(); ++it ) { printf( "%d ", it->a ); } }
|
|
Marys Temat założony przez niniejszego użytkownika |
» 2011-01-31 00:08:29 Dobra, mam problem z posortowaniem z głupią listą jednokierunkową. To jest mój kod: #include <iostream.h> #include <conio.h> typedef struct El { int Wartosc; struct El * Nastepny; } ELEMENT; typedef struct { ELEMENT * Glowa; ELEMENT * Ogon; } INFO;
INFO * Wsk_Info; void Do_Listy( INFO * Wsk, int L ); void Tworz_Liste( INFO * Wsk, int n ); void Pisz_Liste( INFO * Wsk ); void Sortuj( INFO * Wsk ); void Usun_Liste( INFO * Wsk );
int main() { int n, L1; clrscr(); cout << "Podaj dgugosc listy: "; cin >> n; Wsk_Info = new INFO; Tworz_Liste( Wsk_Info, n ); cout << "\nOto lista:\n " << endl; Pisz_Liste( Wsk_Info ); Sortuj( Wsk_Info ); cout << "\n\nLista zmodyfikowana: \n\n"; Pisz_Liste( Wsk_Info ); Usun_Liste( Wsk_Info ); getch(); }
void Do_Listy( INFO * Wsk, int L )
{ ELEMENT * Nowy; Nowy = new ELEMENT; if( Wsk->Glowa == NULL ) { Wsk->Glowa = Nowy; Wsk->Ogon = Nowy; } else { Wsk->Ogon->Nastepny = Nowy; Wsk->Ogon = Nowy; } Nowy->Wartosc = L; Nowy->Nastepny = NULL; }
void Tworz_Liste( INFO * Wsk, int n ) { int i, L; Wsk->Glowa = NULL; Wsk->Ogon = NULL; cout << "Wprowadz kolejne elementy listy:\n"; for( i = 1; i <= n; i++ ) { cout << "el."; cout.width( 2 ); cout << i << " = "; L = random( 10 ) + 1; cout << L << "\n"; Do_Listy( Wsk, L ); } }
void Pisz_Liste( INFO * Wsk )
{ ELEMENT * Biezacy; int i = 0; Biezacy = Wsk->Glowa; if( Wsk->Glowa == NULL ) cout << "Lista jest pusta\n"; else while( Biezacy != NULL ) { i++; cout.width( 2 ); cout << Biezacy->Wartosc << endl; Biezacy = Biezacy->Nastepny; } }
void Sortuj( INFO * Wsk )
{ ELEMENT * Biezacy, * Przed, * Po, * Tmp; int po, przed; Biezacy = Wsk->Glowa; do { Przed = Biezacy; Po = Biezacy->Nastepny; po = Po->Wartosc; przed = Przed->Wartosc; Tmp = Po->Nastepny; if( przed > po ) { Biezacy = Po; Biezacy->Nastepny = Przed; Przed->Nastepny = Biezacy->Nastepny->Nastepny; } Biezacy = Biezacy->Nastepny; } while(( Biezacy != NULL ) &&( po == 0 ) ); }
void Usun_Liste( INFO * Wsk ) { int i = 0; ELEMENT * Biezacy, * Usuniety; Biezacy = Wsk->Glowa; if( Wsk->Glowa == NULL ) cout << "Lista jest pusta"; else { while( Biezacy != NULL ) { i++; Usuniety = Biezacy; Biezacy = Biezacy->Nastepny; delete Usuniety; } if( Biezacy == NULL ) cout << "\nListe usunieto" << endl; } }
W funkcji sortuj jest mój kod, ale mi nie działa :/ Już paru rzeczy próbowałem, ale nie wychodzi mi i już się trochę pogubiłem. Już zrobiłem udało się :) |
|
« 1 » |