#include <iostream> using namespace std; // Struktura ELEMENTU struct elem{ int dane; // Dane obiektu elem * nast; // Wskazanie na następny obiekt }; // Dodaj element na stos void push(elem * &stos, int x){ elem * nowy = new elem; // Stwórz element nowy -> dane = x; // Dodaj dane nowy -> nast = stos; // Wskaż na poprzedni obiekt stos = nowy; } // Zdejmij element ze stosu int pop(elem * &stos){ // Czy coś jest na stosie? if(stos != NULL){ elem * stary = stos; // zapamiętaj ostatnią wartość na stosie int wynik = stos -> dane; // spisz wartość obiektu stos = stary->nast; // przekieruj stos poziom niżej delete stary; // zniszcz zdjęty obiekt return wynik; // wypisz wynik na wyjście } // Stos jest pusty! else{ cout << "Stos jest pusty..." << endl; return 0; } } // Dodaj element do KOLEJKI void add(elem* &pocz, elem* &kon, int x){ // Jeśli kolejka nie jest pusta if(kon!=NULL){ elem* nowy = new elem; // Stwórz nowy element nowy->dane = x; // Przypisz mu dane nowy->nast = NULL; // Wskaż na wolne miejsce kon->nast = nowy; // Przesuń koniec kolejki kon = nowy; // Przypisz ostatni element } // Kolejka jest pusta else { elem* nowy = new elem; // Stwórz nowy element nowy->dane = x; // Przypisz mu dane nowy->nast = NULL; // Wskaż na wolne miejsce kon = nowy; // Przypisz ostatni element pocz = nowy; // Przypisz pierwszy element } } // Wyrzuć element z kolejki int next(elem * &pocz, elem* &kon){ // Jeśli kolejka nie jest pusta if(pocz!=NULL){ elem* stary = pocz; // Wczytaj element int wynik = stary->dane; // Zapisz wynik if (pocz==kon) kon=NULL; // Jeśli to był jedyny element wyzeruj kolejke pocz = stary->nast; // Przesuń początek delete stary; // Usuń element return wynik; // Zwróć wynik } // Kolejka pusta else{ cout << "Kolejka jest pusta..." << endl; return 0; } } // Odwroc stos kolejka void obrotKolej(elem* &stos, elem* &pocz, elem* &kon){ // Przenoś stos do kolejki while(stos!=NULL){ add(pocz, kon, pop(stos)); } // Przenos z kolejki na stos while(kon!=NULL){ push(stos,next(pocz,kon)); } } // Pokaz stos void pokazStos(elem* stos){ elem* tmp = stos; // Stos pomocniczy while (tmp != NULL) { // Dopóki nie jest pusty if (tmp != stos) { // Dodawaj stralki cout << " "; } cout << tmp->dane; // Pokaz wartosc tmp = tmp->nast; // Przesun stos pomocniczy } cout << endl; // Dodaj enter } int main() { elem *stos1 = NULL; int n, t, a; cin >> n; cin >> t; while(cin>>a){ push(stos1, a); if(cin.eof()) break; } if(t%2!=0){ pokazStos(stos1); } else{ elem *pocz = NULL; elem *kon = NULL; obrotKolej(stos1,pocz,kon); pokazStos(stos1); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | #include <iostream> using namespace std; // Struktura ELEMENTU struct elem{ int dane; // Dane obiektu elem * nast; // Wskazanie na następny obiekt }; // Dodaj element na stos void push(elem * &stos, int x){ elem * nowy = new elem; // Stwórz element nowy -> dane = x; // Dodaj dane nowy -> nast = stos; // Wskaż na poprzedni obiekt stos = nowy; } // Zdejmij element ze stosu int pop(elem * &stos){ // Czy coś jest na stosie? if(stos != NULL){ elem * stary = stos; // zapamiętaj ostatnią wartość na stosie int wynik = stos -> dane; // spisz wartość obiektu stos = stary->nast; // przekieruj stos poziom niżej delete stary; // zniszcz zdjęty obiekt return wynik; // wypisz wynik na wyjście } // Stos jest pusty! else{ cout << "Stos jest pusty..." << endl; return 0; } } // Dodaj element do KOLEJKI void add(elem* &pocz, elem* &kon, int x){ // Jeśli kolejka nie jest pusta if(kon!=NULL){ elem* nowy = new elem; // Stwórz nowy element nowy->dane = x; // Przypisz mu dane nowy->nast = NULL; // Wskaż na wolne miejsce kon->nast = nowy; // Przesuń koniec kolejki kon = nowy; // Przypisz ostatni element } // Kolejka jest pusta else { elem* nowy = new elem; // Stwórz nowy element nowy->dane = x; // Przypisz mu dane nowy->nast = NULL; // Wskaż na wolne miejsce kon = nowy; // Przypisz ostatni element pocz = nowy; // Przypisz pierwszy element } } // Wyrzuć element z kolejki int next(elem * &pocz, elem* &kon){ // Jeśli kolejka nie jest pusta if(pocz!=NULL){ elem* stary = pocz; // Wczytaj element int wynik = stary->dane; // Zapisz wynik if (pocz==kon) kon=NULL; // Jeśli to był jedyny element wyzeruj kolejke pocz = stary->nast; // Przesuń początek delete stary; // Usuń element return wynik; // Zwróć wynik } // Kolejka pusta else{ cout << "Kolejka jest pusta..." << endl; return 0; } } // Odwroc stos kolejka void obrotKolej(elem* &stos, elem* &pocz, elem* &kon){ // Przenoś stos do kolejki while(stos!=NULL){ add(pocz, kon, pop(stos)); } // Przenos z kolejki na stos while(kon!=NULL){ push(stos,next(pocz,kon)); } } // Pokaz stos void pokazStos(elem* stos){ elem* tmp = stos; // Stos pomocniczy while (tmp != NULL) { // Dopóki nie jest pusty if (tmp != stos) { // Dodawaj stralki cout << " "; } cout << tmp->dane; // Pokaz wartosc tmp = tmp->nast; // Przesun stos pomocniczy } cout << endl; // Dodaj enter } int main() { elem *stos1 = NULL; int n, t, a; cin >> n; cin >> t; while(cin>>a){ push(stos1, a); if(cin.eof()) break; } if(t%2!=0){ pokazStos(stos1); } else{ elem *pocz = NULL; elem *kon = NULL; obrotKolej(stos1,pocz,kon); pokazStos(stos1); } return 0; } |