Witajcie , mam problem z listą dwukierunkową , która ma być sortowana od razu przy dodawaniu. Gdy sprawdzam program przy użyciu debugera wszystko wyświetla się poprawnie ale gdy uruchamiam program normalnie zostaje wyświetlona tylko jedna liczba.
Może ktoś z was znajdzie przyczynę. Z góry dziękuje za pomoc.
#include < iostream>
#include < string>
#include <fstream>
#include <ctime>
using namespace std;
//------------------------------ Struktura-------------------------------
struct Liczby
{
int a;
Liczby *next;
Liczby *prev;
};
Liczby * head=0;
Liczby *tail = 0;
//------------------------------Deklaracja Funkcji -----------------------------
void dodawanie(Liczby *&temp);
void kasowanie(Liczby *temp);
void wyswietlanie(Liczby *temp);
int wczytanie();
// ----------------------------Deklaracja Zmiennych
int X, k1, k2, k3, k4;
// ----------------------------MAIN -------------------------------------
void main()
{
Liczby *wsk;
wczytanie();
int i = 0;
while (i < 5)
{
dodawanie(wsk);
i++;
}
wyswietlanie(wsk);
kasowanie(wsk);
}
//--------------------------------Wczytanie Pliku-------------------------------
int wczytanie()
{
// Wczytywanie z pliku wartości X, k1, k2, k3, k4
fstream plik;
plik.open("inlab02.txt");
if (plik.is_open())
{
plik >> X;
plik >> k1;
plik >> k2;
plik >> k3;
plik >> k4;
plik.close(); //Uwaga! Niezamkniety plik to klopoty. Jak konczysz pracowac z plikiem zamknij go.
return X, k1, k2, k3, k4;
}
else
{
cout << "Blad otwierania pliku!" << endl;
}
return 0;
}
//-------------------------------Dodawnie wartosci do listy -------------------
void dodawanie(Liczby *&temp)
{
srand(time(NULL));
int losowa = 10 + rand() % 10000;
temp = head;
do
{
if (head == NULL)
{
// Lista jeste pusta , tworzymy pierwszy obiekt
temp = new Liczby;
temp->a = losowa;
head = temp;
tail = temp;
temp->next = 0;
temp->prev = 0;
}
else if (temp->next == NULL && temp->a < losowa)
{
// Czyli nasz obiekt będzie tym oststnim na liscie
temp->next = new Liczby;
temp->next->prev = temp;
temp = temp->next;
temp->next = NULL;
temp->a = losowa;
tail = temp;
}
else if (temp->a < losowa && temp->next->a > losowa)
{
Liczby *nowy = new Liczby;
nowy->a = losowa;
temp->prev->next = nowy;
nowy->prev = temp->prev;
temp->prev = nowy;
nowy->next = temp;
}
temp = temp->next;
} while (temp != NULL);
}
//-------------------------------Wyswietlanie listy-------------------------
void wyswietlanie(Liczby *temp)
{
temp = head;
while (temp != NULL)
{
cout << temp->a << endl;
temp = temp->next;
}
}
// ------------------------------Kasowanie listy------------------------------
void kasowanie(Liczby *temp)
{
temp = head;
Liczby*pomoc;
pomoc = temp;
pomoc = pomoc->next;
while (pomoc != NULL)
{
delete temp;
temp = pomoc;
pomoc = pomoc->next;
}
delete pomoc;
}