Algorytmy i Struktury Danych.
|
|
- Mieczysław Kania
- 4 lat temu
- Przeglądów:
Transkrypt
1 Algorytmy i Struktury Danych. Podstawowe struktury danych, cd. Wykład na podstawie ksiażki Roberta Sedgewicka i Kevina Wayne: Algorithms. Furth Edition. Princeton University dr hab. Bożena Woźna-Szcześniak Jan Długosz University, Poland Wykład 7 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 1 / 67
2 Parametryzowany stos o stałym rozmiarze I import java.util.nosuchelementexception; import java.util.scanner; import java.util.arrays; public class ArrayStack<Item> { private Item [] a; private int N; //Inicjalizacja pustego stosu. public ArrayStack(int size) { a = (Item[]) new Object[size]; // Zwraca true, gdy stos jest pusty public boolean isempty() { return N == 0 ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 2 / 67
3 Parametryzowany stos o stałym rozmiarze II //Zwraca liczbe elementow na stosie. public int size() { return N; // Dodaje element do stosu public void push(item item) { if (N >= a.length) throw new NoSuchElementException("Stos pelny"); a[n++] = item; //Usuwa element ze stosu public Item pop() { if (isempty()) throw new NoSuchElementException("Stos pusty"); Item item = a[--n]; // pozwala na zapobieganie wyciekom poamieci Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 3 / 67
4 Parametryzowany stos o stałym rozmiarze III a[n] = null; return item; //Zwraca szczyt stosu, ale go nie usuwa public Item peek() { if (isempty()) throw new NoSuchElementException("Stos pusty"); return a[n]; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 4 / 67
5 Uwagi dotyczace stosu o stałym rozmiarze Rozmiar stosu jest stały. Problem z nadmiarem, tj. zgłaszany jest wyjatek przy próbie dodania nowego element do pełnego stosu. Pytanie: czy implementacja tablicowa stosu może być bardziej elastyczna, tzn. czy można w efektywny sposób zwiększać i zmniejszać tablice. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 5 / 67
6 Rozwiazanie problemu nadmiaru I Jeśli tablica jest pełna, utwórz nowa tablicę o rozmiarze dwukrotnie większym i skopiuj elementy. public class ResizeArrayStack <Item > { private Item [ ] a = ( Item [ ] ) new Object [ 1 ] ; private i n t N = 0; / / l i c z b a elementow. / / Dodaje element do stosu public void push ( Item item ) { / Usuwamy wyjatek i f (N >= a. length ) throw new NoSuchElementException ( " Stos pelny " ) ; / i f (N == a. length ) r e s i z e (2 a. l e n g t h ) ; a [N++] = item ; / / metoda przenosi stos o rozmiarze N <= max / / do nowej t a b l i c y o rozmiarze max Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 6 / 67
7 Rozwiazanie problemu nadmiaru II private void r e s i z e ( i n t max) { Item [ ] temp = ( Item [ ] ) new Object [ max ] ; for ( i n t i = 0; i < N; i ++) temp [ i ] = a [ i ] ; a = temp ; Koszt wstawienie pierwszych N elementów: N + ( N) 3N. 1 dostęp k operacji podwojenia do tablicy na 1 push tablicy Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 7 / 67
8 Rozwiazanie problemu nadmiaru III $ java ResizeArrayStack 256 ( Zwieksza :1) ( Zwieksza :2) ( Zwieksza :4) ( Zwieksza :8) ( Zwieksza :16) ( Zwieksza :32) ( Zwieksza :64) ( Zwieksza :128) Wykonanie dla $ java ResizeArrayStack 12 pokazujace Ilość elementów na stosie (N), jego rozmiar i zawartość. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 8 / 67
9 Rozwiazanie problemu nadmiaru IV Rozmiar push() N stosu Zawartość stos 0 1 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 9 / 67
10 Rozwiazanie problemu nadmiaru pustego miejsca I Jeśli tablica jest w 1/4 pełna, zmniejsz tablicę o połowę. public Item pop ( ) { i f ( isempty ( ) ) throw new NoSuchElementException ( " Stos pusty " ) ; Item item = a[ N ] ; a [N] = null ; / / pozwala na zapobieganie wyciekom poamieci i f (N > 0 && N == a. l e n g t h / 4 ) r e s i z e ( a. length / 2 ) ; return item ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 10 / 67
11 Ślad zmiany rozmiaru tablicy a. Stos push pop N length null wolne to 1 1 to wolne be 2 2 to be wolne or 3 4 to be or null wolne not 4 4 to be or not wolne to 5 8 to be or not to null null null - to 4 8 to be or not null null null null be 5 8 to be or not be null null null - be 4 8 to be or not null null null null - not 3 8 to be or null null null null null that 4 8 to be or that null null null null - that 3 8 to be or null null null null null - or 2 4 to be null null wolne - be 1 2 to null wolne is 2 2 to is wolne Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 11 / 67
12 Stos o zmiennym rozmiarze - ResizeArrayStack.java I import java. u t i l. NoSuchElementException ; import java. u t i l. Scanner ; import java. u t i l. Arrays ; public class ResizeArrayStack <Item > { private Item [ ] a = ( Item [ ] ) new Object [ 1 ] ; private i n t N = 0; public boolean isempty ( ) { return N == 0 ; public i n t size ( ) { return N; private void r e s i z e ( i n t max) { Item [ ] temp = ( Item [ ] ) new Object [ max ] ; for ( i n t i = 0; i < N; i ++) temp [ i ] = a [ i ] ; a = temp ; public void push ( Item item ) { i f (N == a. length ) r e s i z e (2 a. length ) ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 12 / 67
13 Stos o zmiennym rozmiarze - ResizeArrayStack.java II a [N++] = item ; public Item pop ( ) { i f ( isempty ( ) ) throw new NoSuchElementException ( " Stos pusty " ) ; Item item = a[ N ] ; a [N] = null ; i f (N > 0 && N == a. l e n g t h / 4 ) r e s i z e ( a. length / 2 ) ; return item ; public Item peek ( ) { i f ( isempty ( ) ) throw new NoSuchElementException ( " Stos pusty " ) ; return a [N ] ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 13 / 67
14 Implementacje stosu: tablicowa vs dynamiczna Implementacja dynamiczna (lista węzłów): Każda operacja wymaga stałego czasu, również w najgorszym przypadku. Wykorzystuje dodatkowy czas i pamięć na obsługę dowiazań. Tablicowa implementacja z tablica o zmiennym rozmiarze: Każda operacja wymaga stałego kosztu zamortyzowanego. 1 Mniej zmarnowanej pamięci. 1 Koszt zamortyzowany - miara złożoności obliczeniowej operacji na strukturze danych. Koszt zamortyzowany operacji jest średnim czasem wykonania przypadajacym na jedna operację w pesymistycznym ciagu operacji. Koszt zamortyzowany różni się od kosztu oczekiwanego tym, że bierze pod uwagę ciag operacji i nie jest metoda probabilistyczna Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 14 / 67
15 Parametryzowana kolejka o stałym rozmiarze I import java. u t i l. NoSuchElementException ; import java. u t i l. Scanner ; import java. u t i l. Arrays ; public class ArrayQueue <Item > { private Item [ ] a ; private i n t N; private i n t head ; private i n t t a i l ; public ArrayQueue ( i n t size ) { a = ( Item [ ] ) new Object [ size ] ; N=0; head = t a i l = 0; public boolean isempty ( ) { return N==0 ; public i n t size ( ) { return N; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 15 / 67
16 Parametryzowana kolejka o stałym rozmiarze II public void enqueue ( Item item ) { i f ( head == ( t a i l +1)%a. l e n g t h ) throw new NoSuchElementException ( " Kelejka pelna " ) ; a [ t a i l ++] = item ; i f ( t a i l == a. l e n g t h ) t a i l =0; N++; public Item dequeue ( ) { i f ( isempty ( ) ) throw new NoSuchElementException ( " Kolejka pusta " ) ; Item item = a [ head ] ; a [ head++]= null ; / / k o n t r o l a wycieku pamieci i f ( head == a. length ) head =0; N ; return item ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 16 / 67
17 Parametryzowana kolejka o stałym rozmiarze III public Item peek ( ) { i f ( isempty ( ) ) throw new NoSuchElementException ( " Kolejka pusta " ) ; return a [ head ] ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 17 / 67
18 Uwagi dotyczace kolejki o stałym rozmiarze Rozmiar kolejki jest stały. Problem z nadmiarem, tj. zgłaszany jest wyjatek przy próbie dodania nowego element do pełnej kolejki. Pytanie: czy implementacja tablicowa kolejki może być bardziej elastyczna, tzn. czy można w efektywny sposób zwiększać i zmniejszać tablice. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 18 / 67
19 Rozwiazanie problemu nadmiaru I Jeśli tablica jest pełna, utwórz nowa tablicę o rozmiarze dwukrotnie większym i skopiuj elementy. public class ResizeArrayQueue <Item > { private Item [ ] a ; private i n t N; / / rozmiar k o l e j k i private i n t head ; private i n t t a i l ; / / Dodaje element do k o l e j k i public void enqueue ( Item item ) { / i f ( head == ( t a i l +1)%a. l ength ) throw new NoSuchElementException ( " Kelejka pelna " ) ; / i f (N == a. length ) r e s i z e (2 a. l e n g th ) ; a [ t a i l ++] = item ; i f ( t a i l == a. l e n g t h ) t a i l =0; N++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 19 / 67
20 Rozwiazanie problemu nadmiaru II / / metoda przenosi k o l e j k e o rozmiarze N <= max / / do nowej t a b l i c y o rozmiarze max private void r e s i z e ( i n t max) { a s sert max >= N; Item [ ] temp = ( Item [ ] ) new Object [ max ] ; for ( i n t i = 0; i < N; i ++) { temp [ i ] = a [ ( head + i ) % a. l ength ] ; a = temp ; head = 0; t a i l = N; Wykonanie dla $ java ResizeArrayQueue 12 pokazujace Ilość elementów w kolejce (N), jej rozmiar i zawartość. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 20 / 67
21 Rozwiazanie problemu nadmiaru III enque Rozmiar ue() N kolejki Zawartość kolejki 0 2 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 21 / 67
22 Rozwiazanie problemu nadmiaru pustego miejsca Jeśli tablica jest w 1/4 pełna, zmniejsz tablicę o połowę. public Item dequeue ( ) { i f ( isempty ( ) ) throw new NoSuchElementException ( " Kolejka pusta " ) ; Item item = a [ head ] ; a [ head++]= null ; / / k o n t r o l a wycieku pamieci N ; i f ( head == a. length ) head =0; i f (N > 0 && N == a. l e n g t h / 4 ) r e s i z e ( a. length / 2 ) ; return item ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 22 / 67
23 Ślad zmiany rozmiaru tablicy a. Kolejka enq deq N length null null wolne null wolne wolne null wolne wolne null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null wolne null wolne wolne Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 23 / 67
24 Implementacje kolejki: tablicowa vs dynamiczna Implementacja dynamiczna (lista węzłów): Każda operacja wymaga stałego czasu, również w najgorszym przypadku. Wykorzystuje dodatkowy czas i pamięć na obsługę dowiazań. Tablicowa implementacja z tablica o zmiennym rozmiarze: Każda operacja wymaga stałego kosztu zamortyzowanego. Mniej zmarnowanej pamięci. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 24 / 67
25 Parametryzowana kolejka o zmiennym rozmiarze I import java. u t i l. NoSuchElementException ; import java. u t i l. Scanner ; import java. u t i l. Arrays ; public class ResizeArrayQueue <Item > { private Item [ ] a ; private i n t N; private i n t head ; private i n t t a i l ; public ResizeArrayQueue ( ) { a = ( Item [ ] ) new Object [ 2 ] ; head = t a i l = 0; N=0; public boolean isempty ( ) { return N==0 ; public i n t size ( ) { return N; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 25 / 67
26 Parametryzowana kolejka o zmiennym rozmiarze II private void r e s i z e ( i n t c a p a c i t y ) { assert capacity >= N; Item [ ] temp = ( Item [ ] ) new Object [ c a p acity ] ; for ( i n t i = 0; i < N; i ++) { temp [ i ] = a [ ( head + i ) % a. l e ngth ] ; a = temp ; head = 0; t a i l = N; / / Dodaje element do k o l e j k i public void enqueue ( Item item ) { i f (N == a. l e n g t h ) r e s i z e (2 a. l e n gth ) ; a [ t a i l ++] = item ; N++; i f ( t a i l == a. l e n g t h ) t a i l =0; / / Usuwa element z k o l e j k i Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 26 / 67
27 Parametryzowana kolejka o zmiennym rozmiarze III public Item dequeue ( ) { i f ( isempty ( ) ) throw new NoSuchElementException ( " Kolejka pusta " ) ; Item item = a [ head ] ; a [ head++] = null ; N ; i f ( head == a. length ) head =0; i f (N > 0 && N == a. l e n g t h / 4 ) r e s i z e ( a. length / 2 ) ; return item ; / / Zwraca poczatek k o l e j k i, ale go nie usuwa public Item peek ( ) { i f ( isempty ( ) ) throw new NoSuchElementException ( " Kolejka pusta " ) ; return a [ head ] ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 27 / 67
28 Lista Lista - struktura danych, w których elementy sa ułożone w liniowym porzadku. Porzadek na liście określaja wskaźniki zwiazane z każdym elementem listy. Lista jedno- i dwukierunkowa - notacja wspólna head[l] - pierwszy element listy L. Jeżeli head[x]=nil to lista jest pusta. tail[l] - ostatni element listy L. key[x] - klucz znajdujacy się w węźle x. next[x] - następnik elementu x. Jeżeli next[x]=nil to x nie ma następnika, jest więc ostanim elementem listy (tzw. ogon). Lista dwukierunkowa - notacja dodatkowa prev[x] - poprzednik elementu x. Jeżeli prev[x]=nil to x nie ma poprzednika, jest więc pierwszym elementem listy (tzw. głowa). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 28 / 67
29 Lista jedno- i dwu kierunkowa - schemat Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 29 / 67
30 Podstawowe operacje na listach Dodawanie elementu do listy Wyszukiwanie elementu na liście Usuwanie elementu z listy Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 30 / 67
31 Dodawanie elementu do listy jednokierunkowej na poczatek Dane wejściowe: Położenie pierwszego elementu listy; Dodawany klucz; Algorytm: List-add-front(List L,Item item) 1: Utwórz nowy węzeł x; 2: key[x] := item; 3: next[x] := head[l]; 4: if head[l] = NULL then 5: head[l] := x; 6: tail[l] := x; 7: else 8: head[l] := x; 9: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 31 / 67
32 Dodawanie elementu do listy jednokierunkowej na poczatek Złożoność Procedura List-add-front(List L,Item item) owy węzeł zawierajacy klucz item na poczatek listy jednokierunkowej. Procedura List-add-front na liście o n elementach działa w czasie O(1). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 32 / 67
33 Dodawanie elementu do listy jednokierunkowej na koniec Dane wejściowe: Położenie ostatniego elementu na liście; Dodawany klucz; Algorytm: List-add-back(List L,Item item) 1: Utwórz nowy węzeł x; 2: key[x] := item; 3: next[x] := NULL; 4: if head[l] = NULL then 5: head[l] := x; 6: tail[l] := x; 7: else 8: next[tail[l]] := x; 9: tail[l] := x; 10: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 33 / 67
34 Dodawanie elementu do listy jednokierunkowej na koniec Złożoność Procedura List-add-back(List L,Item item) dodaje nowy węzeł zawierajacy klucz item na koniec listy jednokierunkowej. Procedura List-add-back na liście o n elementach działa w czasie O(1). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 34 / 67
35 Węzeł listy jednokierunkowej class Node<T> { private T data ; private Node<T> next ; public Node ( T data, Node<T> next ) { this. data = data ; this. next = next ; public void setdata ( T data ) { this. data = data ; public void setnext ( Node<T> next ) { this. next = next ; public T getdata ( ) { return data ; public Node<T> getnext ( ) { return next ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 35 / 67
36 Dodawanie elementu do listy na poczatek i na koniec I public class L i s t <T> implements I t e r a b l e <T> { private i n t n = 0; / / l i c z b a elementow l i s t y private Node<T> f i r s t ; / / poczatek l i s t y private Node<T> l a s t ; / / koniec l i s t y public L i s t ( ) { f i r s t = null ; l a s t = null ; public boolean isempty ( ) { return n == 0; public i n t size ( ) { return n ; public Node<T> gethead ( ) { return f i r s t ; public Node<T> g e t T a i l ( ) { return l a s t ; public void add_front ( T item ) { Node<T> p = new Node<T>( item, n u l l ) ; n++; i f ( f i r s t == null ) { f i r s t = l a s t = p ; else { p. setnext ( f i r s t ) ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 36 / 67
37 Dodawanie elementu do listy na poczatek i na koniec II f i r s t = p ; public void add_back ( T item ) { Node<T> p = new Node<T>( item, n u l l ) ; n++; i f ( f i r s t == null ) { f i r s t = l a s t = p ; else { l a s t. setnext ( p ) ; l a s t = p ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 37 / 67
38 Iterowanie I Cel: Dodać obsługę iteracji po elementach listy, bez ujawniania jej wewnętrznej reprezentacji. i N Ala ma kota a kot ma mysz null null null first current Ala ma kota a kot ma mysz Utwórz listę implementujac a interfejs import java.util.iterator. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 38 / 67
39 Iterowanie II Czym jest interfejs Iterable w Javie? Interfejs Iterable ma tylko jedna metodę o nazwie iterator(). Metoda iterator() musi zwrócić iterator, który może być użyty do iteracji elementów obiektu implementujacego interfejs Iterable. Definicja interfejsu Iterable: public interface I t e r a b l e <T> { public I t e r a t o r <T> i t e r a t o r ( ) ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 39 / 67
40 Iterowanie III Czym jest Iterator w Javie? Interfejs Iterator posiada metody hasnext() oraz next(). Metoda bool hasnext() sprawdza, czy istnieje następny element w pewnej kolekcji (liście). Metoda T next() zwraca element na ktury pokazuje iterator i przesuwa iterator do następnego elementu. Definicja interfejsu Iterator: public interface I t e r a t o r <T> { public boolean hasnext ( ) ; public T next ( ) ; public void remove ( ) ; / / mozna pominac Zobacz: implementing-iterable.html Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 40 / 67
41 Iterowanie IV import java. u t i l. I t e r a t o r ; public class L i s t <T> implements I t e r a b l e <T> { / /... zawrtosc klasy z poprzedniego s l a j d u / /... plus to co p o n i z e j public I t e r a t o r <T> i t e r a t o r ( ) { return new L i s t I t e r a t o r ( this ) ; private class L i s t I t e r a t o r implements I t e r a t o r <T> { private Node<T> c u r r e n t ; public L i s t I t e r a t o r ( L i s t <T> l i s t ) { c u r r e n t = l i s t. gethead ( ) ; public boolean hasnext ( ) { return c u r r e n t!= null ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 41 / 67
42 Iterowanie V public void remove ( ) { throw new UnsupportedOperationException ( ) ; public T next ( ) { i f (! hasnext ( ) ) throw new NoSuchElementException ( ) ; T item = c u r r e n t. getdata ( ) ; c u r r e n t = c u r r e n t. getnext ( ) ; return item ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 42 / 67
43 Iterowanie VI Dlaczego warto używać interfejsu Iterable? Dostajemy elegancki kod przy pomycy konstrukcji "foreach": public class L i s t <T> implements I t e r a b l e <T> {... public void show ( ) { I t e r a t o r <T> i = this. i t e r a t o r ( ) ; while ( i. hasnext ( ) ) System. out. p r i n t ( i. next ( ) + " " ) ; System. out. p r i n t l n ( ) ; public void show2 ( ) { for ( T item : this ) System. out. p r i n t ( item + " " ) ; System. out. p r i n t l n ( ) ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 43 / 67
44 Wyszukiwanie elementu na liście Algorytm wyszukiwania elementu w liście jednokierunkowej Cel: Wyszukanie elementu na liście; Dane wejściowe: Położenie pierwszego elementu listy; Kryterium poszukiwania, np. wartość danej elementarnej; Algorytm: List-Search(Lista L,klucz k) 1: x := head[l]; 2: while (x!= NULL and key[x]!= k) do 3: x := next[x]; 4: end while 5: return x; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 44 / 67
45 Wyszukiwanie elementu na liście Złożoność Procedura List-Search(L, k) wyznacza pierwszy element o kluczu k na liście L. Ponieważ niekiedy potrzebne jest przejście całej listy L, aby znaleźć element o kluczu k, to pesymistyczny czas działania procedury List-Search na liście o n elementach wynosi O(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 45 / 67
46 Implementacja metody w klasie List I public class L i s t <T> implements I t e r a b l e <T> {... public Node<T> search ( T k ) { Node<T> p = this. f i r s t ; while ( ( p!= null ) && ( p. getdata ( )!= k ) ) p = p. getnext ( ) ; return p ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 46 / 67
47 Usuwanie wskazanego elementu z listy jednokierunkowej Dane wejściowe: Położenie pierwszego elementu listy; Element do usunięcia; Algorytm: List-Delete(L,x) 1: if (x == head[l]) then 2: head[l] := next[x]; 3: else 4: y := head[l]; 5: while (next[y]!=x) do 6: y := next[y]; 7: end while 8: next[y]:= next[x]; 9: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 47 / 67
48 Usuwanie elementu z listy jednokierunkowej Złożoność Procedura List-Delete usuwa element x z listy L. Ponieważ niekiedy potrzebne jest przejście całej listy L, aby znaleźć element x, to pesymistyczny czas działania procedury List-Delete na liście o n elementach wynosi O(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 48 / 67
49 Usuwanie elementu z listy jednokierunkowej I public T removefirst ( ) { i f ( isempty ( ) ) return null ; T answer = f i r s t. getdata ( ) ; n ; i f ( n == 0) { f i r s t = null ; l a s t = null ; else { Node<T> p = f i r s t ; f i r s t = f i r s t. getnext ( ) ; p = null ; return answer ; public T removelast ( ) { i f ( isempty ( ) ) return null ; T answer = l a s t. getdata ( ) ; n ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 49 / 67
50 Usuwanie elementu z listy jednokierunkowej II / / b y l jeden element i f ( n == 0) { f i r s t = null ; l a s t = null ; return answer ; i f ( n == 1) { l a s t = null ; l a s t = f i r s t ; return answer ; / / > 2 eleenty Node<T> p = f i r s t ; while ( p. getnext ( )!= l a s t ) p = p. getnext ( ) ; l a s t = p ; p. setnext ( null ) ; return answer ; public void remove ( T k ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 50 / 67
51 Usuwanie elementu z listy jednokierunkowej III { i f ( isempty ( ) ) return ; / / czy element j e s t na l i s c i e Node<T> p = this. f i r s t ; while ( ( p!= null ) && ( p. getdata ( )!= k ) ) p = p. getnext ( ) ; i f ( p == null ) { System. out. p r i n t l n ( " Elementu " + k + " nie ma na l i s c i e " ) ; return ; / / j e s t co najmniej 1 element n ; / / usuwamy pierwszy e l eent i f ( k == f i r s t. getdata ( ) ) { removefirst ( ) ; return ; / / usuwamy o s t a t n i element i f ( k == l a s t. getdata ( ) ) { removelast ( ) ; return ; / / usuwamy ze srodka Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 51 / 67
52 Usuwanie elementu z listy jednokierunkowej IV p = this. f i r s t ; while ( ( p. getnext ( )!= null ) && ( ( p. getnext ( ) ). getdata ( )!= k ) ) { p = p. getnext ( ) ; Node<T> q = p. getnext ( ) ; Node<T> r = p. getnext ( ). getnext ( ) ; p. setnext ( r ) ; q = null ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 52 / 67
53 Lista jedno- i dwu kierunkowa - schemat Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 53 / 67
54 Węzeł listy dwukierunkowej class Node<T> { private T data ; private Node<T> next ; private Node<T> prev ; public Node ( T data, Node<T> n, Node<T> p ) { data = d ; next = n ; prev = p ; public void setdata ( T d ) { data = d ; public void setnext ( Node<T> n ) { next = n ; public void setprev ( Node<T> p ) { prev = p ; public T getdata ( ) { return data ; public Node<T> getnext ( ) { return next ; public Node<T> getprev ( ) { return prev ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 54 / 67
55 Dodawanie elementu do listy dwukierunkowej na poczatek Dane wejściowe: Położenie pierwszego elementu listy ; Dodawany klucz; Algorytm: List-add-front(Lista L, Item item) 1: Utwórz nowy węzeł x; 2: key[x] := item; prev[x] := NULL; next[x]:= head[l]; 3: if (head[l]!= NULL) then 4: prev[head[l]] := x; 5: end if 6: head[l] := x; 7: if Lista L jest pusta then 8: tail[l] = x; 9: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 55 / 67
56 Dodawanie elementu do listy dwukierunkowej na poczatek Złożoność Procedura List-add-front(Lista L, Item item) dodaje nowy węzeł zawierajacy klucz item na poczatek listy. Procedura List-add-front na liście o n elementach działa w czasie O(1). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 56 / 67
57 Dodawanie elementu do listy dwukierunkowej na poczatek public void a d d F i r s t ( T item ) { Node<T> p = new Node<T>( item, null, null ) ; p. setnext ( f i r s t ) ; i f ( f i r s t!= null ) { f i r s t. setprev ( p ) ; f i r s t = p ; i f ( n==0) { / / l i s t a pusa l a s t = p ; n++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 57 / 67
58 Dodawanie elementu do listy dwukierunkowej na koniec Dane wejściowe: Położenie ostatniego elementu listy. Dodawany klucz. Algorytm: List-add-end(Lista L, Item item) 1: Utwórz nowy węzeł x; 2: key[x] := item; next[x] := NULL; prev[x] := NULL; 3: if (L jest pusta) then 4: head[l] : = x; tail[l] := x; 5: else 6: prev[x] := tail[l]; 7: if (tail[l]!= NULL) then 8: next[tail[l]] := x; 9: end if 10: tail[l] := x; 11: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 58 / 67
59 Dodawanie elementu do listy dwukierunkowej na koniec Złożoność Procedura List-add-end(Lista L, Item item) dodaje nowy węzeł zawierajacy klucz item na koniec listy jednokierunkowej. Procedura List-add-end na liście o n elementach działa w czasie O(1). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 59 / 67
60 Dodawanie elementu do listy dwukierunkowej na koniec public void addlast ( T item ) { Node<T> p = new Node<T>( item, null, null ) ; i f ( n==0) { / / l i s t a pusta f i r s t = p ; l a s t = p ; else { / / j e s t co najmniej jedn element p. setprev ( l a s t ) ; i f ( l a s t!= null ) l a s t. setnext ( p ) ; l a s t = p ; n++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 60 / 67
61 Wyszukiwanie elementu na liście dwukierunkowej Dane wejściowe: Położenie pierwszego elementu listy; Kryterium poszukiwania klucz; Algorytm: List-Search(Lista L, Item item) 1: x := head[l]; 2: while (x!= NULL and key[x]!= item) do 3: x := next[x]; 4: end while 5: return x; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 61 / 67
62 Wyszukiwanie elementu na liście dwukierunkowej Złożoność Procedura List-Search(Lista L, Item item) wyznacza pierwszy węzeł zawierajacy klucz item na liście L. Ponieważ niekiedy potrzebne jest przejście całej listy L, aby znaleźć element o kluczu k, to pesymistyczny czas działania procedury List-Search na liście o n elementach wynosi O(n). Uwaga Implementacja identyczna do tej z listy jednokierunkowej. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 62 / 67
63 Usuwanie pierwszego elementu z listy dwukierunkowej public T removefirst ( ) { i f ( isempty ( ) ) return null ; T answer = f i r s t. getdata ( ) ; n ; i f ( n == 0) { f i r s t = null ; l a s t = null ; else { Node<T> p = f i r s t ; f i r s t = f i r s t. getnext ( ) ; f i r s t. setprev ( null ) ; p = null ; return answer ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 63 / 67
64 Usuwanie ostatniego elementu z listy dwukierunkowej public T removelast ( ) { i f ( isempty ( ) ) return null ; T answer = l a s t. getdata ( ) ; n ; / / b y l jeden element i f ( n == 0) { f i r s t = null ; l a s t = null ; return answer ; / / byly 2 elementy i f ( n == 1) { l a s t = null ; l a s t = f i r s t ; return answer ; / / byly > 2 eleenty Node<T> p = l a s t. getprev ( ) ; l a s t = null ; p. setnext ( null ) ; l a s t = p ; return answer ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 64 / 67
65 Usuwanie wybranego klucza z listy dwukierunkowej I public void remove ( T k ) { i f ( isempty ( ) ) return ; / / czy element j e s t na l i s c i e Node<T> p = search ( k ) ; i f ( p == null ) { System. out. p r i n t l n ( " Elementu " + k + " nie ma na l i s c i e " ) ; return ; / / j e s t co najmniej 1 element n ; / / usuwamy pirwszy e l e e n t i f ( k == f i r s t. getdata ( ) ) { removefirst ( ) ; return ; / / usuwamy o s t a t n i element i f ( k == l a s t. getdata ( ) ) { Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 65 / 67
66 Usuwanie wybranego klucza z listy dwukierunkowej II removelast ( ) ; return ; / / usuwamy ze srodka Node<T> q = p. getprev ( ) ; Node<T> r = p. getnext ( ) ; q. setnext ( r ) ; r. setprev ( q ) ; p = null ; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 66 / 67
67 Usuwanie wybranego klucza z listy dwukierunkowe Złożoność Metoda remove(t k) usuwa z listy pierwszy znaleziony węzeł zawierajacy klucz k. Ponieważ niekiedy potrzebne jest przejście całej listy, aby znaleźć węzeł z kluczem k, to pesymistyczny czas działania metody remove na liście o n elementach wynosi O(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 7 67 / 67
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Liniowe struktury danych - Lista Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Liniowe struktury danych - Lista uporzadkowana. Wartownicy. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD)
Bardziej szczegółowoLista, Stos, Kolejka, Tablica Asocjacyjna
Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,
Bardziej szczegółowoStruktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:
Struktura danych Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych: rekord tablica lista stos kolejka drzewo i jego odmiany (np. drzewo
Bardziej szczegółowoMetody getter https://www.python-course.eu/python3_object_oriented_programming.php 0_class http://interactivepython.org/runestone/static/pythonds/index.html https://www.cs.auckland.ac.nz/compsci105s1c/lectures/
Bardziej szczegółowoStruktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:
Struktura danych Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych: rekord tablica lista stos kolejka drzewo i jego odmiany (np. drzewo
Bardziej szczegółowoKurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Bardziej szczegółowoAlgorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych
Algorytmy i Struktury Danych Wykład IV Sortowania cd. Elementarne struktury danych 1 Co dziś? Dolna granica sortowań Mediany i statystyki pozycyjne Warstwa implementacji Warstwa abstrakcji #tablice #listy
Bardziej szczegółowoKurs programowania. Wykład 9. Wojciech Macyna
Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy
Bardziej szczegółowoDynamiczne struktury danych
Listy Zbiór dynamiczny Zbiór dynamiczny to zbiór wartości pochodzących z pewnego określonego uniwersum, którego zawartość zmienia się w trakcie działania programu. Elementy zbioru dynamicznego musimy co
Bardziej szczegółowoRealizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski
Realizacja ekstensji klasy Paulina Strzelecka, Tomasz Roszkowski Przechowywanie obiektów (odwolañ do obiektów) w Javie typ wbudowany - tablica zbiór klas kontenerowych Paulina Strzelecka, Tomasz Roszkowski
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Grafy dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 1 / 20
Bardziej szczegółowoParadygmaty programowania. Paradygmaty programowania
Paradygmaty programowania Paradygmaty programowania Dr inż. Andrzej Grosser Cz estochowa, 2013 2 Spis treści 1. Zadanie 2 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do zadania..............................
Bardziej szczegółowoProgramowanie w języku Java. Kolekcje
Programowanie w języku Java Kolekcje Definicja Kolekcja to obiekt, który grupuje elementy danych (inne obiekty) i pozwala traktować je jak jeden zestaw danych, umożliwiając jednocześnie wykonywanie na
Bardziej szczegółowoDynamiczne struktury danych
Dynamiczne struktury danych 391 Dynamiczne struktury danych Przez dynamiczne struktury danych rozumiemy proste i złożone struktury danych, którym pamięć jest przydzielana i zwalniana na żądanie w trakcie
Bardziej szczegółowoWykład 5 Wybrane zagadnienia programowania w C++ (c.d.)
Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1 Kontenery W programowaniu
Bardziej szczegółowoJava Collections Framework
Java Collections Framework Co to jest Java Collections Framework JCF Zunifikowana architektura do reprezentacji i manipulacji kolekcjami danych. Składa się z: Interfejsów Definuje abstrakcyjne typy możliwych
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Podstawowe struktury danych. Wykład na podstawie ksiażki Roberta Sedgewicka i Kevina Wayne: Algorithms. Furth Edition. Princeton University dr hab. Bożena Woźna-Szcześniak
Bardziej szczegółowoKolekcje w Javie cz. 1
Kolekcje w Javie cz. 1 Programowanie obiektowe Jacek Sroka na podstawie materiałów Janusza Jabłonowskiego 8 kwietnia 2013 Po co są kolekcje? Po co są kolekcje? A po co są programy? Żeby manipulować danymi.
Bardziej szczegółowoAlgorytmy i Struktury Danych
Algorytmy i Struktury Danych Drzewa poszukiwań binarnych dr hab. Bożena Woźna-Szcześniak Jan Długosz University, Poland Wykład 8 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 1 /
Bardziej szczegółowoAlgorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Bardziej szczegółowoPlatformy Programistyczne Podstawy języka Java
Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo
Bardziej szczegółowoLaboratorium z przedmiotu Programowanie obiektowe - zestaw 04
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Liniowe struktury danych. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład
Bardziej szczegółowoWydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego Łódź. Java podstawy języka, wykład 4 1
Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego 03.12.2010 Łódź Java podstawy języka, wykład 4 1 Stosując blokady (synchronizację) Można doprowadzić do zablokowania wszystkich wątków Zakleszczenie
Bardziej szczegółowoProgramowanie Obiektowe (Java)
1. Wprowadzenie do kontenerów Wykład ósmy Kontenery s ą obiektami, które potrafi ą przechowywa ć inne obiekty w określony sposób. O kontenerach można myśle ć jako o gotowych do użycia strukturach danych.
Bardziej szczegółowoWstęp do programowania
Wieczorowe Studia Licencjackie Wrocław, 9.01.2007 Wstęp do programowania Wykład nr 13 Listy usuwanie elementów Poniżej prezentujemy funkcję, która usuwa element o podanej wartości pola wiek z nieuporządkowanej
Bardziej szczegółowoStos LIFO Last In First Out
Stos LIFO Last In First Out Operacje: push - dodanie elementu na stos pop - usunięcie elementu ze stosu empty - sprawdzenie, czy stos jest pusty size - zwrócenie liczby elementów na stosie value (peek)
Bardziej szczegółowoAlgorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)
Algorytmy i struktury danych Wykład 3: Stosy, kolejki i listy Dr inż. Paweł Kasprowski pawel@kasprowski.pl Kolejki FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Stos (stack) Dostęp jedynie
Bardziej szczegółowoProgramowanie i struktury danych
Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie
Bardziej szczegółowoJęzyki i metody programowania Java INF302W Wykład 2 (część 1)
Języki i metody programowania Java INF302W Wykład 2 (część 1) Autor Dr inż. Zofia Kruczkiewicz Autor: Zofia Kruczkiewicz, Języki i metody programowania Java, wykład 2, część 1 1 Struktura wykładu 1. Identyfikacja
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych
Bardziej szczegółowoStruktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Bardziej szczegółowoDynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)
Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013
Bardziej szczegółowoWykład 4. Klasa List Kolejki Stosy Słowniki
Wykład 4 Klasa List Kolejki Stosy Słowniki Klasa List Poważną niedogodnością tablic jako kolekcji danych jest fakt, że muszą one mieć stały rozmiar. Programista musi wiedzieć z góry ile miejsca powinien
Bardziej szczegółowoPorządek symetryczny: right(x)
Porządek symetryczny: x lef t(x) right(x) Własność drzewa BST: W drzewach BST mamy porządek symetryczny. Dla każdego węzła x spełniony jest warunek: jeżeli węzeł y leży w lewym poddrzewie x, to key(y)
Bardziej szczegółowoKiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja
1 struktura, kolekcja Kiedy potrzebne Duża liczba danych takiego samego typu tablice a jak nieznana liczba elementów? dane zawierające wartości różnego typu (osoba: pesel, nazwisko, rok urodzenia, pracuje/niepracuje,
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Podstawowe struktury danych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.
Bardziej szczegółowoAlgorytmy i Struktury Danych
Algorytmy i Struktury Danych Drzewa poszukiwań binarnych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 12 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Abstrakcyjne struktury danych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury
Bardziej szczegółowoKolekcje - pakiet Java Collections Framework
Programowanie obiektowe Kolekcje - pakiet Java Collections Framework Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Definicja kolekcji
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Organizacja wykładu. Problem Sortowania. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury
Bardziej szczegółowoLista dwukierunkowa - przykład implementacji destruktorów
Lista dwukierunkowa - przykład implementacji destruktorów Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2008 Bogdan Kreczmer Niniejszy dokument zawiera
Bardziej szczegółowoListy, kolejki, stosy
Listy, kolejki, stosy abc Lista O Struktura danych składa się z węzłów, gdzie mamy informacje (dane) i wskaźniki do następnych węzłów. Zajmuje tyle miejsca w pamięci ile mamy węzłów O Gdzie można wykorzystać:
Bardziej szczegółowoPodstawowe algorytmy i ich implementacje w C. Wykład 9
Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny
Bardziej szczegółowoPodstawy programowania obiektowego
Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie
Bardziej szczegółowoAlgorytmy i złożoności. Wykład 3. Listy jednokierunkowe
Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie
Bardziej szczegółowoPodstawowe struktury danych
Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym
Bardziej szczegółowoE S - uniwersum struktury stosu
Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów
Bardziej szczegółowoMateriał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach
Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach 27 kwietnia 2012 Wiedząc, że deklarowanie typu rekordowego w języku C/ C++ wygląda następująco: struct element
Bardziej szczegółowoDariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Problem: Jak zaimplementować stos? Co się stanie gdy dodamy do stosu obiekt typu Czlowiek? Co się stanie, gdy spróbujemy ten obiekt odczytać
Bardziej szczegółowoAlgorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2
Algorytmy i struktury danych Wykład 6 Tablice rozproszone cz. 2 Na poprzednim wykładzie Wiele problemów wymaga dynamicznych zbiorów danych, na których można wykonywać operacje: wstawiania (Insert) szukania
Bardziej szczegółowoPodstawy otwartych języków programowania Przechowywanie danych
Podstawy otwartych języków programowania Przechowywanie danych Wiktor Wandachowicz Sposoby przechowywania danych Typy podstawowe Pojedyncze obiekty Tablice obiektów i tablice typów podstawowych jednowymiarowe
Bardziej szczegółowoKolekcje - pakiet Java Collections Framework
Programowanie obiektowe Kolekcje - pakiet Java Collections Framework Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Programowanie obiektowe
Bardziej szczegółowoKurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
Bardziej szczegółowoKOLEJKA (QUEUE) (lista fifo first in, first out)
KOLEJKA (QUEUE) (lista fifo first in, first out) Kolejki są listami, których elementy można wstawiać z jednego końca (rear-tył) a usuwać z drugiego (front - przód). Operacje: 1. MAKENULL(Q) czyni kolejkę
Bardziej szczegółowoAlgorytmy i Struktury Danych. Anna Paszyńska
Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;
Bardziej szczegółowoWykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Bardziej szczegółowoProgramowanie i struktury danych 1 / 44
Programowanie i struktury danych 1 / 44 Lista dwukierunkowa Lista dwukierunkowa to liniowa struktura danych skªadaj ca si z ci gu elementów, z których ka»dy pami ta swojego nast pnika i poprzednika. Operacje
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami
Bardziej szczegółowojava.util.* :Kolekcje Tomasz Borzyszkowski
java.util.* :Kolekcje Tomasz Borzyszkowski Wstęp Kolekcje w Java dają programiście pewien standardowy sposób radzenia sobie z przetwarzaniem grup obiektów. Implementacja kolekcji w Java składa się z następujących
Bardziej szczegółowoDawid Gierszewski Adam Hanasko
Dawid Gierszewski Adam Hanasko Chcemy stworzyć klasę w której możemy przechowywać dwie zmienne dowolnych typów Tworzymy tyle różnych klas ile potrzeba: Class ParaInt{ int pierwszy; Int drugi; Class ParaButow{
Bardziej szczegółowoDrzewa wyszukiwań binarnych (BST)
Drzewa wyszukiwań binarnych (BST) Krzysztof Grządziel 12 czerwca 2007 roku 1 Drzewa Binarne Drzewa wyszukiwań binarnych, w skrócie BST (od ang. binary search trees), to szczególny przypadek drzew binarnych.
Bardziej szczegółowoStruktury dynamiczne
Struktury dynamiczne lista jednokierunkowa lista dwukierunkowa lista cykliczna stos kolejka drzewo Ich wielkość i stopień złożoności zmieniają się w czasie. Struktury dynamiczne oparte są o struktury (struct).
Bardziej szczegółowoProgramowanie w języku C++
Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Bardziej szczegółowoProgramowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych zajęć
Bardziej szczegółowoWykład 6. Dynamiczne struktury danych
Wykład 6 Dynamiczne struktury danych 1 Plan wykładu Ø Wprowadzenie Ø Popularne dynamiczne struktury danych (ADT) Ø stosy, kolejki, listy opis abstrakcyjny Ø Listy liniowe Ø Implementacja tablicowa stosu
Bardziej szczegółowoWysokość drzewa Głębokość węzła
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
Bardziej szczegółowoZadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.
Sortowanie Dane wejściowe: ciąg n-liczb (kluczy) (a 1, a 2, a 3,..., a n 1, a n ) Dane wyjściowe: permutacja ciągu wejściowego (a 1, a 2, a 3,..., a n 1, a n) taka, że a 1 a 2 a 3... a n 1 a n. Będziemy
Bardziej szczegółowoProgramowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ
programowanie w C++ dla OWK Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ 1 Streszczenie W tym rozdziale podamy kilka najprostszych
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Drzewa poszukiwań binarnych. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 10 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.
Bardziej szczegółowoDrzewa poszukiwań binarnych
1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie
Bardziej szczegółowo2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne
Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie
Bardziej szczegółowoWstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
Bardziej szczegółowoTemat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Bardziej szczegółowoStruktury. Przykład W8_1
Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla
Bardziej szczegółowoMarcin Matusiak i Łukasz Stasiak
Marcin Matusiak i Łukasz Stasiak Lista jest sekwencyjną strukturą danych, która składa się z ciągu elementów tego samego typu. Dostęp do elementów listy jest sekwencyjny tzn. z danego elementu listy możemy
Bardziej szczegółowodr inż. Paweł Myszkowski Wykład nr 11 ( )
dr inż. Paweł Myszkowski Politechnika Białostocka Wydział Elektryczny Elektronika i Telekomunikacja, semestr II, studia stacjonarne I stopnia Rok akademicki 2015/2016 Wykład nr 11 (11.05.2016) Plan prezentacji:
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Metoda Dziel i zwyciężaj. Problem Sortowania, cd. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy
Bardziej szczegółowoKolekcje mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011
Kolekcje mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Kolekcja obiekt, który grupuje inne obiekty, traktując je jako jeden zestaw danych i pozwalający na wykonywanie operacji
Bardziej szczegółowoProgramowanie i struktury danych
Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne
Bardziej szczegółowoJava: kilka brakujących szczegółów i uniwersalna nadklasa Object
Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów
Bardziej szczegółowoWykład 7 Abstrakcyjne typy danych słownik (lista symboli)
Wykład 7 Abstrakcyjne typy danych słownik (lista symboli) Definicja słownika: Słownik (tablica lub lista symboli) to struktura danych zawierająca elementy z kluczami, która pozwala na przeprowadzanie dwóch
Bardziej szczegółowoPodejście obiektowe. Tablice (1) obiektów
1. Tablice Tablica w Javie jest obiektem. Podejście obiektowe. Tablice (1) obiektów Deklarowanie tablicy String [] nazwy; //równowaŝne deklaracje zmiennej tablicowej String nazwy []; int liczby[]; //zamienna
Bardziej szczegółowoAlgorytmy i struktury danych. wykład 5
Plan wykładu: Wskaźniki. : listy, drzewa, kopce. Wskaźniki - wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również
Bardziej szczegółowoJęzyk JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy Wykład 4, część 3 1 Język JAVA podstawy Plan wykładu: 1. Podstawy modelowania obiektowego 2. Konstruktory 3. Dziedziczenie, związki pomiędzy klasami, UML 4. Polimorfizm 5. Klasy abstrakcyjne
Bardziej szczegółowoSystemy Rozproszone - Ćwiczenie 6
Systemy Rozproszone - Ćwiczenie 6 1 Obiekty zdalne Celem ćwiczenia jest stworzenie obiektu zdalnego świadczącego prostą usługę nazewniczą. Nazwy i odpowiadające im punkty końcowe będą przechowywane przez
Bardziej szczegółowoKolekcje. Na podstawie:
Kolekcje Na podstawie: http://wazniak.mimuw.edu.pl Kolekcje w Javie Kolekcja (kontener) to po prostu obiekt, który grupuje wiele elementów w jeden twór. Pozwala na zapis, odczyt, korzystanie z danych oraz
Bardziej szczegółowoJAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Bardziej szczegółowoKurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017
Wykład 13 14 czerwiec 2017 Java vs cpp - podobieństwa Podobny sposób definiowania klas. Występowanie typów podstawowych: boolean, char, byte, short, int, long, float, double. Podobna zasada definiowania
Bardziej szczegółowoWątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().
Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public
Bardziej szczegółowoWykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy
Wykład 3 Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Dynamiczne struktury danych Lista jest to liniowo uporządkowany zbiór elementów, z których dowolny element
Bardziej szczegółowoWstęp do programowania. Listy. Piotr Chrząstowski-Wachtel
Wstęp do programowania Listy Piotr Chrząstowski-Wachtel Do czego stosujemy listy? Listy stosuje się wszędzie tam, gdzie występuje duży rozrzut w możliwym rozmiarze danych, np. w reprezentacji grafów jeśli
Bardziej szczegółowoUniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów
Bardziej szczegółowoStruktury danych. przez użytkownika, jak to ma miejsce w przypadku zwykłych zmiennych statycznych.
Struktury danych 1. Dynamiczne struktury danych Zmienna dynamiczna jest to zmienna, która pojawia się(i znika) wtedy gdy jest potrzebna(lub nie jest) podczas wykonywania się programu. Zwykłe zmienne statyczne,
Bardziej szczegółowoProgramowanie Proceduralne
Programowanie Proceduralne Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak (AJD) Programowanie Proceduralne Wykład 1 1 / 59 Cel wykładów z programowania
Bardziej szczegółowoWykład 5: Więcej o Klasach i Metodach
Wykład 5: Więcej o Klasach i Metodach Przeciążanie Metod Klasa posiada dwie lub więcej metod o tej samej nazwie ale różnych deklaracjach parametrów. Java używa liczby i typów argumentów by ustalić którą
Bardziej szczegółowoProgramowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,
Bardziej szczegółowoWykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych
Wykład 6_ Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych Abstrakcyjny typ danych Klient korzystający z abstrakcyjnego typu danych: o ma do dyspozycji jedynie
Bardziej szczegółowoProgramowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43
Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowo