Algorytmy i Struktury Danych.

Wielkość: px
Rozpocząć pokaz od strony:

Download "Algorytmy i Struktury Danych."

Transkrypt

1 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 Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 1 / 76

2 Plan Motywacja Motto Abstarkcyjne struktury danych Liniowe struktury danych Struktury danych modyfikuja świat, w którym realizowany jest algorytm, usprawniaja działanie, ułatwiaja zrozumienie algorytmu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 2 / 76

3 Motywacja Do tej pory zajmowaliśmy się tylko jednym typem struktur danych: tablicami (jedno-i wielowymiarowymi). Ich długość się nie zmienia, czyli jest to statyczna struktura danych. Statyczność oznacza, że albo konieczna wielkość tablicy jest znana z góry, albo tracimy ogromna ilość pamięci. W wielu przypadkach chcemy mieć dynamiczna strukturę danych, której długość zmienia się zgodnie z potrzebami. Dlatego też potrzebujemy struktury, która pozwala na przechowywanie elementów w fizycznie różnym porzadku Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 3 / 76

4 Struktury danych Struktury danych, sa zaawansowanymi pojemnikami na dane, które gromadza je i układaja w odpowiedni sposób. Różnorodność struktury danych jest ogromna, a dla każdej znaleziono wiele zastosowań oraz interesujacych algorytmów. Struktury danych stosuje się do przetwarzania informacji zgromadzonych w innych strukturach. Struktury danych sa fundamentalnym narzędziem programisty i ich znajomość jest niezbędna. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 4 / 76

5 programy = algorytmy + struktury danych Uczac się algorytmiki nie wolno zapomnieć o strukturach danych!!! Informatyk szwajcarski, profesor Niklaus Wirth (twórca języka Pascal i Modula-2). Źródło:https: //pl.wikipedia.org/wiki/ Niklaus_Wirth Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 5 / 76

6 Abstrakcyjna struktura danych a struktura danych Abstrakcyjna struktura danych (ASD), to zbiór danych elementarnych wraz z dobrze zdefiniowanym na nich zbiorem operacji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 6 / 76

7 Abstrakcyjna struktura danych a struktura danych Abstrakcyjna struktura danych (ASD), to zbiór danych elementarnych wraz z dobrze zdefiniowanym na nich zbiorem operacji. Różnica pomiędzy struktura danych a abstrakcyjna struktura danych: Struktura danych jest pewna implementacja konkretnej abstrakcyjnej struktury danych przeznaczonej do pracy na konkretnym komputerze (chodzi o jego architekturę) i systemie operacyjnym. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 6 / 76

8 Abstarkcyjne struktury danych Liniowe abstrakcyjne struktury danych: Stos Kolejka Listy: jednokierunkowe listy niecykliczne, dwukierunkowe listy niecykliczne, jednokierunkowe listy cykliczne (pierścienie jednokierunkowe), dwukierunkowe listy cykliczne (pierścienie dwukierunkowe). Tablice haszujace Drzewiaste struktury danych Drzewa poszukiwań binarnych Kopce Drzewa AVL Drzewa Czerwono-Czarne... Grafy Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 7 / 76

9 Stos Stos (ang pushdown stack, lub stack)jest struktura liniowo uporzadkowanych danych, z których tylko ostatni element, zwany wierzchołkiem lub szczytem stosu, jest w danym momencie dostępny. Cecha charakterystyczna stosujest to, że dane sa zapisywane i pobierane metoda Last-In-First-Out (LIFO) (pierwszy wchodzi, ostatni wychodzi) tj.: nowe elementy odkładamy tylko na szczyt stosu, usuwamy jedynie szczyt stosu (czyli element ostatnio dodany). Działanie stosu jest często porównywane do stosu talerzy: nie można usunać talerza znajdujacego się na dnie stosu nie usuwajac wcześniej wszystkich innych. nie można także dodać nowego talerza gdzieś indziej, niż na sama górę. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 8 / 76

10 Stos - operacje Niech S = (d 1, d 2,..., d n ) oznacza stos, wtedy: Odkładanie elementu na stos: push(s, d) = (d, d 1, d 2,..., d n ) Pobieranie elementu ze stosu: pop(s) = (d 2,..., d n ), o ile n > 1 Pobieranie elementu ze szczytu stosu bez jego usuwania: peek(s) = d 1 Sprawdzanie niepustości stosu: isempty(s) wtw., gdy n = 0 Pop i Push d 1 Szczyt stosu d 2 d 3 d 4 d 5 NULL Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 9 / 76

11 Stos liczb całkowitych kod Java I import java.util.nosuchelementexception; import java.util.scanner; public class Stos { private Node top; // szczyt stosu private int n; // rozmiar stosu // klasa pomocnicza private static class Node { private int item; private Node next; //Inicjalizuje pusty stos public Stos() { top = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 10 / 76

12 Stos liczb całkowitych kod Java II //Zwraca true, gdy stos jest pusty. public boolean isempty() { return top == null; //Zwraca liczbe elementow w stosie. public int size() { return n; //Dodaje element do stosu. public void push(int item) { Node oldtop = top; top = new Node(); top.item = item; top.next = oldtop; n++; //Usuwa i zwraca szczyt stosu Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 11 / 76

13 Stos liczb całkowitych kod Java III public int pop() { if (isempty()) throw new NoSuchElementException("Stos pusty"); int item = top.item; // element do zwrotu top = top.next; n--; return item; // usuwa szczyt stosu // zwraca zachowany element //zwraca szczyt stosu, ale go nie usuwa public int peek() { if (isempty()) throw new NoSuchElementException("Stos pusty"); return top.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 12 / 76

14 Zastosowanie stosu - postać binarna danej liczby całkowitej I // zalezy od klasy Stos public class Binarna { public static void main(string[] args) { Stos stack = new Stos(); Scanner in = new Scanner(System.in); System.out.println("Podaj liczbe"); int n = in.nextint(); int m = n; while (n > 0) { stack.push(n % 2); n = n / 2; System.out.println("Postac binarna "+m+": "); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 13 / 76

15 Zastosowanie stosu - postać binarna danej liczby całkowitej II while (!stack.isempty()) System.out.print(stack.pop()); System.out.println(); in.close(); $ java Stos Podaj liczbę 9 Postac binarna liczby: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 14 / 76

16 Zastosowanie stosu I Odwracanie danych Poniższa klasa Reverse odwraca kolejność liczb całkowitych wprowadzanych ze standardowego wejścia, bez konieczności wcześniejszego określania ich liczby. // zalezna od klasy Stos import java.util.scanner; public class Reverse { public static void main(string[] args) { Stos stack = new Stos(); Scanner in = new Scanner(System.in); System.out.println("Podaj dana!= 0"); int n = in.nextint(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 15 / 76

17 Zastosowanie stosu II while (n!=0){ stack.push(n); n = in.nextint(); while (!stack.isempty()){ System.out.print( stack.pop() + " "); System.out.println(); in.close(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 16 / 76

18 Zastosowanie stosu III.../stos-java$ javac Reverse.java Stos.java.../stos-java$ java Reverse Podaj dane!= Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 17 / 76

19 Stos liczb typu double kod Java I import java.util.nosuchelementexception; import java.util.scanner; public class StosDouble { private Node top; private int n; private static class Node { private double item; private Node next; public StosDouble() { top = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 18 / 76

20 Stos liczb typu double kod Java II public boolean isempty() { return top == null; public int size() { return n; public void push(double item) { Node oldtop = top; top = new Node(); top.item = item; top.next = oldtop; n++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 19 / 76

21 Stos liczb typu double kod Java III public double pop() { if (isempty()) throw new NoSuchElementException("Stos pusty"); double item = top.item; top = top.next; n--; return item; public double peek() { if (isempty()) throw new NoSuchElementException("Stos pusty"); return top.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 20 / 76

22 Stos łańcuchów znaków kod Java I import java.util.nosuchelementexception; import java.util.scanner; public class StosStringow { private Node top; private int n; // klasa pomocnicza private static class Node { private String item; private Node next; public StosStringow() { top = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 21 / 76

23 Stos łańcuchów znaków kod Java II public boolean isempty() { return top == null; public int size() { return n; public void push(string item) { Node oldtop = top; top = new Node(); top.item = item; top.next = oldtop; n++; public String pop() { Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 22 / 76

24 Stos łańcuchów znaków kod Java III if (isempty()) throw new NoSuchElementException( "Stos pusty"); String item = top.item; top = top.next; n--; return item; public String peek() { if (isempty()) throw new NoSuchElementException( "Stos pusty"); return top.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 23 / 76

25 Obliczanie wyrażeń arytmetycznych Definicja rekurencyjna Wyrażenie arytmetyczne jest albo liczba albo lewym nawiasem, po którym następuje wyrażenie arytmetyczne, po którym następuje operator, po którym następuje kolejne wyrażenie arytmetyczne, po którym następuje prawy nawias. Powyższa definicja dla uproszczenia dotyczy tylko w pełni nawiasowanych wyrażeń arytmetycznych, które precyzyjnie określaja, które operatory maja zastosowanie do których argumentów. Przykłady w pełni nawiasowanych wyrażeń arytmetycznych w postaci infiksowej ( ( ) / 2 ) ( ( 1 + sqrt ( 5.0 ) ) / 2.0 ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 24 / 76

26 Algorytm Dijkstry z dwoma stosami do obliczania wyrażeń arytmetycznych w postaci infiksowej I Najprostszy algorytm przeznaczony do obliczania wyrażeń arytmetycznych w postaci infiksowej został opracowany przez E. W. Dijkstrę w latach 60. XX wieku i wykorzystuje dwa stosy: jeden dla operandów i jeden dla operatorów. Założenia pokazanego rozwiazania Dla uproszczenia obsługiwane sa tylko następujace operatory binarne: mnożenia ( ), dodawania(+), odejmowania( ), dzielenie(/), oraz potęgowanie(ˆ) i operator pierwiastka kwadratowego sqrt, który przyjmuje tylko jeden argument. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 25 / 76

27 Algorytm Dijkstry z dwoma stosami do obliczania wyrażeń arytmetycznych w postaci infiksowej II Idea algorytmu Wyrażenie składa się z nawiasów, operatorów i argumentów (liczb). Przechodzac od lewej do prawej i biorac te elementy pojedynczo, manipulujemy stosami według czterech możliwych przypadków, w następujacy sposób: Odłóż operandy (argumenty) na stos operandów. Odłóż operatory na stos operatorów. Ignoruj lewe nawiasy. Po napotkaniu prawego nawiasu, zdejmij operator, zdejmij wymagana liczbę argumentów i odłóż na stos operandów obliczony wynik. Po przetworzeniu końcowego prawego nawiasu na stosie operandów znajduje się tylko jedna wartość, która jest wartościa obliczanego wyrażenia. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 26 / 76

28 Algorytm Dijkstry z dwoma stosami - kod w Javie I // zalezy od klasy StosDouble.java i // od klasy StosStringow.java public class Dijkstra2StackAlgorithm { public static void main(string[] args) { StosStringow operator = new StosStringow(); StosDouble val = new StosDouble(); String str = "( ( 1 + sqrt ( 5.0 ) ) / 2.0 )"; String[] tokens = str.split(" "); for (String s : tokens) { if (s.equals("(")) ; else if (s.equals("+")) operator.push(s); else if (s.equals("-")) operator.push(s); else if (s.equals("*")) operator.push(s); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 27 / 76

29 Algorytm Dijkstry z dwoma stosami - kod w Javie II else if (s.equals("/")) operator.push(s); else if (s.equals("^")) operator.push(s); else if (s.equals("sqrt")) operator.push(s); else if (s.equals(")")) { String op = operator.pop(); double v = val.pop(); if (op.equals("+")) v = val.pop() + v; else if (op.equals("-")) v = val.pop() - v; else if (op.equals("*")) v = val.pop() * v; else if (op.equals("/")) v = val.pop() / v; else if (op.equals("^")) v = Math.pow(val. pop(), v); else if (op.equals("sqrt")) v=math.sqrt(v); val.push(v); else val.push(double.parsedouble(s)); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 28 / 76

30 Algorytm Dijkstry z dwoma stosami - kod w Javie III System.out.println(val.pop()); Przykłady wykonania $java Dijkstra2StackAlgorithm ( 1 + ( ( ) * ( 4 * 5 ) ) ) $java Dijkstra2StackAlgorithm ( ( 1 + sqrt ( 5.0 ) ) / 2.0 ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 29 / 76

31 Notacja Prefiksowa lub Postfiksowa I Dwie najbardziej znane alternatywy do infiksowego zapisu wyrażenia arytmetycznego, to beznawiasowa notacja: prefiksowa operator jest pisany przed jego operandami. postfiksowa operator jest pisany po jego operandach. Prefiksowa reprezentacja wyrażenia arytmetycznego nazywana jest notację polska, gdyż opracował ja polski logik Jan Łukasiewicz w latach 20-tych XX wieku. Postfiksowa reprezentacja wyrażenia arytmetycznego nazywana jest odwrotna notacja polska(onp, ang. Reverse Polish Notation RPN), gdyż została opracowana przez australijskiego naukowca Charlesa Hamblina jako odwrócenie notacji polskiej na potrzeby zastosowań informatycznych. Zaleta odwrotnej notacji polskiej jest to, że priorytety operatora moga być reprezentowane przez kolejność ich występowania nie potrzeba nawiasów, aby reprezentować wyrażenie RPN Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 30 / 76

32 Notacja Prefiksowa lub Postfiksowa II Odwrotna notacja polska jest powszechnie stosowana w kompilatorach języków wysokiego poziomu do obliczania wartości wyrażeń arytmetycznych. Przykłady: Notacja infiksowa ONP ( ) ( 3 + ( 2 * 5 ) ) * + ( ( ( ( ) * 5 ) - 7 ) / 6 ) * 7-6 / ( 2 * ( ) ) * ( ( ) * ( ( 5-2 ) ^2 ) ) ^* ( 4 / ( ( 3-1) ^( 2 * 3 ) ) ) * ^/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 31 / 76

33 Zamiana postaci infiksowej wyrażenia w pełni nawiasowanego do postaci ONP kod Java I import java.util.scanner; public class InfixToPostfix { public static void main(string[] args) { StosStringow stack = new StosStringow (); Scanner in = new Scanner(System.in); System.out.print("Podaj wyrazenie "); System.out.print("arytmetyczne zakonczone"); System.out.println(" q "); String s = in.next(); while (!s.equals("q")) { s = in.next(); if (s.equals("+")) stack.push(s); else if (s.equals("-")) stack.push(s); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 32 / 76

34 Zamiana postaci infiksowej wyrażenia w pełni nawiasowanego do postaci ONP kod Java II else if (s.equals("*")) stack.push(s); else if (s.equals("/")) stack.push(s); else if (s.equals(")")) System.out.print(stack.pop() + " "); else if (s.equals("(")) System.out.print(""); else System.out.print(s + " "); System.out.println(); in.close(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 33 / 76

35 Zamiana postaci infiksowej wyrażenia w pełni nawiasowanego do postaci ONP kod Java III $ java InfixToPostfix Podaj wyrażenie arytmetyczne zakonczone q ( ( x + ( 3 * z ) ) - ( ( 2 * 3 ) / k ) ) q x 3 z * * k / - q $ java InfixToPostfix Podaj wyrażenie arytmetyczne zakonczone q ( 2 + ( ( ) * ( 5 * 6 ) ) ) q * * + q Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 34 / 76

36 Postać infiks na postać postfix (ONP) I Badane wyrażenie: ((x + (3 z)) ((2 3)/k)) Wynikowe wyrażenie zapisane w ONP: x 3 z * * k / - Krok Wejście Stos Wyjście 1 ( 2 ( 3 x x ( * +* 8 z +* z 9 ) + * Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 35 / 76

37 Postać infiks na postać postfix (ONP) II ((x + (3 z)) ((2 3)/k)) 9 ) ( 12 ( * -* * 3 16 ) - * 17 / -/ 18 k -/ k 19 ) - / 20 ) - Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 36 / 76

38 Przekształcanie wyrażeń arytmetycznych na ONP 1 Analizuj wyrażenie po jednym elemencie (stałej, zmiennej lub ograniczniku). 2 Jeśli element jest stała lub nazwa zmiennej, przekaż go na wyjście. 3 Jeśli element jest operatorem, to: (a) jeśli priorytet badanego operatora jest wyższy od priorytetu operatora zajmujacego szczyt stosu lub jeśli stos jest pusty - dopisz go na stos; (b) jeśli na szczycie stosu znajduje się operator o wyższym lub równym priorytecie - odczytaj ze stosu i prześlij na wyjście wszystkie operatory o priorytecie wyższym badź równym, aż do wystapienia na szczycie stosu operatora o priorytecie niższym od priorytetu operatora nadchodzacego z wejścia; element badany dopisz na stos; 4 Jeśli element jest nawiasem, to: (a) jeśli trafiłeś na nawias otwierajacy, dopisz go na stos; (b) jeśli trafiłeś na nawias zamykajacy: zdejmij wszystkie operatory ze stosu i przekaż je na wyjście, aż do trafienia na nawias otwierajacy; nawiasów nie wypisuj na wyjście. 5 Jeśli badane wyrażenie nie zostało wyczerpane - wróć do punktu pierwszego; 6 Jeśli badane wyrażenie zostało wyczerpane, odczytaj wszystkie operatory ze stosu i przekaż je na wyjście automatu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 37 / 76

39 Przekształcanie wyrażeń na ONP Badane wyrażenie: x + 3 z 2 3/k Krok Wejście Stos Wyjście 1 x x * +* 5 z +* z * * -* 9 3 -* 3 10 / -/ * 11 k -/ k 12 /- Wyrażenie zapisane w ONP: x3z +23 k/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 38 / 76

40 Przekształcanie wyrażeń na ONP Badane wyrażenie: (15 3)ˆ(3 + 2) 6/3 Krok Wejście Stos Wyjście 1 ( ( 2 15 ( (- 4 3 (- 3 5 ) - 6 ^ ^ 7 ( ^( 8 3 ^( ^( ^( ) ^ + 12 * * ^ 13 6 * 6 14 / / * 15 3 / 3/ Wyrażenie zapisane w ONP: ˆ6 3/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 39 / 76

41 Algorytm obliczania wartości wyrażenia w ONP 1 Analizuj wyrażenie po jednym elemencie (stałej, zmiennej lub ograniczniku). 2 Jeśli element ten jest: 1 stała lub nazwa zmiennej dopisz go na stos; 2 operatorem zdejmij ze stosu właściwa dla danego operatora ilość argumentów, wykonaj na nich obliczenia, a uzyskany wynik dopisz na stos; 3 Jeśli badane wyrażenie nie zostało wyczerpane - wróć do punktu pierwszego; 4 Jeśli badane wyrażenie zostało wyczerpane - wartość znajdujaca się na stosie to wynik obliczeń. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 40 / 76

42 Obliczania wartości wyrażenia w ONP kod Java I import java.util.scanner; public class EvaluatePostfix { public static void main(string[] args) { StosD stack = new StosD(); Scanner in = new Scanner(System.in); System.out.println("Podaj wyrazenie arytmetyczne w ONP zakonczone q "); String s = in.next(); Double a, b; while (!s.equals("q")) { if (s.equals("+")) stack.push(stack.pop() + stack.pop()); else if (s.equals("-")) { a = stack.pop() ; b = stack.pop(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 41 / 76

43 Obliczania wartości wyrażenia w ONP kod Java II stack.push(b - a); else if (s.equals("*")) stack.push(stack.pop() * stack.pop()); else if (s.equals("/")) { a = stack.pop() ; b = stack.pop(); stack.push(b / a); else stack.push(double.parsedouble(s)); s = in.next(); System.out.println(stack.pop()); in.close(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 42 / 76

44 Obliczania wartości wyrażenia w ONP kod Java III $ java EvaluatePostfix Podaj wyrażenie arytmetyczne w ONP zakończone q 6 3 / * q 14.0 $ java EvaluatePostfix Podaj wyrażenie arytmetyczne w ONP zakończone q * q 27 $ java InfixToPostfix Podaj wyrażenie arytmetyczne zakonczone q ( ( 2 * ( 10-2 ) ) + ( 8 / 2 ) ) q * 8 2 / + q $ java EvaluatePostfix Podaj wyrażenie arytmetyczne w ONP zakończone q * 8 2 / + q 20.0 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 43 / 76

45 Algorytm obliczania wartości wyrażenia w ONP - przykład Badane wyrażenie: 6 3 / * Krok Wejście Operacja Stos / 6/ * 2*7 14 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 44 / 76

46 Stos jako typ generyczny I import java.util.nosuchelementexception; import java.util.scanner; public class Stack<Item> { private Node<Item> first; private int n; // prywatna klasa pomocnicza private static class Node<Item> { private Item item; private Node<Item> next; //Inicjalizacja pustego stosu. public Stack() { first = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 45 / 76

47 Stos jako typ generyczny II // Zwraca true, gdy stos jest pusty public boolean isempty() { return first == null; //Zwraca liczbe elementow na stosie. public int size() { return n; // Dodaje element do stosu public void push(item item) { Node<Item> oldfirst = first; first = new Node<Item>(); first.item = item; first.next = oldfirst; n++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 46 / 76

48 Stos jako typ generyczny III //Usuwa element ze stosu public Item pop() { if (isempty()) throw new NoSuchElementException("Stos pusty"); Item item = first.item; first = first.next; n--; return item; //Zwraca szczyt stosu, ale go nie usuwa public Item peek() { if (isempty()) throw new NoSuchElementException("Stos pusty"); return first.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 47 / 76

49 Stos jako typ generyczny IV public static void main(string[] args) { Scanner in = new Scanner(System.in); Stack<Integer> stacki = new Stack<Integer>(); System.out.println("Podaj liczbe"); Integer n = in.nextint(); Integer m=n; while (n > 0) { stacki.push(n % 2); n = n / 2; System.out.println("Reprezentacja binarna liczby : "+m); while (!stacki.isempty()){ System.out.print(stackI.pop()); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 48 / 76

50 Stos jako typ generyczny V System.out.println(); in.close(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 49 / 76

51 Stos - implementacja tablicowa, założenia Wykorzystuje tablicę A złożona z n elementów A[i], gdzie n jest maksymalna liczba spodziewanych elementów. Operacje polegaja na manipulacji indeksami tablicy. top[s] numer ostatniego elementu wstawionego do stosu. Stos składa się z elementów S[1],..., S[top[S]]. S[1] jest elementem na dnie stosu. S[top[S]] jest elementem na szczycie stosu. Jeżeli top[s] = 0, to stos jest pusty. Do sprawdzenia, czy stos jest pusty używana jest operacja Stack Empty. Próba zdjęcia elementu ze stosu sygnalizowana jest błędem niedomiaru. Jeżeli top[s] jest większe niż ustalony z góry rozmiar tablicy, to stos jest przepełniony. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 50 / 76

52 Stos - implementacja tablicowa Push(S, x) 1: if top[s] = length[s] then 2: error przepełnienie 3: end if 4: top[s] = top[s] + 1 5: S[top[S]] = x Kierunek top wstawiania Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 51 / 76

53 Stos - implementacja tablicowa Stack-Empty(S) 1: if top[s] = 0 then 2: return true 3: else 4: return false 5: end if Pop(S) 1: if Stack-Empty(S) then 2: error niedomiar 3: end if 4: top[s] = top[s] 1 5: return S[top[S] + 1] Kierunek top wstawiania Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 52 / 76

54 Stos - implementacja tablicowa 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 = new Item[size]; nie jest dozwolone // potrzebne jest rzutowanie /*generuje ostrzezenie: *Note: ArrayStack.java uses unchecked or unsafe operations. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 53 / 76

55 Stos - implementacja tablicowa II *Note: Recompile with -Xlint:unchecked for details. *ale mozna je zignorowac*/ a = (Item[]) new Object[size]; // Zwraca true, gdy stos jest pusty public boolean isempty() { return N == 0 ; //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; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 54 / 76

56 Stos - implementacja tablicowa III //Usuwa element ze stosu public Item pop() { if (isempty()) throw new NoSuchElementException("Stos pusty"); Item item = a[--n]; // pozwala na zapobieganie wyciekom poamieci 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 6 55 / 76

57 Stos - implementacja tablicowa IV public static void main(string[] args) { ArrayStack<Integer> s = new ArrayStack<Integer >(32); int i=0; while (i < 32) { s.push(i); i++; while (!s.isempty()){ System.out.print(s.pop()+" "); System.out.println(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 56 / 76

58 Kolejka Kolejka FIFO (First In First Out) jest struktura liniowo uporzadkowanych danych, w której dołaczać nowe dane można jedynie na koniec, a usuwać z poczatku. Procedura usunięcia danych z końca kolejki jest taka sama, jak w przypadku stosu, z ta różnica, że usuwamy dane od poczatku a nie od końca. Działanie na kolejce jest intuicyjnie jasne, gdy skojarzymy ja z kolejka ludzi np. w sklepie. Każdy nowy klient staje na jej końcu, obsługa odbywa się jedynie na poczatku. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 57 / 76

59 Kolejka - operacje Niech K = (d 1, d 2,..., d n ) oznacza kolejkę, wtedy: Wstawianie elementu do kolejki: enqueuq(k, d) = (d 1, d 2,..., d n, d) Pobieranie elementu z kolejki: dequeuq(k ) = (d 2,..., d n ), o ile n > 1 Obsługiwanie pierwszego elementu z kolejki bez jego usuwania : first(k ) = d 1 Sprawdzanie niepustości kolejki: empty(k ) wtw., gdy n = 0 Poczatek kolejki d 1 d 2 d 3 d 4 d 5 Koniec kolejki Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 58 / 76

60 Kolejka - implementacja tablicowa n 1 elementowa kolejka jest impelementowana za pomoca n-elementowej tablicy Q, tj. Q = Q[0]...Q[n 1]. Atrybut head[q] wskazuje na głowę, czyli poczatek kolejki. Atrybut tail[q] wyznacza następna wolna pozycję, na która można wstawić nowy element. Poczatkowo head[q] = tail[q] = 0. Elementy kolejki znjduja się na pozycjach: head[q], head[q] + 1,..., tail[q] 1. Zakładmy, że tablica jest cykliczna, tzn. że pozycja o numerze 0 jest bezpośrednim następnikiem pozycji n 1. Jeżeli head[q] = tail[q], to kolejka jest pusta. Jeżeli head[q] = (tail[q] + 1) mod length(q), to kolejka jest pełna. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 59 / 76

61 Kolejka - implementacja tablicowa Enqueue(Q, x) 1: if head[q] = (tail[q] + 1) mod length(q) then 2: error Kolejka pełna 3: end if 4: Q[tail[Q]] = x 5: if tail[q] = length[q] then 6: tail[q] = 1 7: else 8: tail[q] = tail[q] + 1 9: end if tail head Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 60 / 76

62 Kolejka - implementacja tablicowa Dequeue(Q) 1: if head[q] = tail[q] then 2: error Kolejka pusta 3: end if 4: x = Q[head[Q]] 5: if head[q] = length[q] then 6: head[q] = 1 {Założenie o cykliczności 7: else 8: head[q] = head[q] + 1 9: end if 10: return x tail head Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 61 / 76

63 Kolejka - implementacja tablicowa I import java.util.nosuchelementexception; import java.util.scanner; import java.util.arrays; public class ArrayQueue<Item> { private Item [] a; private int N; // liczba elementow w kolejce private int head; // poczatek kolejki private int tail; // koniec kolejki //Inicjalizacja pustej kolejki. public ArrayQueue(int size) { a = (Item[]) new Object[size]; head = tail = 0; N = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 62 / 76

64 Kolejka - implementacja tablicowa II // Zwraca true, gdy kolejka jest pusta public boolean isempty() { return N==0 ; //Zwraca liczbe elementow w kolejce. public int size() { return N; // Dodaje element do stosu public void enqueue(item item) { if (head == (tail+1)%a.length) throw new NoSuchElementException("Kelejka pelna"); a[tail++] = item; if (tail == a.length) tail=0; N++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 63 / 76

65 Kolejka - implementacja tablicowa III //Usuwa element z kolejki public Item dequeue() { if (isempty()) throw new NoSuchElementException("Kolejka pusta"); Item item = a[head]; a[head++]=null; // kontrola wycieku pamieci if(head >= a.length) head=0; N--; return item; //Zwraca poczatek kolejki, ale go nie usuwa public Item peek() { if (isempty()) throw new NoSuchElementException("Kolejka pusta"); return a[head]; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 64 / 76

66 Kolejka - implementacja tablicowa IV public static void main(string[] args) { ArrayQueue<Integer> s = new ArrayQueue<Integer >(32); int i=0, j = 0; while (i < 31) s.enqueue(i++); System.out.println("Elementy obsluzone: "); while (j < 10){ System.out.print(s.dequeue() + " "); j++; System.out.println(); j = 0; while (j < 8) { s.enqueue(2*j); j++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 65 / 76

67 Kolejka - implementacja tablicowa V System.out.println("Elementow w kolejce: " + s.size()); System.out.println("Elementy obsluzone: "); while (!s.isempty()){ System.out.print(s.dequeue() + " "); System.out.println(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 66 / 76

68 Kolejka - implementacja tablicowa VI $ java ArrayQueue Elementy obsluzone: Elementow w kolejce: 29 Elementy obsluzone: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 67 / 76

69 Problem Józefa Flawiusza Nazwa nawiazuje do postaci Józefa Flawiusza, rzymsko-żydowskiego historyka żyjacego w I wieku n.e. Miał on zostać wraz z grupa powstańców otoczony w jaskini w trakcie oblężenia Jotopaty. Żołnierze woleli samobójstwo od pojmania, a że żydowskie prawo religijne zabrania odbierania sobie życia, zdecydowali się losować, kto zabije poprzednio wylosowanego, tak długo, dopóki nie pozostanie jeden, który będzie musiał się zabić sam. Gdy, zrzadzeniem losu, przy życiu pozostali Flawiusz wraz z jednym z towarzyszy, zdecydowali się oni poddać Rzymianom. Sformułowanie: Problem_Józefa_Flawiusza W ogólnej wersji problem brzmi następujaco: w okręgu ustawiamy n obiektów, następnie eliminujemy co k-ty obiekt, tak długo, aż zostanie tylko jeden. Należy wskazać obiekt, który pozostanie. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 68 / 76

70 Rozwiazanie problemu Józefa Flawiusza I public class Josephus { public static void main(string[] args) { int n = Integer.parseInt(args[0]); int k = Integer.parseInt(args[1]); ArrayQueue<Integer> queue = new ArrayQueue< Integer>(n+1); for (int i = 0; i < n; i++) queue.enqueue(i); while (!queue.isempty()) { for (int i = 0; i < k-1; i++) queue.enqueue(queue.dequeue()); System.out.print(queue.dequeue() + " "); System.out.println(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 69 / 76

71 Rozwiazanie problemu Józefa Flawiusza II $ java Josephus Pierwszym, który przekształcił tę historię w problem matematyczny, miał być szesnastowieczny francuski matematyk Claude Gaspard Bachet de Méziriac. Według niego, ustawieni w okrag żołnierze mieli eliminować co trzeciego spośród siebie i że było ich 41. $ java Josephus Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 70 / 76

72 Kolejka dynamiczna implementacja generyczna I import java.util.nosuchelementexception; import java.util.scanner; public class Queue<Item> { private Node<Item> first; // glowa kolejki private Node<Item> last; // ogon kolejki private int n; // liczba elementow w kolejce // helper linked list class private static class Node<Item> { private Item item; private Node<Item> next; //Inicjalizacja pustej kolejki. public Queue() { first = null; last = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 71 / 76

73 Kolejka dynamiczna implementacja generyczna II // Zwraca true, gdy kolejka jest pusta public boolean isempty() { return first == null; //Zwraca liczbe elementow w kolejce. public int size() { return n; //Zwraca poczatek kolejki, ale go nie usuwa public Item peek() { if (isempty()) throw new NoSuchElementException("Kolejka pusta"); return first.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 72 / 76

74 Kolejka dynamiczna implementacja generyczna III // Dodaje element do kolejki public void enqueue(item item) { Node<Item> oldlast = last; last = new Node<Item>(); last.item = item; last.next = null; if (isempty()) first = last; else oldlast.next = last; n++; //Usuwa element z kolejki public Item dequeue() { if (isempty()) throw new NoSuchElementException("Kolejka pusta"); Item item = first.item; first = first.next; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 73 / 76

75 Kolejka dynamiczna implementacja generyczna IV n--; if (isempty()) last = null; return item; public static void main(string[] args) { Queue<String> queue = new Queue<String>(); System.out.println("Podaj ciag znakow zakonczony q"); Scanner in = new Scanner(System.in); String item = in.next(); while (!item.equals("q")) { if (!item.equals("-")) queue.enqueue( item); else if (!queue.isempty()) System.out.print(queue.dequeue() + " "); item = in.next(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 74 / 76

76 Kolejka dynamiczna implementacja generyczna V System.out.println("(" + queue.size() + " sa w kolejce)"); in.close(); $ java Queue Podaj ciąg znaków zakończony q ala ma kota - psa q ala (3 sa w kolejce) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 75 / 76

77 Rozwiazanie problemu Józefa Flawiusza public class Josephus { public static void main(string[] args) { int n = Integer.parseInt(args[0]); int k = Integer.parseInt(args[1]); Queue<Integer> queue = new Queue<Integer>(); for (int i = 0; i < n; i++) queue.enqueue(i); while (!queue.isempty()) { for (int i = 0; i < k-1; i++) queue.enqueue(queue.dequeue()); System.out.print(queue.dequeue() + " "); System.out.println(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 76 / 76

Algorytmy i Struktury Danych.

Algorytmy 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ółowo

Algorytmy i Struktury Danych.

Algorytmy 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ółowo

Algorytmy i Struktury Danych.

Algorytmy 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ółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. 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

Bardziej szczegółowo

Algorytmy 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. 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ółowo

Struktury danych: stos, kolejka, lista, drzewo

Struktury 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ółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny 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ółowo

Struktura 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: 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ółowo

Struktura 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: 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ółowo

Algorytmy i Struktury Danych

Algorytmy 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ółowo

Metody 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ółowo

E S - uniwersum struktury stosu

E 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ółowo

Wykł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 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ółowo

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych 2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:

Bardziej szczegółowo

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 Wykład 9 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 stos i operacje na stosie odwrotna notacja polska języki oparte na ONP przykłady programów J. Cichoń, P. Kobylański Wstęp

Bardziej szczegółowo

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny Wykład nr 2 2/6 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne Rok akademicki 2006/2007 Plan wykładu nr 2 Argumenty funkcji main Dynamiczne struktury danych

Bardziej szczegółowo

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera. 1 wyliczanie i transformacja wyrażeń (wersja skrócona) Opis został przygotowany przez: Bogdana Kreczmera 28 kwietnia 2002 Strona 1 z 68 Zakład Podstaw Cybernetyki i Robotyki - trochę historii...............

Bardziej szczegółowo

Dynamiczne struktury danych

Dynamiczne 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ółowo

Podstawy programowania obiektowego

Podstawy 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ółowo

Odwrotna Notacja Polska

Odwrotna Notacja Polska Odwrotna Notacja Polska Odwrotna Notacja Polska w skrócie ONP) jest sposobem zapisu wyrażeń arytmetycznych. Znak wykonywanej operacji umieszczany jest po operandach, argumentach tzw. zapis postfiksowy).

Bardziej szczegółowo

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Algorytmy 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ółowo

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Podstawowe 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ółowo

Algorytmy i Struktury Danych.

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ółowo

Programowanie, algorytmy i struktury danych

Programowanie, algorytmy i struktury danych 1/44 Programowanie, algorytmy i struktury danych materiały do wykładu: http://cez.wipb.pl/moodle/ email: m.tabedzki@pb.edu.pl strona: http://aragorn.pb.bialystok.pl/~tabedzki/ Marek Tabędzki Wymagania

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykł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ółowo

Dynamiczne struktury danych

Dynamiczne 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ółowo

Wykład 4. Klasa List Kolejki Stosy Słowniki

Wykł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ółowo

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika. Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika. 1. Pojcie struktury danych Nieformalnie Struktura danych (ang. data

Bardziej szczegółowo

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

Bardziej szczegółowo

Abstrakcyjne struktury danych w praktyce

Abstrakcyjne struktury danych w praktyce Abstrakcyjne struktury danych w praktyce Wykład 13 7.4 notacja polska A.Szepietowski Matematyka dyskretna rozdział.8 stos kompilacja rozłączna szablony funkcji Przypomnienie Drzewo binarne wyrażenia arytmetycznego

Bardziej szczegółowo

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Laboratorium 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ółowo

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs 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ółowo

Lista, Stos, Kolejka, Tablica Asocjacyjna

Lista, 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ółowo

Podstawy informatyki 2

Podstawy informatyki 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne Rok akademicki 2006/2007 Wykład nr 2 (07.03.2007) Wykład nr 2 2/46 Plan wykładu nr 2 Argumenty funkcji main

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy 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ółowo

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Wykł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ółowo

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak JAVA Wstęp do programowania w języku obiektowym Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Platforma JSE: Opracował: Andrzej Nowak JSE (Java Standard

Bardziej szczegółowo

Struktury danych (I): kolejka, stos itp.

Struktury danych (I): kolejka, stos itp. Letnie Warsztaty Matematyczno-Informatyczne Algorytmy i struktury danych Struktury danych (I): kolejka, stos itp. Struktury danych (I): kolejka, stos itp. Struktura danych stanowi sposób uporządkowania

Bardziej szczegółowo

Programowanie i struktury danych 1 / 44

Programowanie 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ółowo

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Kiedy 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ółowo

Programowanie obiektowe

Programowanie 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ółowo

Programowanie w języku Java. Kolekcje

Programowanie 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ółowo

TRANSLACJA I TRANSLATORY

TRANSLACJA I TRANSLATORY TRANSLACJA I TRANSLATORY Języki programowania niskiego czy też wysokiego poziomu mają na zadanie przetworzyć ogół algorytmów w nich zapisanych na taką postać aby maszyna cyfrowa była w stanie je wykonać

Bardziej szczegółowo

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania Rok akademicki 2010/2011, Wykład nr 4 2/50 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2010/2011

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy 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ółowo

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Wykł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ółowo

Stos LIFO Last In First Out

Stos 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ółowo

Odczyt danych z klawiatury Operatory w Javie

Odczyt danych z klawiatury Operatory w Javie Odczyt danych z klawiatury Operatory w Javie Operatory W Javie występują następujące typy operatorów: Arytmetyczne. Inkrementacji/Dekrementacji Przypisania. Porównania. Bitowe. Logiczne. Pozostałe. Operacje

Bardziej szczegółowo

Wykład 6. Dynamiczne struktury danych

Wykł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ółowo

Kurs programowania. Wykład 9. Wojciech Macyna

Kurs 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ółowo

Wybrane algorytmy tablicowe

Wybrane algorytmy tablicowe Wybrane algorytmy tablicowe Algorytmy i struktury danych Wykład 2. Rok akademicki: 2009/2010 Sortowanie przez wybieranie for (int i = 0; i < liczby.length - 1; i++) k = i; for (int j = i; j < liczby.length;

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Stosy, kolejki, drzewa Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 1 / 25 Listy Lista jest uporządkowanym zbiorem elementów. W Pythonie

Bardziej szczegółowo

Programowanie obiektowe

Programowanie 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ółowo

Platformy Programistyczne Podstawy języka Java

Platformy 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ółowo

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1 PODSTAWOWE ELEMENTY JĘZYKA JAVA WYRAŻENIA, OPERATORY, INSTRUKCJE 1. Operatory arytmetyczne +, -, /,*, % Przykład 1 programu z interfejsem konsolowym public class Lab2_1 // Tworzy generator liczb losowych,

Bardziej szczegółowo

Podstawowe struktury danych

Podstawowe 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ółowo

Programowanie i struktury danych

Programowanie 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ółowo

Algorytmy z powrotami. Algorytm minimax

Algorytmy z powrotami. Algorytm minimax Algorytmy z powrotami. Algorytm minimax Algorytmy i struktury danych. Wykład 7. Rok akademicki: 2010/2011 Algorytm z powrotami rozwiązanie problemu budowane jest w kolejnych krokach, po stwierdzeniu (w

Bardziej szczegółowo

Ogólne wiadomości o grafach

Ogólne wiadomości o grafach Ogólne wiadomości o grafach Algorytmy i struktury danych Wykład 5. Rok akademicki: / Pojęcie grafu Graf zbiór wierzchołków połączonych za pomocą krawędzi. Podstawowe rodzaje grafów: grafy nieskierowane,

Bardziej szczegółowo

Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska

Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska 1 Przykład wyliczania wyrażeń arytmetycznych Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Copyright

Bardziej szczegółowo

Programowanie Proceduralne

Programowanie 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ółowo

Składnia rachunku predykatów pierwszego rzędu

Składnia rachunku predykatów pierwszego rzędu Początek Gramatyka Kwantyfikatory Poprawność Logika obliczeniowa Instytut Informatyki Początek Gramatyka Kwantyfikatory Poprawność Plan wykładu 1 Na (dobry) początek Zrozumieć słowa Oswoić znaki 2 Gramatyka

Bardziej szczegółowo

Programowanie - instrukcje sterujące

Programowanie - instrukcje sterujące Instytut Informatyki Uniwersytetu Śląskiego Laborki środowisko NetBeans, tworzenie nowego projektu; okno projekty; główne okno programu; package - budowanie paczek z klas; public class JavaApplication

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 2 - wprowadzenie do zmiennych mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 23 października 2017 1 / 26 mgr inż. Krzysztof Szwarc Podstawy i

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

dr inż. Paweł Myszkowski Wykład nr 11 ( )

dr 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ółowo

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra INFORMATYKA Podstawy programowania w języku C (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra INFORMATYKA Temat: Struktury dynamiczne Wykład 7 Struktury dynamiczne lista jednokierunkowa,

Bardziej szczegółowo

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main Język obiektowy Wykład 13 Programowanie obiektowe z lotu ptaka, str 1 James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995(20latmłodszyodC) C jest językiem proceduralnym Java jest językiem

Bardziej szczegółowo

Temat: 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. 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ółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

Wykład 5: Więcej o Klasach i Metodach

Wykł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ółowo

Listy, kolejki, stosy

Listy, 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ółowo

Marcin Matusiak i Łukasz Stasiak

Marcin 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ółowo

Algorytmy i Struktury Danych.

Algorytmy 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ółowo

Informatyka 2. Wykład nr 5 ( ) Plan wykładu nr 5. Politechnika Białostocka. - Wydział Elektryczny. Odwrotna notacja polska.

Informatyka 2. Wykład nr 5 ( ) Plan wykładu nr 5. Politechnika Białostocka. - Wydział Elektryczny. Odwrotna notacja polska. Rok akademicki 008/009, Wykład nr 5 /6 Plan wykładu nr 5 Informatyka Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia (zaoczne) Rok akademicki

Bardziej szczegółowo

Informatyka 2. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Informatyka 2. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia (zaoczne) Rok akademicki 2008/2009 Wykład nr 5 (22.11.2008) Rok akademicki 2008/2009,

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA 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ółowo

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17 Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8

Bardziej szczegółowo

Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz

Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz Zadanie 1. Wykonanie projektu Java SE w środowisku Netbeans- File/New Project W formularzu New Project

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

Pascal - wprowadzenie

Pascal - wprowadzenie Pascal - wprowadzenie Ogólne informacje o specyfice języka i budowaniu programów Filip Jarmuszczak kl. III c Historia Pascal dawniej jeden z najpopularniejszych języków programowania, uniwersalny, wysokiego

Bardziej szczegółowo

Struktury. Przykład W8_1

Struktury. 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ółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Java Collections Framework

Java 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ółowo

KOLEJKA (QUEUE) (lista fifo first in, first out)

KOLEJKA (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ółowo

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu

Bardziej szczegółowo

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom). Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154

Bardziej szczegółowo

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Ję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ółowo

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

2. 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ółowo

Wykład 8: Obsługa Wyjątków

Wykład 8: Obsługa Wyjątków Wykład 8: Obsługa Wyjątków Wyjątki Wyjątek to sytuacja nienormalna, która pojawia się w trakcie wykonania programu. W językach bez obsługi wyjątków, błędy są wykrywane i obsługiwane ręcznie, zwykle przez

Bardziej szczegółowo

Struktury Danych i Złożoność Obliczeniowa

Struktury Danych i Złożoność Obliczeniowa Struktury Danych i Złożoność Obliczeniowa Zajęcia 1 Podstawowe struktury danych Tablica Najprostsza metoda przechowywania serii danych, zalety: prostota, wady: musimy wiedzieć, ile elementów chcemy przechowywać

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz

Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz Tablice i łańcuchy znakowe jako obiektowe typy danych dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? Klasy String, StringBuffer, StringBuilder Tablice jednowymiarowe

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

Wprowadzenie do języka Java

Wprowadzenie do języka Java WSNHiD, Programowanie 2 Lab. 1 [ część 1 ] Wprowadzenie do języka Java Wprowadzenie Język programowania Java jest obiektowym językiem programowania. Powstał w 1995 i od tej pory był intensywnie rozwijany.

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo