Nadesłany przez Marian, 24 lutego 2011 18:37
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
kolejka_2_c.cpp:
//kolejka (implementacja przy uzyciu listy dwukierunkowej)
//www.algorytm.org
#include<iostream>
using namespace std;
struct element
{
int liczba;
element *nastepny; // wskaznik na nastepny element
element *poprzedni; // wskaznik na poprzedni element
};
int main()
{
element *wierzcholek_kolejki = NULL; // lista jest pusta
element *koniec_kolejki = NULL; // lista jest pusta
element *pomoc = NULL; // wskaznik pomocniczy
cout << "Podaj jedna z instrukcji:\n"
<< "d liczba - aby dodac liczbe do kolejki\n"
<< "u - aby usunac liczbe z kolejki\n"
<< "w - aby wyswietlic zawartosc kolejki\n"
<< "CTRL+Z - aby zakonczyc\n";
char instrukcja;
while (cin >> instrukcja)
{
switch (instrukcja)
{
case 'd':
pomoc = new element; // tworzymy nowy obiekt
cin >> pomoc->liczba;
if (wierzcholek_kolejki == NULL) // jezeli kolejka jest pusta
{
pomoc->nastepny = pomoc->poprzedni = NULL;
koniec_kolejki = wierzcholek_kolejki = pomoc; // poczatek i koniec kolejki jest tym samym elementem
}
else
{
pomoc->nastepny = NULL;
koniec_kolejki->nastepny = pomoc; // dodajemy element na koniec wiec, ustawiamy wskaznik na niego w elemencie, ktory byl ostatni
pomoc->poprzedni = koniec_kolejki; // poprzednikiem nowego elementu jest dotychczasowy ostatni element
koniec_kolejki = pomoc; // ustawiamy koniec kolejki na nowym elemencie
}
break;
case 'u':
if (wierzcholek_kolejki != NULL)
{
pomoc = wierzcholek_kolejki; // ustawiamy pomoc na wierzcholek kolejki
if (wierzcholek_kolejki == koniec_kolejki) // jezeli jest tylko jeden element w kolejce
wierzcholek_kolejki = koniec_kolejki = NULL; // to teraz kolejka bedzie usta
else // jezeli jest wiecej elementow
wierzcholek_kolejki = wierzcholek_kolejki->nastepny; // przestawiamy wierzcholek na drugi element (pierwszy musimy usunac)
delete pomoc; // usuwamy element ze szczytu kolejki
}
else
cout << "Kolejka jest pusta\n";
break;
case 'w':
if (wierzcholek_kolejki != NULL)
{
cout << "Zawartosc kolejki:\n";
pomoc = wierzcholek_kolejki;
while (pomoc != NULL) // dopoki pokazujemy na jakis element kolejki (listy)
{
cout << pomoc->liczba << " ";
pomoc = pomoc->nastepny; // przechodzimy na nastepny element na liscie
}
}
else
cout << "Kolejka jest pusta";
cout << endl;
break;
default:
cout << "Musisz wybrac jedna z instrukcji:\nd - aby dodac element do kolejki, "
<< "u - aby usunac element z kolejki lub w - aby wyswietlic zawartosc kolejki\n";
break;
}
}
return 0;
}

