Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.16 KB | None | 0 0
  1. //kolejka (implementacja przy uzyciu listy dwukierunkowej)
  2. //www.algorytm.org
  3.  
  4. #include<iostream>
  5. using namespace std;
  6.  
  7. struct element
  8. {
  9.     int liczba;
  10.     element *nastepny; // wskaznik na nastepny element
  11.     element *poprzedni; // wskaznik na poprzedni element
  12. };
  13.  
  14. int main()
  15. {
  16.     element *wierzcholek_kolejki = NULL; // lista jest pusta
  17.     element *koniec_kolejki = NULL; // lista jest pusta
  18.     element *pomoc = NULL; // wskaznik pomocniczy
  19.     cout << "Podaj jedna z instrukcji:\n"
  20.          << "d liczba - aby dodac liczbe do stosu\n"
  21.          << "u - aby usunac liczbe ze stosu\n"
  22.          << "w - aby wyswietlic zawartosc stosu\n"
  23.          << "CTRL+Z - aby zakonczyc\n";
  24.     char instrukcja;
  25.     while (cin >> instrukcja)
  26.     {
  27.         switch (instrukcja)
  28.         {
  29.         case 'd':
  30.             pomoc = new element; // tworzymy nowy obiekt
  31.             cin >> pomoc->liczba;
  32.             if (wierzcholek_kolejki == NULL) // jezeli kolejka jest pusta
  33.             {
  34.                 pomoc->nastepny = pomoc->poprzedni = NULL;
  35.                 koniec_kolejki = wierzcholek_kolejki = pomoc; // poczatek i koniec kolejki jest tym samym elementem
  36.             }
  37.             else
  38.             {
  39.                 pomoc->nastepny = NULL;
  40.                 koniec_kolejki->nastepny = pomoc; // dodajemy element na koniec wiec, ustawiamy wskaznik na niego w elemencie, ktory byl ostatni
  41.                 pomoc->poprzedni = koniec_kolejki; // poprzednikiem nowego elementu jest dotychczasowy ostatni element
  42.                 koniec_kolejki = pomoc; // ustawiamy koniec kolejki na nowym elemencie
  43.             }
  44.             break;
  45.         case 'u':
  46.             if (wierzcholek_kolejki != NULL)
  47.             {
  48.                 pomoc = wierzcholek_kolejki; // ustawiamy pomoc na wierzcholek kolejki
  49.                 if (wierzcholek_kolejki == koniec_kolejki) // jezeli jest tylko jeden element w kolejce
  50.                     wierzcholek_kolejki = koniec_kolejki = NULL; // to teraz kolejka bedzie usta
  51.                 else // jezeli jest wiecej elementow
  52.                     wierzcholek_kolejki = wierzcholek_kolejki->nastepny; // przestawiamy wierzcholek na drugi element (pierwszy musimy usunac)
  53.                 delete pomoc; // usuwamy element ze szczytu stosu
  54.             }
  55.             else
  56.                 cout << "Kolejka jest pusta\n";
  57.             break;
  58.         case 'w':
  59.             if (wierzcholek_kolejki != NULL)
  60.             {
  61.                 cout << "Zawartosc kolejki:\n";
  62.                 pomoc = wierzcholek_kolejki;
  63.                 while (pomoc != NULL) // dopoki pokazujemy na jakis element stosu (listy)
  64.                 {
  65.                     cout << pomoc->liczba << " ";
  66.                     pomoc = pomoc->nastepny; // przechodzimy na nastepny element na liscie
  67.                 }
  68.             }
  69.             else
  70.                 cout << "Kolejka jest pusta";
  71.             cout << endl;
  72.             break;
  73.         default:
  74.             cout << "Musisz wybrac jedna z instrukcji:\nd - aby dodac element do stosu, "
  75.                  << "u - aby usunac element ze stosu lub w - aby wyswietlic zawartosc stosu\n";
  76.             break;
  77.         }
  78.     }
  79.  
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement