slajdy-pdf
Transkrypt
slajdy-pdf
Kolejki Implementacje stosu Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/∼kuszner/ Strona główna Strona tytułowa JJ II J I [email protected] Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 12 Powrót Full Screen Zamknij Koniec Kolejki Implementacje stosu Strona główna Strona tytułowa 1. JJ II J I Kolejki • Kolejka FIFO (ang. first in first out) • Kolejka LIFO (ang. last in first out) - stos. Strona 2 z 12 Powrót Full Screen Zamknij Koniec Kolejki Implementacje stosu Strona główna Strona tytułowa Interfejs stosu (przykład) JJ II J I Operacje wykonywane na stosie • push(element) - odłóż element na stos • pop() - pobierz element ze stosu • isEmpty() - sprawdź, czy stos jest pusty Strona 3 z 12 Powrót Full Screen Zamknij Koniec Kolejki Implementacje stosu Strona główna Strona tytułowa 2. Możliwe implementacje stosu • tablica - ograniczona liczba przechowywanych elementów • rozszerzalna tablica JJ II J I Strona 4 z 12 • lista łączona Powrót Full Screen Zamknij Koniec Stos w tablicy Kolejki Implementacje stosu Rozpatrzmy klasę Klient: Strona główna class K l i e n t { public string i m i e ; public string nazwisko ; public string imieNazwisko { g e t { return i m i e + ” ” + nazwisko ; } } public override string ToString ( ) { return imieNazwisko ; } public K l i e n t ( string imie , string nazwisko ) { i f ( i m i e == ”” ) throw new Exception ( ) ; this . i m i e = i m i e ; i f ( nazwisko == ”” ) throw new Exception ( ) ; this . nazwisko = nazwisko ; } Strona tytułowa JJ II J I Strona 5 z 12 Powrót Full Screen Zamknij } Koniec Kolejki Implementacje stosu Strona główna Stos w tablicy c.d. Pierwsza próba implementacji stosu dla konkretnej klasy. Przykład 1. Strona tytułowa JJ II J I class S t o s { private K l i e n t [ ] k l i e n c i ; private int SP = 0 ; public S t o s ( ) { k l i e n c i = new K l i e n t [ 1 0 ] ; } public void push ( K l i e n t k ) { k l i e n c i [ SP++] = k ; } public K l i e n t pop ( ) { return k l i e n c i [−−SP ] ; } public bool isEmpty ( ) { return SP == 0 ; } } Strona 6 z 12 Powrót Full Screen Zamknij Koniec Kolejki Implementacje stosu Stos w tablicy c.d. Próba wykorzystania takiego stosu: class Program { static void Main ( ) { Klient x ; S t o s s = new S t o s ( ) ; x = new K l i e n t ( ”Jan” , ” Kowalski ” ) ; s . push ( x ) ; x = new K l i e n t ( ” Marian ” , ”Nowak” ) ; s . push ( x ) ; while ( ! s . isEmpty ( ) ) { Console . WriteLine ( s . pop ( ) ) ; } Strona główna Strona tytułowa JJ II J I Strona 7 z 12 Powrót Full Screen } } Zamknij Koniec Kolejki Implementacje stosu Strona główna Strona tytułowa Stos w tablicy c.d. JJ II J I Co się stanie, gdy? • pobieramy element z pustego stosu? • odłożymy element na stos, który jest już pełny? • dlaczego akurat 10 elementów jest ograniczeniem? Strona 8 z 12 Powrót Full Screen Zamknij Koniec Kolejki Implementacje stosu Strona główna Strona tytułowa Stos w tablicy c.d. JJ II public K l i e n t pop ( ) { J I i f (SP == 0) throw new Exception ( ” S t o s c l a s s e r r o r : ” + ” Stack i s empty w h i l e the element i s f e t c h e d ” ) ; Strona 9 z 12 return k l i e n c i [−−SP ] ; } Powrót Full Screen Zamknij Koniec Kolejki Implementacje stosu Strona główna Stos w tablicy c.d. public void push ( K l i e n t k ) { i f (SP == c a p a c i t y ) { K l i e n t [ ] temp = new K l i e n t [ c a p a c i t y ∗ 2 ] ; for ( int i = 0 ; i < k l i e n c i . Length ; ++i ) { temp [ i ] = k l i e n c i [ i ] ; } k l i e n c i = temp ; c a p a c i t y ∗= 2 ; } Strona tytułowa JJ II J I Strona 10 z 12 Powrót k l i e n c i [ SP++] = k ; } Full Screen Zamknij Koniec Kolejki Implementacje stosu Strona główna Stos w tablicy c.d. public void push ( K l i e n t k ) { i f (SP == c a p a c i t y ) { K l i e n t [ ] temp = new K l i e n t [ c a p a c i t y ∗ 2 ] ; for ( int i = 0 ; i < k l i e n c i . Length ; ++i ) { temp [ i ] = k l i e n c i [ i ] ; } k l i e n c i = temp ; c a p a c i t y ∗= 2 ; } Strona tytułowa JJ II J I Strona 11 z 12 Powrót k l i e n c i [ SP++] = k ; } Full Screen Zamknij Koniec Kolejki Implementacje stosu Strona główna Strona tytułowa JJ II J I Strona 12 z 12 Powrót Full Screen Zamknij Koniec