Podstawy Informatyki
|
|
- Justyna Pluta
- 8 lat temu
- Przeglądów:
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)
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ółowoWskaź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ółowoWykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy
Wykład 3 Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Dynamiczne struktury danych Lista jest to liniowo uporządkowany zbiór elementów, z których dowolny element
Bardziej szczegółowoSortowanie 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ółowoAlgorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Bardziej szczegółowoAlgorytmy i złożoności. Wykład 3. Listy jednokierunkowe
Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie
Bardziej szczegółowoTemat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Bardziej szczegółowoLab 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ółowoPodstawy 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 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 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ółowoStruktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Bardziej szczegółowoPodstawy 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ółowoProgramowanie 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ółowoSortowanie. 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ółowoINFORMATYKA 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ółowoLaboratorium 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ółowoZASADY 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ółowoWysokość drzewa Głębokość węzła
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
Bardziej szczegółowoSortowanie - 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ółowoPodstawy 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ółowoTypy 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ółowoJĘ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ółowoZASADY 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ółowoTabela 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ółowoALGORYTMY 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ółowoWstę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ółowoKURS 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ółowoDrzewa 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ółowoKolejka 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ółowododatkowe 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ółowoAlgorytmy 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ółowoProgramowanie 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ółowoDrzewa poszukiwań binarnych
1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie
Bardziej szczegółowoRekurencja. 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ółowoKonwersje 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ółowoDynamiczny 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ółowoAlgorytmy 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ółowoprowadzą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ółowoWykł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ółowoPorządek symetryczny: right(x)
Porządek symetryczny: x lef t(x) right(x) Własność drzewa BST: W drzewach BST mamy porządek symetryczny. Dla każdego węzła x spełniony jest warunek: jeżeli węzeł y leży w lewym poddrzewie x, to key(y)
Bardziej szczegółowoWSTĘ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ółowoAlgorytmy 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ółowoCo 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ółowoStrona 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ółowoProgramowanie 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ółowoPodstawowe algorytmy i ich implementacje w C. Wykład 9
Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny
Bardziej szczegółowoAlgorytmy 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ółowoWskaź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ółowoProgramowanie 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ółowoTeoretyczne 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ółowoWskaź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ółowoAlgorytmy i struktury danych. wykład 5
Plan wykładu: Wskaźniki. : listy, drzewa, kopce. Wskaźniki - wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również
Bardziej szczegółowoZmienne 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ółowoC++ - 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ółowoWyszukiwanie 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ółowoSortowanie 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ółowoTadeusz 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ółowoALGORYTMY 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ółowoALGORYTMY 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ółowoSzablony 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ółowoUniwersytet 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ółowoPodstawy 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ółowoWykł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ółowoTeoretyczne 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ółowo1. 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ółowoWYŻ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ółowoDynamiczne struktury danych
Dynamiczne struktury danych 391 Dynamiczne struktury danych Przez dynamiczne struktury danych rozumiemy proste i złożone struktury danych, którym pamięć jest przydzielana i zwalniana na żądanie w trakcie
Bardziej szczegółowoDYNAMICZNE 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ółowoDla 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.
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ółowoWstę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ółowoWskaź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ółowoPodstawowe struktury danych
Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym
Bardziej szczegółowoPodstawy 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ółowoUniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów
Bardziej szczegółowo1 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ółowoPodstawy 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ółowoWstę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ółowoListy, kolejki, stosy
Listy, kolejki, stosy abc Lista O Struktura danych składa się z węzłów, gdzie mamy informacje (dane) i wskaźniki do następnych węzłów. Zajmuje tyle miejsca w pamięci ile mamy węzłów O Gdzie można wykorzystać:
Bardziej szczegółowoJę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ółowoMateriał 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 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ółowo1. 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ółowotyp 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ółowoZaawansowane 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 >
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ółowoAlgorytmy 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ółowoAlgorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych
Algorytmy i Struktury Danych Wykład IV Sortowania cd. Elementarne struktury danych 1 Co dziś? Dolna granica sortowań Mediany i statystyki pozycyjne Warstwa implementacji Warstwa abstrakcji #tablice #listy
Bardziej szczegółowoLista 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ółowoliniowa - 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ółowoJeszcze 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ółowoEgzamin, 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ółowoWstęp do programowania
Wieczorowe Studia Licencjackie Wrocław, 9.01.2007 Wstęp do programowania Wykład nr 13 Listy usuwanie elementów Poniżej prezentujemy funkcję, która usuwa element o podanej wartości pola wiek z nieuporządkowanej
Bardziej szczegółowodr inż. Paweł Myszkowski Wykład nr 11 ( )
dr inż. Paweł Myszkowski Politechnika Białostocka Wydział Elektryczny Elektronika i Telekomunikacja, semestr II, studia stacjonarne I stopnia Rok akademicki 2015/2016 Wykład nr 11 (11.05.2016) Plan prezentacji:
Bardziej szczegółowoWykł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ółowoPodstawy 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ółowoStruktury 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ółowoProgramowanie 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ółowoJę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