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

Podobne dokumenty