#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; } |
English