Podstawy Informatyki

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

Download "Podstawy Informatyki"

Transkrypt

1 Podstawy Informatyki Wskaźniki w języku C i C++ dr inż. Piotr Kaczmarek Piotr.Kaczmarek@put.poznan.pl

2 Organizacja pamięci Pamięć ma organizację bajtową, liniową każdy bajt posiada swój indywidualny adres, który jest liczbą całkowitą długość adresu wynosi obecnie 4 bajty (32bit) co pozwala zaadresować do 4Gb pamięci zmienne przechowują dane w kolejnych komórkach np. zmienna unsigned int a=0xffeeddcc char z='0'; zmienna a z komórka pamięci 0xcc 0xdd 0xee 0xff 0x32... adres A 100B FF01 FF02 FF03 FF04

3 Typy wskaźnikowe zmienna typu wskaźnikowego, służy do przechowywania adresów innych zmiennych zmienna typu wskaźnikowego, przechowuje wartość całkowitą, (4b), która jest adresem początku obszaru pamięci w którym zlokalizowano dane Przy deklaracji wskaźnika, zawsze trzeba określić zmiennej jakiego typu będzie on dotyczył (typ* nazwa;) np.: int* p1; float* p2; char* p2; zmienna a z p1 p2 komórka pamięci 0xcc 0xdd 0xee 0xff 0x32... adres zmienn. int Adres zm. float... adres A 100B FF01 FF02 FF03 FF04 FF05 FF06

4 Operacje na wskaźnikach Przypisanie adresu zmiennej do wskaźnika unsigned int a=0xffeeddcc; int* p1; p1= &a; //adres początku Zmiana wartości pod adresem wskazywanym unsigned int a=0xffeeddcc; int* p1; p1= &a; *p1=2; //zmienna a=2 Uwagi: &zmianna odwołanie się do adresu zmiennej *wskaźnik odwołanie się do wartości przechowywanej pod wskazanym adresem zmienna *p1 a z p1 p2 komórka pamięci 0xcc 0xdd 0xee 0xff 0x32... adres zmienn. int 1002 Adres zm. float... adres A 100B FF01 FF02 FF03 FF04 FF05 FF06 &a p1=&a

5 Operacje na wskaźnikach cd. Przypisanie adresu zmiennej do wskaźnika char z='0'; char* p2; p2= &z; *p2='a'; ile wynosi wartość: p2, &z, z,*p2 z 'a' *p2 'a' wartości p2 i &z są takie same (1009) Uwagi: &zmianna odwołanie się do adresu zmiennej *wskaźnik odwołanie się do wartości przechowywanej pod wskazanym adresem zmienna *p2 a z p1 p2 komórka pamięci 0xcc 0xdd 0xee 0xff 0x32... adres zmienn. int adres A 100B FF01 FF02 FF03 FF04 FF05 FF06 &z p2=&z

6 Operacje na wskaźnikach cd.. inkrementacja char z='0'; char* p2; p2= &z; *p2++; //inkrem. wartości ile wynosi wartość: p2, &z, z,*p2 z '1', *p2 '1' wartości p2 i &z są takie same (1009) p2++; inkrementacja adresu p1++; ile wynosi wartość: p2, &z, z,*p2, p1 z '1', *p2 '1', &z bez zmian (1009) p2 100A (kolejny element char) p (kolejny elemnet int) zmienna *p2 a z p1 p2 komórka pamięci 0xcc 0xdd 0xee 0xff 0x32 ('0')... adres zmienn. int adres A 100B FF01 FF02 FF03 FF04 FF05 FF06 p1++; p2++;

7 Operacje arytmetyczne na wskaźnikach Operacje na wskaźnikach mają inny przebieg niż w zwykłej arytmetyce. Operacja dodawania lub odejmowania wsk+k wsk-k oznacza: przejdź o k elementów, stąd adres wynikowy zależy od rozmiaru wskazywanej zmiennej: int* p1=1002; char* p2=1009; p2=p2+1;// adres wynosi 100A (char - 1b) p1=p1+1;//adres wynosi 1006 (int - 4b) Uwaga: To o ile zmienia się wartość adresu determinowane jest przez typ wskaźnika. a z p1 p2 komórka pamięci 0xcc 0xdd 0xee 0xff 0x32 ('0')... adres zmienn. int 1002 adres A 100B FF01 FF02 FF03 FF04 FF FF06... p1++; p2++;

8 Referencje Zmienne tworzona jako referencja przechowuje wartość w tym samym obszarze pamięci int a=1; int&b=a; // b jest referencją a int* p1, p2; p1=&a; p2=&b; ile wynoszą wartości: *p1,*p2, &a, &b, p1,p2,a,b p1,p2,&a,&b mają tą samą wartość (1002) p1,p2,a,b mają wartość 1; *p1, *p2 a b z p1 p2 komórka pamięci 0x01 0x00 0x00 0x00 0x32 ('0')... adres zmienn. int adres A 100B FF01 FF02 FF03 FF04 FF05 FF06

9 Wykorzystanie wskaźników int a=2, b=3; int* p1, p2; int& c=a; a c 2 p1 p2 p1=&a; p2=&b; b 3 *p1=*p2; b++; p2=p1; *p2++; c++; ile wynosi wartość: a,b, c, *p1, *p2 p1, p2, &a, &b, &c

10 Wykorzystanie wskaźników int a=2, b=3; int* p1, p2; int& c=a; a c 3 *p1 p1 p2 p1=&a; p2=&b; b 3 *p2 *p1=*p2; b++; p2=p1; *p2++; c++; odwołanie się do wartości we wskazywanej komórce ile wynosi wartość: a,b, c, *p1, *p2 p1, p2, &a, &b, &c

11 Wykorzystanie wskaźników int a=2, b=3; int* p1, p2; int& c=a; a c 3 *p1 p1 p2 p1=&a; p2=&b; b 4 *p2 *p1=*p2; b++; p2=p1; *p2++; c++; ile wynosi wartość: a,b, c, *p1, *p2 p1, p2, &a, &b, &c

12 Wykorzystanie wskaźników int a=2, b=3; int* p1, p2; int& c=a; a c 3 *p1 p1 p2 p1=&a; p2=&b; b 4 *p2 *p1=*p2; b++; p2=p1; *p2++; c++; przypisanie do p1 adresu p2 ile wynosi wartość: a,b, c, *p1, *p2 p1, p2, &a, &b, &c

13 Wykorzystanie wskaźników int a=2, b=3; int* p1, p2; int& c=a; a c 5 *p1 p1 p2 p1=&a; p2=&b; b 4 *p2 *p1=*p2; b++; p2=p1; *p2++; c++; ile wynosi wartość: a,b, c, *p1, *p2 p1, p2, &a, &b, &c

14 Wykorzystanie wskaźników int a=2, b=3; int* p1, p2; int& c=a; a c 3 *p1 p1 p2 p1=&a; p2=&b; b 4 *p2 *p1=*p2; b++; p2=p1; *p2++; c++; przypisanie do p1 adresu p2

15 jest tożsama operacji: *(tab+i) = 0.5*i; Tablice i wskaźniki tablica jest ciągłym obszarem pamięci, w którym kolejno umieszczone są wartości elementów zmienna tab jest wskaźnikiem (typ float*) do pierwszego elementu tablicy stąd *tab, odwołuje się do wartości elementu 0 natomiast tab+i, jest adresem i-tego elementu tablicy, a *(tab+i) odwołuje się do wartości i-tego elementu tablicy. stąd operacja : tab[i] = 0.5*i; nr elementu tab *tab *(tab+1) tab+4 float tab[5]; for(i=0;i<5;i++) tab[i]=0.5*i; adres k k+6 k+12 k+18 k+24

16 Wskaźniki jako argument funkcji Zastosowanie wskaźników pozwala na tworzenie funkcji przekazujących na zewnątrz więcej niż jedną wartość Przekazanie argumentów przez wartość void Zamien(int a,int b) { int t=a; a=b; b=t; } Przekazanie argumentów przez wskaźnik void Zamien(int *a,int *b) { int t=*a; *a=*b; *b=t; } Przekazanie argumentów przez referencję void Zamien(int& a,int& b) { int t=a; a=b; b=t; } int main { int x=2,y=3; Zamien(x,y); } int main { int x=2,y=3; Zamien(&x,&y); } int main { int x=2,y=3; Zamien(x,y); } x,y nie zmieniają wartości x,y zmieniają swoje wartości

17 Wskaźniki jako argument funkcji Przekazując argument przez wartość (void Zamien(int a, int b)) przy każdym wywołaniu funkcji tworzone są lokalne zmienne a,b i przypisywana jest im wartość argumentów Czas wywołania funkcji oraz ilość pamięci rezerwowanej dla argumentów jest zależny od typu argumentu (musi zostać skopiowana pewna ilość bajtów z zmiennej przekazanej jako argument do zmiennej lokalnej) Przekazując argument jako wskaźnik (void Zamien(int *a, int *b)) przy każdym wywołaniu funkcji tworzone są lokalnie zmienne wskaźnikowe a i b i przypisywana jest im wartość adresów argumentów wejściowych (po 4 bajty na adres) Czas wywołania i ilość pamięci zajmowane przez argumenty funkcji jest więc niezależny od typu argumentów Wszystkie operacje modyfikujące wartość wskazywaną przez a lub b będą miały swoje odzwierciedlenie na zewnątrz funkcji Przekazanie argumentu przez referencję, działa tak jak przekazanie argumentu przez wskaźnik, z tym że nie ma etapu kopiowania adresu (metoda ta jest najszybsza)

18 Ochrona argumentów przed zmianami Przekazanie argumentów przez wskaźnik lub referencję pozwala na zwiększenie szybkości wywoływania funkcji (szczególnie w przypadku argumentów o dużym rozmiarze) Może to jednak powodować że nastąpi zmiana argumentów przekazanych do funkcji (co nie zawsze jest pożądane) Zapewnić że argumenty nie zostaną zmodyfikowane przekazując je jako referencję do stałej void SzybkaFunkcja(const int& X) { int a=x; //ok X=1;//błąd zmienna tylko do odczytu } void SzybkaFunkcja(const int* X) { int a=*x; //ok *X=1;//błąd zmienna tylko do odczytu }

19 Dynamiczny przydział pamięci Pamięć dla zmiennych i tablic deklarowanych w sposób pokazywany poprzednio jest przydzielona w chwili gdy program napotyka deklarację zmiennej: { float a; int tab[100]; char znak;... } Rozmiar zmiennej (np. tablicy) musi być znany już w chwili uruchamiania programu. Konieczne jest więc deklarowanie tablic większych niże maksymalny rozmiar wprowadzony przez użytkownika. Zmienne automatyczne istnieją od momentu deklaracji do końca zasięgu ich widoczności. Program sam przydziela i zwalnia pamięć

20 Dynamiczny przydział pamięci cd.. Pamięć może być również przydzielana ręcznie przez użytkownika: przez zastosowanie operatora new. Składnia ma postać: typ* wsk = new typ; float *wsk; wsk=new float; *wsk = 6.0; wsk=new float; przydzielony blok nie ma stowarzyszonej żadnej zmiennej automatycznej i istnieje do czasu aż użytkownik uwolni przydzieloną pamięć. Składnia ma postać: delete wskaźnik; delete wsk; wsk; wsk komórka pamięci... adres zmienn. int adres A 100B FF01 FF02 FF03 FF04 FF05 FF06

21 Przydział pamięci dla tablic w programie można uzależnić ilość przydzielanej pamięci od aktualnego zapotrzebowania. rezerwacja pamięci dla tablicy o N elementach ma postać: typ* wsk=new typ[n]; float *ptab; int N; cout<< Ile elementów chcesz wprowadzić? ; cin>>n; ptab=new float[n]; for(int i=0;i<n;i++) cin>>ptab[i]; //lub cin>>*(ptab+i); Zwolnienie pamięci dla tablicy odbywa się za pomocą operatora delete[] delete[] ptab; Uwaga: delete ptab; //zwolnienie pamięci elementu 0 tablicy!!!

22 Weryfikacji prawidłowego przydziału pamięci Sprawdzenie poprawności przydzielenia pamięci jest istotne szczególnie przy tworzeniu tablic o dużych rozmiarach. przy stosowaniu operatora new, jeśli można zarezerwować żądany przez użytkownika blok pamięci zwracany jest jego adres, w innym przypadku, operator new nie zwraca żadnej wartości Stąd można zastosować następującą procedurę sprawdzania: int N; float *ptab = null; cin>>n; ptab=new float[n]; if(ptab==null) { cout<< blad przydzialu ; exit(-1); }... // pamięć przydzielona OK

23 Przydział pamięci cd. Można stworzyć funkcje dedykowaną do przydziału pamięci, której zadaniem będzie sprawdzenie poprawności przydziału float* PrzydzielPamiec(int N) { float *ptab = null; cin>>n; ptab=new float[n]; if(ptab==null) { cout<< blad przydzialu ; exit(-1); } return ptab; } Użycie (wywołanie) będzie miało postać: int n; cin>>n; float* tab=przydzielpamiec(n);...

24 Tablice 2D W języku C można zdefiniować tablicę dwuwymiarową: int n=2,m=4; //Deklaracja tablicy 2x4 int tab[2][4]; //zapis wartości do pierwszego elementu Tab[0][0]=1; //wypelnenie wszystkich elementów zerami for(int i=0;i<n;i++) for(int j=0;j<m;j++) tab[i][j]=0;

25 Wskaźniki do funkcji Dla funkcji: typ nazwa(argumenty){} np.: int funkcja(float wartosc){} Można stworzyć wskaźnik: typ (*nazwa)(argumenty) np.: int (*wsk_funkcji)(float); Taki że wsk_funkcji=&funkcja; Wywołąnie funkcji może mieć postać: (*wsk_funkcji)(2.0);

26 Dynamiczne tablice 2D W języku C nie ma komendy automatycznie przydzielającej pamięć dla tablic 2D, możemy natomiast można stworzyć wiele tablic 1D, a wskaźniki do nich umieścić w tablicy, której elementy są typu typ* Int** wsk_2d //tworzenie 2D tablicy NxM typu int Int** tab=new int*[n]; Int* wsk1 Int* wsk2. Int* wskn int.... int int.... int. int.... int for(int i=0;i<n;i++) tab[i]=new int[m]; //odczyt/zapis danych // z dynamicznej tablicy 2D Tab[0][0]=0; //usuwanie tablicy 2D NxM typu int for(int i=0;i<n;i++) delete[] tab[i];//usuwa wiersze delete[] tab; //usuwa kolumny

27 Grupowanie zmiennych Często pewien obiekt jest opisywany nie przez jedną zmienną, ale przez pewien zestaw w celu przechowania danych osoby w programie należy zdefiniować kilka zmiennych: char imie_nazwisko[25]; int wiek; char plec; aby dodaś kolejną osobę należy stworzyć kolejne zmienne char imie_nazwisko1[25]; int wiek1; char plec1;

28 Struktury Struktury są typami umożliwiającymi grupowanie zmiennych. struct snazwa { typ pole1; typ pole 2; typ pole 3; }; Struktura służąca do przechowywania danych osoby: struct sosoba { char Imie_Nazwisko[25]; int wiek; char plec; }; Uwaga: definicja typu strukturalnego powinna znajdować się w pliku nagłówkowym

29 Struktury - wykorzystanie Można zadeklarować zmienną typu strukturalnego sosoba student; Do odwołania się do konkretnego pola struktury stosuje się operator '.' cout<< Wprowadz imię i nazwisko ; cin.getline(student.imie_nazwisko,25); cout<< Podaj wiek ; cin>>student.wiek; cout<< Podaj plec ; cin>>student.plec;

30 Tablice struktur - wykorzystanie W celu przechowania wielu osób można zadeklarować tablicę: sosoba studenci[50]; Do odwołania się do konkretnego pola struktury stosuje się operator '.' for(int i=0; i<50; i++) { cout<< Wprowadz imię i nazwisko ; cin.getline(studenci[i].imie_nazwisko,25); cout<< Podaj wiek ; cin>>studenci[i].wiek; cout<< Podaj plec ; cin>>studenci[i].plec; }

31 Wskaźniki do struktur Wskaźników do struktur używa się tak jak innych wskaźników do typów wbudowanych sosoba student1,student2; sosoba* wsk; wsk = &student1; Odwołanie do pól struktury (selektor '.') *wsk.wiek=16; cin.getline(*wsk.imie_nazwisko,25); Student1 Student2 Imie_Nazwisko wiek plec Imie_Nazwisko wiek plec wsk Bardziej poprawne odwołanie do pól struktury, dla wskaźników (selektror ->) wsk->wiek=16; cin.getline(wsk->imie_nazwisko,25);

32 Funkcje operujące na strukturach Zmienna typu strukturalnego może być przekazywana do funkcji tak jak zmienna wbudowana void Wyswietl(sOsoba* O) { cout<<o->imie_nazwisko<<endl << wiek: <<O->Wiek<<endl << plec: <<O->plec<<endl; } Przekazanie adresu zmiennej pozwala przyspieszyć czas wykonywania funkcji (pola nie są kopiowane) sosoba student;... Wyswietl(&student);

33 Przydział pamięci do struktur Przydział pamięci dla pojedynczej zmiennej strukturalnej, wygląda analogicznie jak dla typów wbudowanych sosoba* wsk; wsk = new sosoba;... delete wsk; Przydział pamięci dla tablic struktur sosoba* posoby; int N; cout<< ile osób chcesz wprowadzic ; cin>>n; posoby = new sosoba[n];... delete[] posoby;

34 Wady stosowania tablic struktur Dodawanie/usuwanie elementów stworzyć nową tablicę o właściwym rozmiarze, przekopiować wszystkie elementy ze starej tablicy do nowej (dodając/usuwając pewne elementy) usunąć starą tablicę Aby przestawić 2 elementy (np. przy sortowaniu) w tablicy należy zapamiętać pierwszy element w elemencie tymczasowym (skopiować wszystkie jego pola) przypisać wartości pół 2 elementu do 1 elementu przypisać wartość elementu tymczasowego do 2 elementu kopiowanie 2 elementów: sosoba o1,o2;... strcpy(o1.imienazwisko, o2.imienazwisko); o1.wiek=o2.wiek; o1.plec=o2.plec; Uwaga: struktury mogą zajmować dużo miejsca w pamięci, stąd operacja kopiowania elementów jest czasochłonna i może pochłaniać wiele zasobów

35 Dynamiczne struktury danych STOS wstawianie, usuwanie i dostęp do składników są możliwe tylko w jednym końcu zwanym wierzchołkiem stosu KOLEJKA dołączanie składników jest możliwe tylko w jednym końcu, a usuwanie tylko w drugim końcu LISTA dla każdego składnika (poza pierwszym i ostatnim) jest określony jeden składnik poprzedni i jeden składnik następny lub tylko składnik poprzedni lub następny, w dowolnym miejscu można dołączać lub usuwać składnik DRZEWO dla każdego składnika (poza pierwszym) jest określony jeden składnik poprzedni i dla każdego składnika (poza ostatnim) jest określonych n (n 2) składników następnych GRAF struktury definiowane przez dwa zbiory: zbiór wierzchołków i zbiór krawędzi określający powiązania pomiędzy poszczególnymi wierzchołkami.

36 Stos (LIFO) Początek -wstawianie -usuwanie -odczyt Element osoba P Element osoba P Element osoba P

37 Kolejka (FIFO) Początek -wstawianie Element osoba P Element osoba P Element osoba P Koniec -usuwanie -odczyt

38 Listy dynamiczne dwukierunkowe Tablice wymagały przydzielenia ciągłego obszaru pamięci, stąd każda modyfikacja wiązała się z ingerencją w zawartość całej tablicy Zastosowanie struktur dynamicznych tj. Listy pozwala ominąć ten problem. Rozpatrzmy strukturę umożliwiającą zaimplementowanie wytworzenie listy dwukierunkowej: struct sosoba { char Imie_Nazwisko[25]; int wiek; char plec; sosoba* N;//nastepny element sosoba* P;//poprzedni element }; Pola N i P przechowują adresy następnego i poprzedniego elementu listy. Wartość NULL tego pola oznacza, że nie istnieje następny (aktualny element jest ostatni) lub poprzedni element (aktualny element jest pierwszy.

39 Dodawanie elementów do listy Załóżmy że zmienna sosoba *root przechowuje adres pierwszego elementu listy sosoba *root; root = new sosoba; root->n=null;//ostatni element root->p=null; //pierwszy element root null osoba N P null dodawanie kolejnego elementu d listy sosoba* nowy=new sosoba nowy->p=root; root->n=nowy; nowy->n=null; //ostatni element root null osoba N P osoba nowy N P null

40 Poszukiwanie ostatniego elementu na liście Ostatnim elementem na liście jest ten, którego pole N ma wartość null. Poniższa funkcja poszukuje ostatniego elementu na liście i zwraca jego adres. sosoba* Ostatni(sOsoba* root) { sosoba* aktualny=root; while(aktualny->n!= null) { aktualny = aktualny->n; } return aktualny; } root null osoba N P osoba N P osoba N P osoba N P null

41 Dodawanie elementu na końcu listy Aby dodać element na końcu listy należy odszukać element ostatni przydzielić pamięć dla nowego elementu zaktualizować pola N i P nowego i ostatniego elementu //dodawanie elementu sosoba *koniec=ostatni(root); sosoba *nowy=new sosoba; koniec->n=nowy; nowy->p=koniec; nowy->n=null; root null osoba N P osoba N P osoba N P koniec osoba N P null osoba nowy N P null

42 Przeszukiwanie listy Wyświetlić osoby, których wiek wynosi 28 lat; sosoba* aktualny=root; int wiek =28; while(aktualny!= null) // przechodzi do pierwszego do ostatniego elementu { if(aktualny->wiek==wiek) Wyswietl(aktualny)l aktualny = aktualny->n; } root null osoba N P osoba N P osoba N P osoba N P osoba N P null

43 Przestawianie 2 elementów Aby przestawić 2 sąsiednie elementy należy określić adresy tych elementów zmienić wartości pól elementów poprzedzających i następujących sosoba* E1;E2,Po,Na... E2=E1->N; Po=E1->P; Na=E2->N; osoba E2 N P Po->N=E2; E2->P=Po; Na->P=E1; E1->N=Na root null osoba Po N P osoba E1 N P E1->P=E2; E2->N=E1; osoba Na N P

44 Usuwanie elementów z listy Aby usunąć element o adresie E1 Określić adresy elementów poprzedniego i następnego Zaktualizować pole N poprzednika tak by wskazywało adres elementu następnego Zaktualizować pole P el. następnego tak by wskazywało adres elementu poprzedniego uwolnić pamięć dla obiektu E1 sosoba* E1;Po,Na... Po=E1->P; Na=E1->N; Po->N=Na; Na->P=Po; delete E1; root null osoba N P osoba Po N P osoba E1 N P osoba Na N P osoba N P null

45 Listy jednokierunkowe Element strukturalny struct sosoba { char Imie_Nazwisko[25]; int wiek; char plec; sosoba* N;//nastepny element }; osoba N osoba nowy N null Gdzie wskaźnik N przechowuje adresy następnego i poprzedniego elementu listy. Wartość NULL tego pola oznacza, że nie istnieje następny (aktualny element jest ostatni) lub poprzedni element (aktualny element jest pierwszy. Operacje przeszukiwania listy, oraz dodawanie elementu do końca listy przebiegają tak jak dla list dwukierunkowych. Natomiast operacja usuwania elementu z listy czy też przestawiania są trudniejsze.

46 Usuwanie elementów z listy jednokierunkowej Aby usunąć element o adresie E1 Określić adresy elementu poprzedzającego element do usunięcia (spełniającego warunek E->N==E1 Dokonać przepisania E->N=E1->N Usunąć element E1 (delete E1;) sosoba* E1;Po,Na... //znajdź E taki że E->N==E1 E->N=E1->N; Delete E1; root osoba N osoba Po N osoba E1 N osoba Na N osoba N null

47 Złożoność obliczeniowa Typy złożoności: Złożoność algorytmów (ilość operacji) Złożoność czasowa Złożoność pamięciowa Sposób reprezentacji: zazwyczaj złożoność określa się jako funkcję rozmiaru problemu (np.. ilości danych, wielkości zbioru).

48 Złożoność obliczeniowa - funkcja Typy złożoności: O(n) złożoność liniowa np. T(n)=a 1 n+a 0 złożoność będzie funkcją liniową ilości danych O(n2 ) złożoność kwadratowa np. T(n)=a 2 n 2 +a 1 n+a 0 O(log(n)) złożoność logarytmiczna NP - (non deterministic polynomial time problems)

49 Złożoność dla sortowania stabilnego sortowanie bąbelkowe (ang. bubblesort) O(n2 ) sortowanie przez wstawianie (ang. insertion sort) O(n 2 ) sortowanie przez scalanie (ang. merge sort) O(nlog(n)), wymaga O(n) dodatkowej pamięci sortowanie przez zliczanie (ang. counting sort lub count sort) O(n + k), wymaga O(n + k) dodatkowej pamięci sortowanie kubełkowe (ang. bucket sort) O(n), wymaga O(k) dodatkowej pamięci sortowanie pozycyjne (ang. radix sort) O(d(n + k)), gdzie k to wielkość domeny cyfr, a d szerokość kluczy w cyfrach. Wymaga O(n + k) dodatkowej pamięci sortowanie biblioteczne (ang. library sort) O(nlog n), pesymistyczny O(n 2 )

50 Złożoność dla sortowania niestabilnego sortowanie przez wybieranie (ang. selection sort) O(n2 ) może być stabilne po odpowiednich zmianach sortowanie Shella (ang. shellsort) złożoność nieznana; sortowanie grzebieniowe (ang. combsort) złożoność nieznana; sortowanie szybkie (ang. quicksort) Θ(nlog n), pesymistyczny O(n 2 ); sortowanie introspektywne (ang. introspective sort lub introsort) O(nlog n); sortowanie przez kopcowanie (ang. heapsort) O(nlog n);

51 Sortowanie kubełkowe Podziel zadany przedział liczb na n podprzedziałów (kubełków) o równej długości. Przypisz liczby z sortowanej tablicy do odpowiednich kubełków. Sortuj liczby w niepustych kubełkach. Wypisz po kolei zawartość niepustych kubełków.

52 Struktura drzewiasta pojęcia podstawowe Korzeń drzewa wierzchołek, do którego nie dochodzi żadna krawędź Następnik węzła p każdy węzeł r dla którego istnieje krawędź ( p, r ) Wierzchołek wewnętrzny każdy wierzchołek który ma następnik Liść wierzchołek nie posiadający następnika Poprzednik węzła p węzeł r z którego prowadzi krawędź ( r, p )

53 Struktura drzewiasta pojęcia podstawowe (cd..) Potomkami węzła p są wszystkie następniki węzła p jak i następniki tych następników itd. a do liści włącznie. Przodkiem węzła p jest jego poprzednik, ale także poprzednik tego poprzednika itd. a do korzenia włącznie. Synem węzła p jest każdy jego bezpośredni następnik. Ojcem węzła p jest jego bezpośredni poprzednik. Głębokość (lub poziom) wierzchołka w drzewie to jego odległość od korzenia Wysokość wierzchołka to maksymalna długość drogi od danego wierzchołka do liścia.

54 Struktury drzewiaste pojęcia podstawowe (cd..) Drzewo uporządkowane drzewo w którym gałęzie każdego węzła są uporządkowane Stopień węzła p liczba bezpośrednich potomków węzła p. Stopień drzewa maksymalny stopień z wszystkich węzłów drzewa Długość drogi do węzła x liczba krawędzi (gałęzi) przez które należy przejść od korzenia do węzła x Długość drogi drzewa (długość drogi wewnętrznej) suma dróg wszystkich jego składowych.

55 Drzewo binarne Drzewo binarne drzewo uporządkowane o stopniu 2) Jest to skończony zbiór elementów (węzłów), który jest albo pusty, albo zawiera korzeń (węzeł) z dwoma rozłącznymi binarnymi drzewami zwanymi lewym i prawym poddrzewem.

56 Reprezentacja działań arytmetycznych za pomocą DB y=(a+b/c)*(d-c*f)

57 Binarne drzewo poszukiwań Binarne drzewo poszukiwań (ang. Binary Search Tree (BST)) dynamiczna struktura danych będąca drzewem binarnym, w którym lewe poddrzewo każdego węzła zawiera wyłącznie elementy o kluczach nie większych niż klucz węzła a prawe poddrzewo zawiera wyłącznie elementy o kluczach nie mniejszych niż klucz węzła. Dla pełnego drzewa BST o n węzłach pesymistyczny koszt każdej z podstawowych operacji wynosi O(log n). (operacje wykonywane są wzdłuż drzewa). w skrajnym przypadku, gdy drzewo składa się z jednej gałęzi koszt ten wzrasta do O(n).

58 Struktury drzewiaste Element strukturalny struct slisc { char napis[25]; Int licznik; slisc* L;//lewy lisc slisc* R;//prawy lisc }; Lisc R L root osoba Lisc R L osoba Lisc R L null osoba Lisc R L null null null Gdzie wskaźnik R przechowuje adres prawego a L lewego elementu węzła null

59 Sortowanie z wykorzystaniem drzew Załóżmy że w drzewie chcemy przechowywać zbiór słów znajdujących się w pewnym tekście. Umieszczanie słów będzie przebiegało wg następującego algorytmu 1) Pobierz słowo 2) Porównaj słowo ze słowem w aktualnym węźle 3) Jeśli słowo jest: - mniejsze (w sensie alfabetycznym) przejdź do lewego węzła - większe (w sensie alfabetycznym) przejdź do prawego węzła - równe, zwiększ licznik węzła i wróć do pkt 1 4) Jeśli kolejny węzeł nie istnieje dodaj go, umieść w nim słowo i wróć do pkt. 1 null Lisc R L osoba Lisc R L osoba Lisc R L null null osoba Lisc R L null null

60 Sortowanie z wykorzystaniem drzew Najmniejszy element znajduje się w końcowym liściu lewym Największy element znajduje się w końcowym liściu prawym W każdym elemencie znajduje się ilość wystąpień danego słowa Funkcja wyświetlająca posortowane drzewo void Wyświetl(sLisc* lisc) { if(lisc->l!=null) Wyswietl(lisc->L); cout<<lisc->napis<<, <<lisc->licznik; if(lisc->r!=null) Wyswietl(lisc->R); }

61 Tablice z haszowaniem (hash table) Tablice z haszowaniem są stosowane, gdy z pewnego dużego zbioru danych w danej chwili musimy znać stosunkowo jego niewielki podzbiór. Elementy z tego podzbioru są zapisywane w tablicy, której indeksy dla danego elementu oblicza specjalna funkcja hashująca.

62 Kopce Kopiec binarny (czasem używa się też określenia sterta) (ang. binary heap) - tablicowa struktura danych reprezentująca drzewo binarne, którego wszystkie poziomy z wyjątkiem ostatniego muszą być pełne. W przypadku, gdy ostatni poziom drzewa nie jest pełny, liści ułożone są od lewej do prawej strony drzewa. index klucz

63 Tworzenie kopców Na pierwszej pozycji znajduje się korzeń. Indeksy lewego i prawego syna węzła i to odpowiedni 2i oraz 2i+1. Indeks rodzica węzła i niebędącego korzeniem to floor(i/2) Wyróżniamy dwa rodzaje kopców binarnych: kopce binarne typu max w których wartość danego węzła niebędącego korzeniem jest zawsze mniejsza niż wartość jego rodzica oraz kopce binarne typu min w których wartość danego węzła niebędącego korzeniem jest zawsze większa niż wartość jego rodzica

64 Dodawanie elementu do kopca Dla kopca n-elementowego typu max wstaw wierzchołek na pozycję n+1 zamieniaj pozycjami z rodzicem (przepychaj w górę) aż do przywrócenia warunku kopca (czyli tak długo, aż klucz rodzica jest większy niż k, lub element dotrze na pozycję 1)

65 Usuwanie wierzchołka kopca usuń wierzchołek ze szczytu kopca przestaw ostatni wierzchołek z pozycji n+1 na szczyt kopca; niech k oznacza jego klucz spychaj przestawiony wierzchołek w dół, zamieniając pozycjami z większymi z dzieci, aż do przywrócenia warunku kopca (czyli aż dzieci będą mniejsze od k lub element dotrze na spód kopca)

66 Sortowanie kopcowe O obl (nlogn), O pam (1) Stwórz kopiec umieszczając w nim kolejne elementy tablicy począwszy od pierwszego elementu nieposortowanej tablicy kopiec Reszta nieposortowanej tablicy Z kopca o rozmiarze n usuń element nr 1 (element maksymalny) i zapisz go na końcu tablicy do początku kopca dodaj element n-1, powtarzaj aż do wyczerpania elementów kopca kopiec Posortowana tablica

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

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

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

Sortowanie bąbelkowe

Sortowanie bąbelkowe 1/98 Sortowanie bąbelkowe (Bubble sort) prosty i nieefektywny algorytm sortowania wielokrotnie przeglądamy listę elementów, porównując dwa sąsiadujące i zamieniając je miejscami, jeśli znajdują się w złym

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

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

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

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Podstawy Informatyki. Metody dostępu do danych

Podstawy Informatyki. Metody dostępu do danych Podstawy Informatyki c.d. alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Bazy danych Struktury danych Średni czas odszukania rekordu Drzewa binarne w pamięci dyskowej 2 Sformułowanie

Bardziej szczegółowo

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki > C++ dynamiczna alokacja/rezerwacja/przydział pamięci Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1429536600 > Dzisiejsze zajęcia sponsorują słówka: new oraz delete

Bardziej szczegółowo

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 > C++ wskaźniki Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 >??? Co to jest WSKAŹNIK? ++ wskaźniki 2 / 20 >??? Co to jest WSKAŹNIK? To po prostu ADRES

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

Podstawy Informatyki. Wykład 6. Struktury danych

Podstawy Informatyki. Wykład 6. Struktury danych Podstawy Informatyki Wykład 6 Struktury danych Stałe i zmienne Podstawowymi obiektami występującymi w programie są stałe i zmienne. Ich znaczenie jest takie samo jak w matematyce. Stałe i zmienne muszą

Bardziej szczegółowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne

Bardziej szczegółowo

Sortowanie. Bartman Jacek Algorytmy i struktury

Sortowanie. Bartman Jacek Algorytmy i struktury Sortowanie Bartman Jacek jbartman@univ.rzeszow.pl Algorytmy i struktury danych Sortowanie przez proste wstawianie przykład 41 56 17 39 88 24 03 72 41 56 17 39 88 24 03 72 17 41 56 39 88 24 03 72 17 39

Bardziej szczegółowo

INFORMATYKA SORTOWANIE DANYCH.

INFORMATYKA SORTOWANIE DANYCH. INFORMATYKA SORTOWANIE DANYCH http://www.infoceram.agh.edu.pl SORTOWANIE Jest to proces ustawiania zbioru obiektów w określonym porządku. Sortowanie stosowane jest w celu ułatwienia późniejszego wyszukania

Bardziej szczegółowo

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium: Laboratorium nr 9 Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium: wskaźniki referencje zastosowanie wskaźników wobec tablic dynamiczny przydział pamięci,

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

Wysokość drzewa Głębokość węzła

Wysokość 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ółowo

Sortowanie - wybrane algorytmy

Sortowanie - wybrane algorytmy Sortowanie - wybrane algorytmy Aleksandra Wilkowska Wydział Matematyki - Katedra Matematyki Stosowanej Politechika Wrocławska 2 maja 2018 1 / 39 Plan prezentacji Złożoność obliczeniowa Sortowanie bąbelkowe

Bardziej szczegółowo

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują

Bardziej szczegółowo

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Służą do łatwiejszej kontroli nad stałymi Ustawianie parametrów o ściśle określonym zbiorze wartości

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce. POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie

Bardziej szczegółowo

Tabela wewnętrzna - definicja

Tabela wewnętrzna - definicja ABAP/4 Tabela wewnętrzna - definicja Temporalna tabela przechowywana w pamięci operacyjnej serwera aplikacji Tworzona, wypełniana i modyfikowana jest przez program podczas jego wykonywania i usuwana, gdy

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH Temat 4: Realizacje dynamicznych struktur danych. Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/

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

KURS C/C++ WYKŁAD 6. Wskaźniki

KURS C/C++ WYKŁAD 6. Wskaźniki Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można

Bardziej szczegółowo

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST) Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie

Bardziej szczegółowo

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego. Kolejki Kolejka priorytetowa Kolejka priorytetowa (ang. priority queue) to struktura danych pozwalająca efektywnie realizować następujące operacje na zbiorze dynamicznym, którego elementy pochodzą z określonego

Bardziej szczegółowo

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

dodatkowe operacje dla kopca binarnego: typu min oraz typu max: ASD - ćwiczenia IX Kopce binarne własność porządku kopca gdzie dla każdej trójki wierzchołków kopca (X, Y, Z) porządek etykiet elem jest następujący X.elem Y.elem oraz Z.elem Y.elem w przypadku kopca typu

Bardziej szczegółowo

Algorytmy i Struktury Danych, 9. ćwiczenia

Algorytmy i Struktury Danych, 9. ćwiczenia Algorytmy i Struktury Danych, 9. ćwiczenia 206-2-09 Plan zajęć usuwanie z B-drzew join i split na 2-3-4 drzewach drzepce adresowanie otwarte w haszowaniu z analizą 2 B-drzewa definicja każdy węzeł ma następujące

Bardziej szczegółowo

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula Programowanie i struktury danych Wykład 4 Dr Piotr ybula Typ wska ź nikowy int* pointer; //wskaźnik do zmiennych typu int pozwala na dostęp do dowolnego miejsca pamięci (zmienne

Bardziej szczegółowo

Drzewa poszukiwań binarnych

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

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Pseudokod: silnia(n): jeżeli n == 0 silnia = 1 w przeciwnym

Bardziej szczegółowo

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Konwersje liczba napis Ćwiczenia 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12,

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. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny

Bardziej szczegółowo

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325 PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj

Bardziej szczegółowo

Wykład 3 Składnia języka C# (cz. 2)

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

Bardziej szczegółowo

Porządek symetryczny: right(x)

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

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej WSTĘP DO INFORMATYKI Adrian Horzyk Drzewa i struktury drzewiaste www.agh.edu.pl DEFINICJA DRZEWA Drzewo

Bardziej szczegółowo

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP Danuta Szeliga AGH Kraków Spis treści I 1 Wstęp 2 Metody proste 3 Szybkie metody sortowania 4 Algorytmy hybrydowe Sortowanie hybrydowe Sortowanie introspektywne

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

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. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne Algorytmy i struktury danych Drzewa: BST, kopce Letnie Warsztaty Matematyczno-Informatyczne Drzewa: BST, kopce Definicja drzewa Drzewo (ang. tree) to nieskierowany, acykliczny, spójny graf. Drzewo może

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

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... X 0 Typy złożone Oczywiście w C++ możemy definiować własne typy złożone (struktury i klasy), tak jak w Pascalu poprzez

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 6b: Model danych oparty na drzewach http://hibiscus.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Model danych oparty na drzewach

Bardziej szczegółowo

Wskaźniki. Programowanie Proceduralne 1

Wskaźniki. Programowanie Proceduralne 1 Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres

Bardziej szczegółowo

Algorytmy i struktury danych. wykład 5

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

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

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

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2016 1 / 8 Plan Wstęp Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz Zmiany w funkcji main()

Bardziej szczegółowo

Sortowanie w czasie liniowym

Sortowanie w czasie liniowym Sortowanie w czasie liniowym 1 Sortowanie - zadanie Definicja (dla liczb): wejście: ciąg n liczb A = (a 1, a 2,, a n ) wyjście: permutacja (a 1,, a n ) taka, że a 1 a n Po co sortować? Podstawowy problem

Bardziej szczegółowo

Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski

Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski : idea Indeksowanie: Drzewo decyzyjne, przeszukiwania binarnego: F = {5, 7, 10, 12, 13, 15, 17, 30, 34, 35, 37, 40, 45, 50, 60} 30 12 40 7 15 35 50 Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH Temat : Drzewa zrównoważone, sortowanie drzewiaste Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH LGORTM I STRUKTUR DNH Temat 6: Drzewa ST, VL Wykładowca: dr inż. bigniew TRPT e-mail: bigniew.tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/ Współautorami wykładu

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 1: Wskaźniki i zmienne dynamiczne Programowanie obiektowe Wykład 1: Wskaźniki i zmienne dynamiczne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Podstawy programowania w C++ Wskaźniki 2 dr Artur Bartoszewski - Programowanie

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 6a Model danych oparty na drzewach 1 Model danych oparty na drzewach Istnieje wiele sytuacji w których przetwarzane informacje mają strukturę hierarchiczną lub zagnieżdżoną,

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA Rekurencja - zdolność podprogramu (procedury) do wywoływania samego (samej) siebie Wieże Hanoi dane wejściowe - trzy kołki i N krążków o różniących się średnicach wynik - sekwencja ruchów przenosząca krążki

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce. Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza

Bardziej szczegółowo

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

// Liczy srednie w wierszach i kolumnach tablicy dwuwymiarowej // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib. Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy

Bardziej szczegółowo

Wstęp do wskaźników w języku ANSI C

Wstęp do wskaźników w języku ANSI C Wstęp do wskaźników w języku ANSI C / Materiał dydaktyczny pomocniczy do przedmiotu Informatyka sem.iii kier. Elektrotechnika/ 1. Wprowadzenie W języku ANSI C dla każdego typu X (wbudowanego, pochodnego,

Bardziej szczegółowo

Wskaźniki. Informatyka

Wskaźniki. Informatyka Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą

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

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane

Bardziej szczegółowo

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Tablice Wskaźniki Adresy pamięci Operator adresu

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

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

Bardziej szczegółowo

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w

Bardziej szczegółowo

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019 .. Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2019 1 / 39 Plan.1 Wstęp.2 Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz.3.4 Zmiany w

Bardziej szczegółowo

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury typy złożone- tablice wielowymiarowe, struktury Wykład 6 Deklarowanie wskaźników nazwa_typu * nazwa_wskaznika; WSKAŹNIKI: PRZYPOMNIENIE Przypisywanie wskaźnikom wartości double * pn = &zmienna_typu_double;

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 > Typy indeksów Indeks jest zakładany na atrybucie relacji atrybucie indeksowym (ang. indexing field). Indeks zawiera wartości atrybutu indeksowego wraz ze wskaźnikami do wszystkich bloków dyskowych zawierających

Bardziej szczegółowo

Algorytmy sortujące i wyszukujące

Algorytmy sortujące i wyszukujące Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.

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

Lista liniowa dwukierunkowa

Lista liniowa dwukierunkowa 53 Lista liniowa dwukierunkowa Jest to lista złożona z elementów, z których każdy posiada, oprócz wskaźnika na element następny, również wskaźnik na element poprzedni. Zdefiniujmy element listy dwukierunkowej

Bardziej szczegółowo

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak: Sortowanie stogowe Drzewo binarne Binary Tree Dotychczas operowaliśmy na prostych strukturach danych, takich jak tablice. W tablicy elementy ułożone są zgodnie z ich numeracją, czyli indeksami. Jeśli za

Bardziej szczegółowo

Jeszcze o algorytmach

Jeszcze o algorytmach Jeszcze o algorytmach Przykłady różnych, podstawowych algorytmów 11.01.2018 M. Rad Plan Powtórka Znajdowanie najmniejszego elementu Segregowanie Poszukiwanie przez połowienie Wstawianie Inne algorytmy

Bardziej szczegółowo

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Egzamin, AISDI, I termin, 18 czerwca 2015 r. Egzamin, AISDI, I termin, 18 czerwca 2015 r. 1 W czasie niezależnym do danych wejściowych działają algorytmy A. sortowanie bąbelkowego i Shella B. sortowanie szybkiego i przez prosty wybór C. przez podział

Bardziej szczegółowo

Wstęp do programowania

Wstę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ół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

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik Wykład X Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2016 c Copyright 2016 Janusz Słupik Drzewa binarne Drzewa binarne Drzewo binarne - to drzewo (graf spójny bez cykli) z korzeniem (wyróżnionym

Bardziej szczegółowo

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 8 Wskaźniki 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania w C++ Wskaźniki 2 Podstawy Pojęcie wskaźnika Wskaźnik na zmienną danego

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 3 Struktury drzewiaste drzewo binarne szczególny przypadek drzewa, które jest szczególnym przypadkiem grafu skierowanego, stopień każdego wierzchołka jest

Bardziej szczegółowo

Programowanie obiektowe W3

Programowanie obiektowe W3 Programowanie obiektowe W3 Przegląd typów strukturalnych w C++ : tablice statyczne i dynamiczne Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki Typy złożone: tablice

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