[C++ ] Łączenie list jednokierunkowych w całość

kachna
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 7 maja 2011, o 13:13
Płeć: Kobieta
Lokalizacja: Olsztyn

[C++ ] Łączenie list jednokierunkowych w całość

Post autor: kachna »

Witam!
Mam problem z zadaniem, w którym mam połączyć dwie listy jednokierunkowe w jedną listę uporządkowaną. Uporządkowanie pojedynczych list już poszło, tylko to sklejenie w ogóle jakoś mi nie wychodzi...

Struktura i funkcje, które udało mi się do tej pory stworzyć to:

Kod: Zaznacz cały

struct element
 {
        int info;
        element *nast;
        };
        
 struct element2
 {
        int info2;
        element *nast2;
        };
void TworzListeOdwr (element *&pocz)
  {
       int wartosc;
       char odp;
       
       cout<<"Podaj pierwszy element listy nr 1"<<endl;
       do
       {
                    cin>>wartosc;
                    DolaczPocz(pocz, wartosc);
                    cout<<"Czy nastepny element?(T/N)"<<endl;
                    cin>>odp;
                    }
       while(toupper(odp)!='N');
       }
void TworzListeOdwr2 (element *&pocz)
  {
       int wartosc;
       char odp;
       
       cout<<"Podaj pierwszy element listy nr 2"<<endl;
       do
       {
                    cin>>wartosc;
                    DolaczPocz(pocz, wartosc);
                    cout<<"Czy nastepny element?(T/N)"<<endl;
                    cin>>odp;
                    }
       while(toupper(odp)!='N');
       }
void PiszListe(element *pocz)
 {
      if(pocz!=NULL)
      do {
          cout <<setw(6)<<(pocz->info)<<endl;
          pocz = pocz -> nast;
          }
          while (pocz!=NULL);
          else cout<<"Lista pusta"<<endl;
          }
          
void DolaczPocz(element *&pocz, int wartosc)
 {
      element *nowy = new element;
      nowy -> info = wartosc;
      nowy -> nast= pocz;
      pocz = nowy;
} 
void sort(element *&pocz) 
{ 
     short int ilosc = 0; 
     for (element * p = pocz; p; p = p->nast) ++ilosc; 
     long int temp; 
     short int i, j; 
     if (ilosc) ilosc--; 
     for(i = 0; i < ilosc; i++) 
         for (element * p = pocz; p->nast; p = p->nast) 
             if(p->info < p->nast->info) 
             { 
                 temp = p->info; 
                 p->info = p->nast->info; 
                 p->nast->info = temp; 
             } 
}
Pozdrawiam,
(Bardzo) początkująca programistka
Ostatnio zmieniony 19 gru 2011, o 20:31 przez Afish, łącznie zmieniany 1 raz.
Powód: Kody umieszczaj w tagach code.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[C++ ] Łączenie list jednokierunkowych w całość

Post autor: wawek91 »

Hm to tak na szybko. Przede wszystkim nie potrzebne Ci są 2 struktury element i element2 skoro zawierają to samo. Struktury są właśnie po to, żeby móc tworzyć wiele obiektów bez powtarzania jednego i tego samego kodu. A jeśli chodzi o łączenie obiektów to do metody przekaż 2 listy i niech metoda zwraca jedną połączoną liste. W tej metodzie wystarczy zrobić tak, żeby koniec jednej listy wskazywał na początek tej kolejnej. Później zapuszczasz na zwróconej połączonej liscie metode sortującą i koniec zadania.
Xitami

[C++ ] Łączenie list jednokierunkowych w całość

Post autor: Xitami »

sortowanie bąbelkowe w sumie czemu nie
ale sortować w ten sposób listę powstałą z dwu posortowanych to już raczej grzech

a ja zrobiłbym trzecię listę i dodawał większy z tych dwu
kachna
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 7 maja 2011, o 13:13
Płeć: Kobieta
Lokalizacja: Olsztyn

[C++ ] Łączenie list jednokierunkowych w całość

Post autor: kachna »

wawek91 pisze:Hm to tak na szybko. Przede wszystkim nie potrzebne Ci są 2 struktury element i element2 skoro zawierają to samo. Struktury są właśnie po to, żeby móc tworzyć wiele obiektów bez powtarzania jednego i tego samego kodu. A jeśli chodzi o łączenie obiektów to do metody przekaż 2 listy i niech metoda zwraca jedną połączoną liste. W tej metodzie wystarczy zrobić tak, żeby koniec jednej listy wskazywał na początek tej kolejnej. Później zapuszczasz na zwróconej połączonej liscie metode sortującą i koniec zadania.
Dziękuję bardzo
A jak zrobić, żeby koniec jednej listy wskazywał na początek kolejnej? Odnoszę wrażenie, że mam problem ze zrozumieniem mechanizmu ustawiania wskaźników w listach...
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

[C++ ] Łączenie list jednokierunkowych w całość

Post autor: matshadow »

Tak przy okazji, czy tu nie ma błędu?

Kod: Zaznacz cały

struct element2
{
        int info2;
        element *nast2;
        };
jeśli nie ma być element2 *nast2, to nie widzę sensu w osobnej strukturze...
ODPOWIEDZ