Stos - struktura LIFO 1. Stos jest strukturą jest strukturą danych

Transkrypt

Stos - struktura LIFO 1. Stos jest strukturą jest strukturą danych
Stos - struktura LIFO
1. Stos jest strukturą jest strukturą danych często używanych w algorytmach
komputerowych.
2. Stos jest strukturą danych, do której dostęp jest możliwy tylko od strony tzw.
wierzchołka, czyli Last In First Out (LIFO) - ostatni będą pierwszymi.
Przykład:
Stos kart do gry. Kładziemy karty jedna na drugiej.
Gdy chcemy zobaczyć pierwszą z położonych kart, musimy
najpierw zdjąć jedną kartę położoną jako ostatnia, potem
następne karty aż do pierwszej położonej karty.
3. Do obsługi stosu stosuje się zazwyczaj:
 funkcję push(x) - odkładanie danych na wierzchołek stosu, x jest zmienną
danego typu.
Funkcja może zwracać kod błędu, np. stałą typu
całkowitego, która informuje programistę, czy nie nastąpiła próba odłożenia
na stosie w momencie gdy był on przepełniony (brak pamięci).
 funkcję pop(x) - pobranie elementu ze stosu, x jest zmienną danego typu.
Funkcja może zwracać kod błędu, np. stałą typu całkowitego, która
informuje programistę, czy nie nastąpiła próba zdjęcia ze stosu gdy był on
pusty.
4. Implementacja
#include <iostream>
using namespace std;
class stos{
private: struct wezel{
int liczba; wezel * next;
wezel (int x, wezel * t){ //konstruktor
liczba = x;
next = t;
}
};
typedef wezel * doWezla; // wskaźnik do węzła,doWezla będzie typem
oznaczającym
doWezla szczyt;
public: stos();
void push (int elem);
int pop();
void write ();
};
stos::stos(){ //konstruktor klasy stos
szczyt=NULL;
}
void stos::push(int elem){ //funkcja z klasy stos dodająca element do stosu
szczyt=new wezel(elem, szczyt);
cout <<"Element dodany do stosu: " << elem << endl;
}
int stos::pop(){ //funkcja z klasy stos zdejmująca element ze stosu
if (szczyt == NULL){
cout <<"Stos jest pusty.\n";
return 0 ;
}
else{
int zdjety = szczyt -> liczba; doWezla t = szczyt -> next;
delete szczyt; szczyt = t;
cout <<"Element zdjety ze stosu: " << zdjety << endl;
return zdjety;
}
}
void stos::write(){ //funkcja z klasy stos wypisująca elementy ze stosu
doWezla temp;
temp = szczyt;
cout << "Stan stosu: ";
while( temp != NULL){
cout << temp -> liczba << " ";
temp = temp -> next;
}
cout << endl;
}
int main(int argc, char** argv) {
stos st;
// st obiekt klasy stos
st.write();
st.pop();
st.push(2);
st.write();
st.push(8);
st.write();
st.push(14);
st.write();
st.pop();
st.write();
st.pop();
st.write();
st.push(4);
st.write();
return 0;
}
-----------BIBLIOGRAFIA:
Algorytmy, struktury danych i techniki programowania; Piotr Wróblewski ;
Wydanie V; Helion 2015
Algorytmy i struktury danych; Aho A. V., Hopcroft J. E, Ullman J. D.;Helion 2003