Stos (informatyka) - Google

Stos (informatyka)

Z Wikipedii

Skocz do: nawigacji, szukaj

Stos (ang. Stack) – liniowa struktura danych, w której dane dokładane są na wierzch stosu i z wierzchołka stosu są pobierane (bufor typu LIFO, Last In, First Out; ostatni na wejściu, pierwszy na wyjściu). Ideę stosu danych można zilustrować jako stos położonych jedna na drugiej książek – nowy egzemplarz kładzie się na wierzch stosu i z wierzchu stosu zdejmuje się kolejne egzemplarze. Elementy stosu poniżej wierzchołka stosu można wyłącznie obejrzeć, aby je ściągnąć, trzeba najpierw po kolei ściągnąć to, co jest nad nimi.

Przeciwieństwem stosu jest kolejka, bufor typu FIFO (ang. First In, First Out; pierwszy na wejściu, pierwszy na wyjściu), w którym dane obsługiwane są w takiej kolejności, w jakiej zostały dostarczone (jak w kolejce do kasy).

Spis treści

[edytuj] Podstawowe operacje

W powyższym opisie pojawiły się pewne operacje, jakie można wykonywać na stosie. Oto ich formalny zapis:

  • push(obiekt) – czyli odłożenie obiektu na stos;
  • pop() – ściągnięcie obiektu ze stosu i zwrócenie jego wartości;
  • isEmpty() - sprawdzenie czy na stosie znajdują się już jakieś obiekty.

[edytuj] Implementacja

Strukturami danych służącymi do reprezentacji stosu mogą być tablice (gdy znamy maksymalny rozmiar stosu), tablice dynamiczne lub listy. Złożoność obliczeniowa operacji na stosie zależy od konkretnej implementacji, ale w większości przypadków jest to czas stały O(1).

[edytuj] Tablica statyczna

Class Stos
     {
     Tablica[0..MAX_ROZMIAR]   //tablica elemntow stosu o rozmiarze MAX_ROZMIAR
     licznik = 0;
     
     Push(Wartosc)
         Tablica[licznik] = Wartosc;
         licznik = licznik + 1;
     Pop()
         licznik = licznik - 1;
         return Tablica[licznik];
     };

[edytuj] Lista

Class Element_stosu
    poprzednik       // Wskaznik na poprzedni element stosu 
    wartosc          // Wartość przechowywana w danym elemencie stosu

Klasa Stos
    Top = NULL       //Wierzchołek stosu 
    
    Push(Wartosc)    //dodanie elementu 
       nowy = Nowy element stosu 
       nowy.wartosc = Wartosc
       nowy.poprzednik = Top
       Top = nowy 
    Pop()            //sciagniecie elementu
       wartosc = Top.wartosc 
       pomocnik = Top
       Top = Top.poprzednik
       usun(pomocnik) //usun sciagniety wierzcholek

[edytuj] Przykład – stos i odwrotna notacja polska

Stos znajduje zastosowanie przy obliczaniu wyrażeń zapisanych za pomocą odwrotnej notacji polskiej (RPN). Algorytm wygląda następująco:

  • Wyzeruj stos.
  • Dla wszystkich symboli z wyrażenia RPN wykonuj:
    • jeśli i-ty symbol jest liczbą, to odłóż go na stos,
    • jeśli i-ty symbol jest operatorem to:
      • zdejmij ze stosu jeden element (ozn. a),
      • zdejmij ze stosu kolejny element (ozn. b),
      • odłóż na stos wartość b operator a.
  • Zdejmij ze stosu wynik.

F1: Niemcy rozczarowani - tak źle nie było od 17 lat
Brytyjczyk Lewis Hamilton (McLaren) wystartuje z pierwszej pozycji do niedzielnego wyścigu Formuły 1 o Grand Prix Niemiec, który rozpocznie się o godzinie 14.00 na torze Hockenheim. Robert Kubica (BMW Sauber) rozpocznie zawody z czwartej linii.
Barcelona chce zmusić swoją gwiazdę do odejścia
Nowy trener piłkarzy Barcelony Josep Guardiola dał do zrozumienia Kameruńczykowi Samuelowi Eto'o, że musi poszukać sobie nowego klubu - poinformowały w niedzielę hiszpańskie media.
Rosja: niespodziewana porażka drużyny Kowalczyka
Piłkarze Dynama Moskwa doznali niespodziewanej porażki w 14. kolejce rosyjskiej ekstraklasy, ulegając w dalekim Władywostoku tamtejszej drużynie Łucz-Energia 0:1.
OM: trzy "złota" Olejnika w biegu na orientację
Michał Olejnik (UKS Azymut Pabianice) zdobył trzy złote medale w konkurencjach indywidualnych XIV Olimpiady Młodzieży "Kujawsko-Pomorskie 2008" w biegu na orientację. Także trzy medale (jeden złoty i dwa srebrne) wywalczyła Hanna Klimkowska (LKO Leszno).
Puchar Davisa: sukces Polaków
Polscy tenisiści zapewnili sobie zwycięstwo nad Białorusią w spotkaniu pierwszej rundy baraży o utrzymanie się w Grupie I Strefy Euroafrykańskiej rozgrywek o Puchar Davisa. Punkt na 3:0 zdobył debel Mariusz Fyrstenberg i Marcin Matkowski.
Linki: Strona gwna