Strona 1 z 1

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

: 19 gru 2011, o 19:02
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

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

: 19 gru 2011, o 21:02
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.

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

: 19 gru 2011, o 22:14
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

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

: 2 sty 2012, o 12:02
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...

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

: 2 sty 2012, o 14:29
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...