Witam wszystkich. Prosiłbym o analizę funkcji mającej na zadanie pozamieniać kolejność elementów w sposób bąbelkowy. Na tą chwilę jest niedokończona i nie mam pojęcia, jak ją zrobić. Pozdrawiam.
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
struct liczba {
int wartosc;
liczba *nastepna;
};
struct ciag {
liczba *glowa;
liczba *ogon;
};
static unsigned long int i = 0;
void dodajLiczbe (liczba * Liczba)
{
Liczba->wartosc = rand()%30;
cout << "Wprowadzono liczbe: " << Liczba->wartosc;
Liczba->nastepna = nullptr;
cout << endl;
system ("pause");
i++;
}
void wyswietlLiczbe (liczba Liczba)
{
cout << Liczba.wartosc << "\t";
}
void dodajDoCiagu (ciag &Ciag)
{
liczba * tmp = new liczba;
dodajLiczbe (tmp);
Ciag.ogon=Ciag.glowa;
if (Ciag.glowa == nullptr)
{
Ciag.ogon = tmp;
Ciag.glowa = Ciag.ogon;
}
else
{
while (Ciag.ogon->nastepna != nullptr)
{
Ciag.ogon = Ciag.ogon->nastepna; // przemieszczamy sie po wskaznikach, od glowy do pustego
}
Ciag.ogon->nastepna = tmp;
Ciag.ogon = tmp;
}
}
void wyswietlCiag (ciag Ciag)
{
if (Ciag.glowa == nullptr)
{
cout << "Ciag jest pusty." << endl;
system ("pause");
return;
}
else
{
while (Ciag.glowa != nullptr)
{
wyswietlLiczbe(*Ciag.glowa);
Ciag.glowa = Ciag.glowa ->nastepna;
}
}
system ("pause");
}
void posortujCiag (ciag &Ciag)
{
liczba * tmp = Ciag.glowa;
for (unsigned long int j=0; j<i; j++)
{
while (Ciag.glowa != nullptr)
{
if (Ciag.glowa->wartosc < Ciag.glowa->nastepna->wartosc)
{
liczba * tmp1 = Ciag.glowa;
Ciag.glowa = Ciag.glowa->nastepna;
Ciag.glowa->nastepna = tmp1;
delete tmp1;
}
Ciag.glowa = Ciag.glowa->nastepna;
}
Ciag.glowa = tmp;
}
}
void usunCiag (ciag &deleted)
{
liczba *skasuj = deleted.glowa;
if (deleted.glowa == nullptr)
{
cout << "Nie ma czego usuwac.";
system ("pause");
return;
}
else
while (deleted.glowa != nullptr)
{
skasuj = deleted.glowa;
deleted.glowa = deleted.glowa->nastepna;
delete skasuj;
}
}
int main ()
{
srand (time (NULL));
ciag Ciag;
Ciag.glowa = nullptr;
Ciag.ogon = Ciag.glowa;
short liczba;
do {
system ("cls");
liczba = 6;
cout << "Dostepne operacje:\n1. Dodaj liczbe do ciagu\n2. Wyswietl ciag\n3. Posortuj ciag\n4. Usun ciag\n5. Koniec\n";
cout << "Wprowadz numer operacji: ";
cin >> liczba;
switch (liczba)
{
case 1: dodajDoCiagu (Ciag); break;
case 2: wyswietlCiag (Ciag); break;
case 3: posortujCiag (Ciag); break;
case 4: usunCiag(Ciag);
default: break;
}
} while (liczba!=5);
system ("pause");
return 0;
}