Struktury dynamiczne

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

Download "Struktury dynamiczne"

Transkrypt

1 Struktury dynamiczne lista jednokierunkowa lista dwukierunkowa lista cykliczna stos kolejka drzewo Ich wielkość i stopień złożoności zmieniają się w czasie. Struktury dynamiczne oparte są o struktury (struct). Sposób definicji komponentów struktur związany jest z funkcjonalnościami i przeznaczeniem struktur. Poniżej znajdują się opisy implementacji struktur dynamicznych, jak również fragmenty kodów w języku c z podstawowymi działaniami w poszczególnych przypadkach.

2 Lista jednokierunkowa Lista jednokierunkowa zawiera pewne dane (elementy listy) tak jak struktura, oraz wskaźnik na następny element listy. Ostatni element listy jednokierunkowej posiada wskaźnik ustawiony na. Dostęp do listy umożliwia wskaźnik ustawiony na pierwszy element listy. Przeglądanie listy i pobieranie jej elementów (wstawianie tam wartości) możliwe jest dzięki operatorowi wskaźnikowemu ->. start next (1) (2) (3) (N) struct lista_jednokierunkowa { typ dana1; typ dana2;... typ danan; struct lista_jednokierunkowa *next; ;

3 Lista jednokierunkowa Przykład: 1. Zdefiniowanie struktury. struct list_element { int data1; int data2; struct list_element *next; ; 2. Deklaracja wskaźników typu strukturalnego (takiego jak element listy) i ustawienie ich tymczasem na : struct list_element *start=, *pointer=;

4 Lista jednokierunkowa 3. Dynamiczne przydzielenie pamięci dla struktury i ustawienie wskaźnika start na tym obszarze pamięci czyli na tym pierwszym elemencie listy: start = malloc ( sizeof (struct list_element) ); start 4. Ustawienie wskaźnika next na gdyż struktura ta jest jednocześnie ostatnim elementem listy. start->next = ; 5. Przy okazji nadamy wartości polom w pierwszym elemencie listy start->data1 = 100; start->data2 = 100;

5 Lista jednokierunkowa Bieżący stan start 6. Utworzenie następnego elementu listy, dynamicznie. Tym razem ustawimy na ten obszar pamięci wskaźnik pointer. pointer = malloc ( sizeof (struct list_element) ); Po tej operacji sytuacja wygląda następująco: dwa elementy listy jeszcze ze sobą nie skojarzone: pointer start

6 Lista jednokierunkowa 7. Następnie nadamy wartosci polom elemntowi listy, pokazywanemu wskaźnikiem pointer ale, co najważniejsze, połączymy elementy ze sobą w listę dwuelementową pointer->data1 = 200; pointer->data2 = 200; pointer->next = start; //!! po tych operacjach sytuacja wygląda następująco pointer start next 8. Na koniec ustawiamy wskaźnik start na początku listy i kończymy tym samym dodanie nowego elementu na początek listy. start=pointer; Na koniec sytuacja wygląda następująco: pointerstart next

7 Lista jednokierunkowa Teraz wypiszemy wartości elementów listy, poruszając się po elementach listy przy pomocy zdefiniowanych wcześniej wskaźników: while (pointer!= 0){ printf( dana1 = %d, dana2 = %d\n, \ pointer->dana1, pointer->dana2); pointer=pointer->next; //!! Wynik działania będzie następujący (dla przykładowej listy wcześniej zdefiniowanej, dwuelementowej): dana1 = 200, dana2 = 200 dana1 = 100, dana2 = 100

8 Lista jednokierunkowa - przyklad #include <stdio.h> #include <stdlib.h> //deklaracja elementu listy jednokier struct onedir { int data1; int data2; struct onedir *next; ; int main (){ 10 //deklaracja wskaznika do pierwsz. elementu listy i alokacja struct onedir *start; start = (struct onedir*)malloc(sizeof (*start) ); //ustawienie wskaznika next na bo to ostatni(!) elem. listy //kolejne elementy bedziemy wstawiac do listy na poczatek, nie na koniec start >next=; start >data1 = 100; 20 start >data2 = 100; //nastepny element listy, //ale bedzie on (pozniej) w kolejnosci pierwszy struct onedir *pointer; pointer = (struct onedir*)malloc(sizeof (*pointer) ); pointer >data1=200; pointer >data2=200; //ustawienie wskaznika elementu na elemencie nastepnym 30 pointer >next=start;

9 //ustawimy wskaznik start na pocztaku listy //w tym momencie obydwa wskazniki (pointer oraz start) //pokazuja na poczatek listy czyli na pierwszy element start=pointer; //nastepny element listy, chwilowo "niezlokalizowany" //ale za chwile ustawimy go na poczatku //"przesuwajac" pozostale 40 pointer = (struct onedir*)malloc(sizeof (*pointer) ); pointer >data1=300; pointer >data2=300; //ustawienie wskaznikow; jakby ustawienie elementu listy //na poczatku listy pointer >next=start; start=pointer; //wypisanie pol wszystkich elementow listy 50 //petla leci po elementach listy zaczynajac od poczatku listy printf ("\n elementy listy struktur:\n\n"); while (pointer!= 0){ printf (" data1 = %d; data2 = %d\n",pointer >data1, pointer >data2); pointer=pointer >next; printf ("\n\n"); return 0; 60

10 Wynik dzialania elementy listy struktur: data1 = 300; data2 = 300 data1 = 200; data2 = 200 data1 = 100; data2 = 100

11 Lista dwukierunkowa Lista dwukierunkowa zawiera pewne dane (elementy listy) tak jak struktura, oraz dwa wskaźniki: jeden pokazujący na następny element listy oraz drugi - na poprzedni element listy. Wskaźnik na następny element listy ostatniego elementu listy dwukier. jest ustawiany na, i podobnie, wskaźnik pierwszego elementu listy na element poprzedni jest ustawiany na. Przeglądanie listy dwukierunkowej może się odbywać zarówno od początku, za pomocą wskaźnika ustawionego na pierwszym elemencie (tutaj wskaźnik o nazwie start) jak też od końca za pomocą wskaźnika ustawionego na ostatnim elemencie listy. Podobnie jak w przypadku listy jednokierunkowej przeglądanie listy i pobieranie jej elementów (wstawianie tam wartości) możliwe jest dzięki operatorowi wskaźnikowemu ->. start next N pre pre (1) (2) (3) (N) struct lista_dwukierunkowa { typ dana1; typ dana2;... typ danan; struct lista_dwukierunkowa *next, *prev; ;

12 Lista dwukierunkowa Przykład: 1. Zdefiniowanie struktury. struct twodir_element { int data1; int data2; struct twodir_element *next, *prev; ; 2. Deklaracja wskaźników typu strukturalnego (takiego jak element listy) i ustawienie ich tymczasem na : struct twodir_element *start=, *pointer=;

13 Lista dwukierunkowa 3. Dynamiczne przydzielenie pamięci dla dwóch elementów strukturalnych (dwóch elementów listy) i ustawienie wskaźników: start = malloc ( sizeof (struct twodir_element) ); start->data1=100; start->data2=100; start->next=; start->prev=; pointer = malloc ( sizeof (struct twodir_element) ); pointer->data1=200; pointer->data2=200; pointer->next=; pointer->prev=; pointer start

14 Lista dwukierunkowa 4. Połączenie elementów listy poprzez odpowiednie ustawienie wskaźników next oraz prev. Wskaźnik start trzeba ustawić na początku listy, zaś pointer zostanie usunięty. Wcześniej wyświetlimy też listę tzn. pola jej elementów. pointer->next=start; start->prev=pointer; start=pointer; while(pointer!= 0) { printf( %d %d\n,wsk->data1, wsk->data2); pointer=pointer->next; free(pointer); Obraz końcowej sytuacji start

15 Lista dwukierunkowa Następny przykład: trzy elementy listy (obraz po zbudowaniu listy) pointer i usunięcie drugiego elementu (obraz po usunięciu drugiego elementu). start Poniżej pełny program.

16 Lista dwukierunkowa - pełny przykład #include <stdio.h> #include <stdlib.h> //deklaracja elementu listy dwukierunkowej struct twodir{ int data1; int data2; struct twodir *prev, *next; ; int main(){ //pierwszy element listy struct twodir *start; start = (struct twodir*)malloc(sizeof(*start)); start >data1 = 100; start >data2 = 100; start >next=; start >prev=; 10 //drugi elem. listy 20 struct twodir *pointer; pointer = (struct twodir*)malloc(sizeof(*pointer)); pointer >data1=200; pointer >data2=200; pointer >prev=; pointer >next=; //trzeci elem. listy struct twodir *pointer2; pointer2 = (struct twodir*)malloc(sizeof(*pointer)); 30 pointer2 >data1=300;

17 pointer2 >data2=300; pointer2 >prev=; pointer2 >next=; //Polaczenie elementow listy. //Pierwszy element trzeba ustawic na poczatku listy. //Czyli najpierw ma byc 100, pozniej 200 a pozniej 300 //(od lewej do prawej) start >next=pointer; 40 pointer >prev=start; pointer >next=pointer2; pointer2 >prev=pointer; //wypisanie elementow listy: //utworzymy pomocniczy wskaznik, aby pozniej // nie przesuwac wstecz wskaznikow. //ustawimy go na poczatku listy i nim bedziemy sie poslugiwac // przy wypisywaniu. 50 //pozostale wskazniki pozostaja nietkniete struct twodir *temp; // tu nie ma alokacji, nie potrzeba! temp=start; printf ("\n elementy listy, wierszami, przed usunieciem elem. drugiego:\n"); while ( temp!= 0 ){ printf (" data1 = %d, data2 = %d\n",temp >data1,temp >data2); temp=temp >next; printf ("\n\n"); 60 //usuniecie drugiego elementu i polaczenie pierwszego z trzecim pointer >next=; pointer >prev=; start >next=; pointer2 >prev=; free(pointer);

18 start >next=pointer2; pointer2 >prev=start; //wypisanie elementow listy przy pomocy wskaznika temp 70 temp=start; printf ("\n elementy listy, wierszami, po usunieciu elem. drugiego:\n"); while ( temp!= 0 ){ printf (" data1 = %d, data2 = %d\n",temp >data1,temp >data2); temp=temp >next; printf ("\n\n"); return 0; 80 elementy listy, wierszami, przed usunieciem elementu drugiego: data1 = 100, data2 = 100 data1 = 200, data2 = 200 data1 = 300, data2 = 300 elementy listy, wierszami, po usunieciu elementu drugiego: data1 = 100, data2 = 100 data1 = 300, data2 = 300

19 Listy cykliczne Lista dwukierunkowa cykliczna charakteryzuje się tym, że wskaźnik na następny element w ostatnim elemencie nie ma wartości ale pokazuje na początek listy. W przypadku listy cyklicznych dwukierunkowych wskaźnik na poprzedni element w pierwszym elemencie listy pokazuje na element ostatni, zaś wskaźnik elementu ostatniego pokazuje na pierwszy element tej listy. Jednakw przypadku list cyklicznych raczej nie mówi się o początku i końcu, choć często pierwszy element takiej listy wynika z kontekstu i zawartości danych struktury. Pozycję na liście wskazuje zewnętrzny wskaźnik, którego położenie może się dowolnie zmieniać, wówczas trzeba określić jakiś dodatkowy warunek na zakończenie pętli po elementach listy. pointer next next next xt (1) (2) (3) (N) pointer pre next pr xt (1) (2) (3) (N)

20 Stosy Stos jest kolejką typu LIFO (ang. Last In First Out), tzn. elementy położone jako ostatnie są zdejmowane jako pierwsze. Domyślamy się, że mamy zatem np. w przypadku list, szybko dostęp do takiego elementu za pomocą wskaźnika. W przypadku stosu taki wskaźnik nazywany jest wskaźnikiem stosu i konsekwentnie pokazuje na ostatnio dołożony element (pierwszy na górze, na szczycie stosu) Ze stosu zdejmujemy ostatnio dołożony element. Stos może też być zaimplementowany jako tablica jednowymiarowa. Musimy wtedy zaopatrzyć nasze procedury w jakiś sposób identyfikacji ostatnio wprowadzonego elementu do tablicy (indeksu ostatniego elementu, odpowiedniego licznika). Stos w formie tablicy musi zapewnić poprawne wykonanie przynajmniej dwóch funkcji push() - położenie elementu na stosie (w tablicy - dołożenie elementu do tablicy i zwiększenie dynamiczne rozmiaru tablicy o jeden element), oraz pop() - zdjęcie ostatniego elementu z listy (w tablicy - usunięcie ostatniego elementu tablicy i skrócenie tablicy o jeden element). W przypadku implementacji listowej, szczyt stosu znajduje się na początku listy, zaś nowe elementy dokładane są do początku listy. Usuwanie elementów odbywa się od wierzchołka stosu.

21 Stos 1. definicja elementów stosu (tutaj trzech). Bez połączenia, tymczasem. pierwszy = malloc (sizeof(*pierwszy)); pierwszy->data1=100; pierwszy->next=; drugi = malloc (sizeof(*drugi)); drugi->data1=200; drugi->next=; trzeci = malloc (sizeof(*trzeci)); trzeci->data1=300; trzeci->next=; 2. Połączenie elem. stosu pierwszy->next=drugi; drugi->next=trzeci; //ustawienie wskaźnika stosu: wsk_stosu=pierwszy;

22 Stos Stos wygląda tak (można też narysować w pionie ) wsk. stosu pierwszy drugi trzeci 3. zdjęcie elementu ze stosu (zgodnie z zasadą LIFO). To operacja podobna do działania funkcji pop(). wsk_stosu=drugi; pierwszy->next=; free(pierwszy); wsk. stosu drugi trzeci

23 Stos 4. Dołożenie elementu do stosu, w przypadku stosu - zawsze na początek (na szczyt stosu), tak jak w funkcji push(). czwarty = malloc (sizeof(*czwarty)); czwarty->data1=400; czwarty->next=; czwarty->next=drugi; //ustawienie wskaźnika stosu na szczycie stosu wsk_stosu=czwarty; wsk. stosu (pierwszy) drugi trzeci

24 Stos - pełny przykład #include <stdio.h> #include <stdlib.h> //deklaracja elementu stosu; struct stos { int data1; struct stos *next; ; int main (){ 10 //zaalokowanie 3 elementów stosu struct stos *pierwszy; pierwszy = (struct stos*)malloc(sizeof (*pierwszy) ); pierwszy >data1=100; pierwszy >next=; struct stos *drugi; drugi = (struct stos*)malloc(sizeof (*drugi) ); 20 drugi >data1=200; drugi >next=; struct stos *trzeci; trzeci = (struct stos*)malloc(sizeof (*trzeci) ); trzeci >data1=300; trzeci >next=; //polaczenie elemetow stosu pierwszy >next=drugi; 30 drugi >next=trzeci;

25 //wskaznik stosu i ustawienie go na pierwszym elemencie struct stos *wsk stosu; wsk stosu=pierwszy; //wypisanie pol wszystkich elementow stosu printf ("\n elementy stosu przed zdjeciem jednego elementu:\n"); while (wsk stosu!= 0){ printf (" data1 = %d;\n",wsk stosu >data1); 40 wsk stosu=wsk stosu >next; printf ("\n\n"); //zdjecie elementu ze stosu zgodnie z regula LIFO //czyli zdjecie nawyjzej polozonego elementu, pierwszego wsk stosu=drugi; pierwszy >next=; free(pierwszy); printf ("\n elementy stosu po zdjeciu pierwszego elementu:\n"); 50 while (wsk stosu!= 0){ printf (" data1 = %d;\n",wsk stosu >data1); wsk stosu=wsk stosu >next; printf ("\n\n"); //nastepnie dodanie kolejnego elementu na wierzch stosu, //czyli na poczatek listy struct stos *czwarty; czwarty = (struct stos*)malloc(sizeof (*czwarty) ); 60 czwarty >data1=400; czwarty >next=; czwarty >next=drugi; wsk stosu=czwarty;

26 printf ("\n elementy stosu po dodaniu czwartego elementu:\n"); while (wsk stosu!= 0){ printf (" data1 = %d;\n",wsk stosu >data1); wsk stosu=wsk stosu >next; 70 printf ("\n\n"); return 0; elementy stosu przed zdjeciem jednego elementu: data1 = 100; data1 = 200; data1 = 300; elementy stosu po zdjeciu pierwszego elementu: data1 = 200; data1 = 300; elementy stosu po dodaniu czwartego elementu: data1 = 400; data1 = 200; data1 = 300;

27 Kolejka Kolejka jest strukturą danych typu FIFO (ang. First In First Out), czyli pierwszy element jest zdejmowany jako pierwszy, w przeciwieństwie do stosu. Implementowana jest przy pomocy listy jednokierunkowej przy udziale dwóch wskaźników: jeden pokazuje na początek kolejki (na pierwszy element) zaś drugi - na koniec (na ostatni element). Elementy dopisywane są zawsze na koniec kolejki z przesunięciem wskaźnika. Zaś pobierane są zawsze z początku listy (z początku kolejki). start next next next xt (1) (2) (3) (N) struct que { int data1; int data2; struct que *next; ;

28 Kolejka 1. definicja elementów kolejki (tutaj trzech). Bez połączenia, tymczasem. struct que *pierwszy; struct que *drugi; struct que *trzeci; pierwszy = malloc (sizeof(*pierwszy)); pierwszy->data1=100; pierwszy->data2=100; pierwszy->next=; drugi = malloc (sizeof(*drugi)); drugi->data1=200; drugi->data2=200; drugi->next=; trzeci = malloc (sizeof(*trzeci)); trzeci->data1=300; trzeci->data2=300; trzeci->next=;

29 Kolejka 2. Połączenie elem. kolejki pierwszy->next=drugi; drugi->next=trzeci; //ustawienie wskaźnikow kolejki: struct stos *start; struct stos *end; start=pierwszy; end=trzeci; start next next next pierwszy drugi trzeci

30 Kolejka 3. Zdjęcie pierwszego elementu kolejki i dodanie czwartego elementu (na zasadzie FIFO) start=drugi; pierwszy->next=; free(pierwszy); struct que *czwarty; czwarty = malloc (sizeof(*czwarty)); czwarty->data1=400; czwarty->data2=400; czwarty->next=; pierwszy i) i (czwa

31 Kolejka - pełny przykład #include <stdio.h> #include <stdlib.h> //deklaracja elementu kolejki; struct que { int data1; int data2; struct que *next; ; int main (){ 10 //zaalokowanie 3 elementów kolejki struct que *pierwszy; pierwszy = (struct que*)malloc(sizeof (*pierwszy) ); pierwszy >data1=100; pierwszy >data2=100; pierwszy >next=; struct que *drugi; 20 drugi = (struct que*)malloc(sizeof (*drugi) ); drugi >data1=200; drugi >data2=200; drugi >next=; struct que *trzeci; trzeci = (struct que*)malloc(sizeof (*trzeci) ); trzeci >data1=300; trzeci >data2=300; trzeci >next=; 30

32 //polaczenie elemetow kolejki pierwszy >next=drugi; drugi >next=trzeci; //wskazniki kolejki struct que *start, *end; start=pierwszy; end=trzeci; //? end nie wydaje sie potrzebny //wypisanie pol wszystkich elementow kolejki //przed zmianami w kolejce printf ("\n elementy kolejki przed zdjeciem jednego elementu:\n"); while (start!= 0){ printf (" data1 = %d, data2 = %d;\n",start >data1,start >data2); start=start >next; printf ("\n\n"); 40 //usuniecie elementu z kolejki zgodnie z regula FIFO 50 //czyli zdjecie pierwszego elementu start=drugi; pierwszy >next=; free(pierwszy); printf ("\n elementy kolejki po usunieciu pierwszego elementu:\n"); while (start!= 0){ printf (" data1 = %d, data2 = %d;\n",start >data1,start >data2); start=start >next; printf ("\n\n"); 60 //nastepnie dodanie kolejnego elementu na koniec kolejki struct que *czwarty; czwarty = (struct que*)malloc(sizeof (*czwarty) ); czwarty >data1=400; czwarty >data2=400;

33 czwarty >next=; trzeci >next=czwarty; end=czwarty; //? end nie wydaje sie potrzebny 70 printf ("\n elementy kolejki po dodaniu czwartego elementu:\n"); start=drugi; // trzeba z powrotem ustawic na poczatku while (start!= 0){ printf (" data1 = %d, data2 = %d;\n",start >data1,start >data2); start=start >next; printf ("\n\n"); return 0; 80 elementy kolejki przed zdjeciem jednego elementu: data1 = 100, data2 = 100; data1 = 200, data2 = 200; data1 = 300, data2 = 300; elementy kolejki po usunieciu pierwszego elementu: data1 = 200, data2 = 200; data1 = 300, data2 = 300; elementy stosu po dodaniu czwartego elementu: data1 = 200, data2 = 200; data1 = 300, data2 = 300; data1 = 400, data2 = 400;

34 Drzewo Drzewo jest strukturą danych hierarchiczną i (najczęściej) rekurencyjną. Struktury nazywane są węzłami drzewa (ang. node). Drzewa dzielą się na drzewa mnogościowe (każdy węzęł może mieć dowolną ilość potomków nazywanych dziećmi) lub tylko dwóch (w takim przypadku mówimy o drzewach binarnych).

35 Drzewo Specjalny wskaźnik umożliwia dostęp do całego drzewa, ustawiany jest na węźle praoujcu, który nie ma żadnych rodziców, nazywany jest on root czyli korzeń. Jeśli węzęł nie ma któregoś z potomków wówczas wskaźnik next ustawiany jest na. Algorytmy operujące na drzewach oparte są najczęściej o rozwiązania rekurencyjne gdyż każdy węzeł może być traktowany jako osobny rodzic a więc od niego może się teoretycznie zaczynać kolejne drzewo. Typowe algorytmy: wstawianie nowego węzła w jakimś miejscu (na końcu, w środku), usuwanie węzłów i usuwanie całego drzewa, przeszukiwanie drzewa (różne warianty).

36 Rekurencja - przykład #include <stdio.h> //rekurencyjna funkcja obliczajaca silnie long silnia( long n ) { if ( n <= 1 ) return 1; else { return (n * silnia( (n 1) )); int main (){ 10 long ile = 10; long wynik; long i=1; printf("\n\n"); while (i <= 10){ wynik = silnia(i); printf(" %10ld! = %10ld\n",i,wynik); 20 i++; printf("\n\n"); return 0;

37 Drzewo - przykład #include <stdio.h> #include <stdlib.h> #include <time.h> //deklaracja wezla (nodu ) czyli elem. drzewa binarnego; struct node { int data1; struct node *left, *right, *up; ; //funkcja tworzaca nody (wezly) w drzewie //Jako wartosc w polu data1 zostanie wstawiony //podany parametr ile struct node* add node(struct node *new, int ile){ 10 //inicjalizacja wezla i ustawienie wskaznikow na //utworzenie wskaznika pomocniczego do nodu struct node *helper, *which; which = (struct node*)malloc(sizeof (*which) ); which >left = which >right = ; 20 which >data1 = ile; helper = new; // jesli nie bylo zadnego korzenia to mamy nowe drzewo // i nasz nowy nod jest wtedy rootem if (!helper) {new = which; else{ // Petla nieskonczona // W zaleznosci od klucza idziemy do lewego lub 30 // prawego syna, o ile takowy istnieje

38 while(1){ if (ile < helper >data1) { if (!helper >left){ helper >left = which; break; else helper=helper >left; else{ 40 if (!helper >right){ helper >right = which; break; else helper=helper >right; which >up = helper; 50 return which; void rmtree(struct node *tree){ if (tree) { rmtree(tree >left); rmtree(tree >right); rmtree(tree >up); free(tree); 60 int main (){

39 //wskaznik do nodu, //alokacje pamieci zapewnia funkcja add node struct node *root = ; int i, k, ile; 70 //liczba nodow, granicznie moze byc nawet tylko jeden ile = 10; srand(time()); for(i = 0; i < ile; i++){ //liczby losowe 1 9. Takie umiescimy w wezlach //i na podstawie wartosci tych liczb rozmiescimy //kolejne nody w odpowiedni sposob k = 1 + rand() % 9; 80 root = add node(root,k); //usuniecie drzewa rmtree(root); return 0; 90

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

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

Bardziej szczegółowo

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

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 WYKŁAD 10 Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 Tomasz Zieliński ZMIENNE O ZŁOŻONEJ BUDOWIE (1) Zmienne

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

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

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

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

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

E S - uniwersum struktury stosu

E S - uniwersum struktury stosu Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów

Bardziej szczegółowo

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

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie

Bardziej szczegółowo

Stos LIFO Last In First Out

Stos LIFO Last In First Out Stos LIFO Last In First Out Operacje: push - dodanie elementu na stos pop - usunięcie elementu ze stosu empty - sprawdzenie, czy stos jest pusty size - zwrócenie liczby elementów na stosie value (peek)

Bardziej szczegółowo

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

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

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych zajęć

Bardziej szczegółowo

Struktury. Przykład W8_1

Struktury. Przykład W8_1 Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla

Bardziej szczegółowo

Abstrakcyjne struktury danych - stos, lista, drzewo

Abstrakcyjne struktury danych - stos, lista, drzewo Sprawozdanie Podstawy Informatyki Laboratoria Abstrakcyjne struktury danych - stos, lista, drzewo Maciej Tarkowski maciek@akom.pl grupa VII 1/8 1. Stos Stos (ang. Stack) jest podstawową liniową strukturą

Bardziej szczegółowo

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych

Bardziej szczegółowo

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

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach 27 kwietnia 2012 Wiedząc, że deklarowanie typu rekordowego w języku C/ C++ wygląda następująco: struct element

Bardziej szczegółowo

Struktury Danych i Złożoność Obliczeniowa

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

Bardziej szczegółowo

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

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

Programowanie i struktury danych 1 / 44

Programowanie i struktury danych 1 / 44 Programowanie i struktury danych 1 / 44 Lista dwukierunkowa Lista dwukierunkowa to liniowa struktura danych skªadaj ca si z ci gu elementów, z których ka»dy pami ta swojego nast pnika i poprzednika. Operacje

Bardziej szczegółowo

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

Podstawy informatyki 2

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

Bardziej szczegółowo

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

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

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

Bardziej szczegółowo

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

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

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych Wykład 6_ Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych Abstrakcyjny typ danych Klient korzystający z abstrakcyjnego typu danych: o ma do dyspozycji jedynie

Bardziej szczegółowo

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

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński WYKŁAD 8 Funkcje i algorytmy rekurencyjne Proste przykłady Programy: c3_1.c..., c3_6.c Tomasz Zieliński METODY REKURENCYJNE (1) - program c3_1 ======================================================================================================

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void

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

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

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

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1 Kontenery W programowaniu

Bardziej szczegółowo

int tab_a [ 2 ] [ 3 ];

int tab_a [ 2 ] [ 3 ]; // PROGRAM 4_1 - Przyklady dynamicznego tworzenia // i usuwania tablicy dwuwymiarowej int [2][3] #include void main(void) //------------------------------ Przyklad A -------------------------------------------

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

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

Podstawy Programowania 2 Dwukierunkowa lista liniowa. Plan. Wstęp. Implementacja. Notatki. Notatki. Notatki. Notatki.

Podstawy Programowania 2 Dwukierunkowa lista liniowa. Plan. Wstęp. Implementacja. Notatki. Notatki. Notatki. Notatki. Podstawy Programowania 2 Dwukierunkowa lista liniowa Arkadiusz Chrobot Zakład Informatyki 7 kwietnia 2019 1 / 55 Plan Wstęp Implementacja Typ bazowy i wskaźnik listy Tworzenie listy Dodawanie elementu

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

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

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja 1 struktura, kolekcja Kiedy potrzebne Duża liczba danych takiego samego typu tablice a jak nieznana liczba elementów? dane zawierające wartości różnego typu (osoba: pesel, nazwisko, rok urodzenia, pracuje/niepracuje,

Bardziej szczegółowo

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

. 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

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

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

Metody getter https://www.python-course.eu/python3_object_oriented_programming.php 0_class http://interactivepython.org/runestone/static/pythonds/index.html https://www.cs.auckland.ac.nz/compsci105s1c/lectures/

Bardziej szczegółowo

Dynamiczne struktury danych

Dynamiczne struktury danych Listy Zbiór dynamiczny Zbiór dynamiczny to zbiór wartości pochodzących z pewnego określonego uniwersum, którego zawartość zmienia się w trakcie działania programu. Elementy zbioru dynamicznego musimy co

Bardziej szczegółowo

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Algorytmy i struktury danych Wykład 3: Stosy, kolejki i listy Dr inż. Paweł Kasprowski pawel@kasprowski.pl Kolejki FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Stos (stack) Dostęp jedynie

Bardziej szczegółowo

Drzewa wyszukiwań binarnych (BST)

Drzewa wyszukiwań binarnych (BST) Drzewa wyszukiwań binarnych (BST) Krzysztof Grządziel 12 czerwca 2007 roku 1 Drzewa Binarne Drzewa wyszukiwań binarnych, w skrócie BST (od ang. binary search trees), to szczególny przypadek drzew binarnych.

Bardziej szczegółowo

Lista, Stos, Kolejka, Tablica Asocjacyjna

Lista, Stos, Kolejka, Tablica Asocjacyjna Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 5b: Model danych oparty na listach http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Słowem wstępu Listy należą do najbardziej

Bardziej szczegółowo

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 6: Dynamiczny przydział pamięci dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 15 maja 2015 1. Wprowadzenie Instrukcja poświęcona jest dynamicznemu przydziałowi i zwalnianiu pamięci w

Bardziej szczegółowo

Jak napisać listę jednokierunkową?

Jak napisać listę jednokierunkową? Lista jednokierunkowa jest strukturą o dynamicznie zmieniającej się wielkości. Listę można opisać jako uszeregowany zbiór elementów. Każdy element zawiera jakieś dane oraz wskazuje na swojego następcę.

Bardziej szczegółowo

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

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

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

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

Bardziej szczegółowo

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

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

. Podstawy Programowania 2. Drzewa bst - część pierwsza. Arkadiusz Chrobot. 22 maja 2016

. Podstawy Programowania 2. Drzewa bst - część pierwsza. Arkadiusz Chrobot. 22 maja 2016 .. Podstawy Programowania 2 Drzewa bst - część pierwsza Arkadiusz Chrobot Zakład Informatyki 22 maja 2016 1 / 55 Plan.1 Wstęp.2 Definicje.3 Implementacja Typ bazowy i wskaźnik na korzeń Dodawanie elementu

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

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

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

Wstęp. #define include include include include include include

Wstęp. #define include include include include include include 1 FW WSTĘP 1 1. Wstęp. Przedstawiany tu program po wczytaniu tekstu ze standardowego wejścia wypisuje uporządkowaną alfabetycznie listę słów wraz z liczbą ich wystąpień w podanym tekście. Przez słowo rozumiemy

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

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

. Podstawy Programowania 2. Dwukierunkowa lista liniowa. Arkadiusz Chrobot. 7 kwietnia 2019

. Podstawy Programowania 2. Dwukierunkowa lista liniowa. Arkadiusz Chrobot. 7 kwietnia 2019 .. Podstawy Programowania 2 Dwukierunkowa lista liniowa Arkadiusz Chrobot Zakład Informatyki 7 kwietnia 2019 1 / 55 Plan.1 Wstęp.2 Typ bazowy i wskaźnik listy Tworzenie listy Dodawanie elementu do listy

Bardziej szczegółowo

Języki i metodyka programowania. Wskaźniki i tablice.

Języki i metodyka programowania. Wskaźniki i tablice. Wskaźniki i tablice. Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Zmienna to fragment pamięci o określonym rozmiarze identyfikowany za pomocą nazwy, w którym może być przechowywana

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

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

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 INFORMATYKA W SZKOLE Dr inż. Grażyna KRUPIŃSKA grazyna@fis.agh.edu.pl D-10 pokój 227 Podyplomowe Studia Pedagogiczne Sortowanie Dane wejściowe : trzy liczby w dowolnym porządku Dane wyjściowe: trzy liczby

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Sieci powiązań Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk (Wydział Fizyki) PO w. IX Jesień 2014 1 / 24 Sieci powiązań Można (bardzo zgrubnie) wyróżnić dwa rodzaje powiązań

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Liniowe struktury danych - Lista uporzadkowana. Wartownicy. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD)

Bardziej szczegółowo

Podstawowe struktury danych

Podstawowe struktury danych Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Sieci powiązań Paweł Daniluk Wydział Fizyki Jesień 2015 P. Daniluk (Wydział Fizyki) PO w. IX Jesień 2015 1 / 21 Sieci powiązań Można (bardzo zgrubnie) wyróżnić dwa rodzaje powiązań

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

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

tablica: dane_liczbowe

tablica: dane_liczbowe TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica

Bardziej szczegółowo

Przykładowe B+ drzewo

Przykładowe B+ drzewo Przykładowe B+ drzewo 3 8 1 3 7 8 12 Jak obliczyć rząd indeksu p Dane: rozmiar klucza V, rozmiar wskaźnika do bloku P, rozmiar bloku B, liczba rekordów w indeksowanym pliku danych r i liczba bloków pliku

Bardziej szczegółowo

Lista 5 Typy dynamiczne kolejka

Lista 5 Typy dynamiczne kolejka Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Metody i języki programowania 1 Wprowadzenie Lista 5 Typy dynamiczne kolejka Kolejka jest jedną z podstawowych struktur umożliwiających

Bardziej szczegółowo

Temat: Dynamiczne liniowe struktury danych - stos, kolejka, lista. 1. Wady i zalety struktury tablicy

Temat: Dynamiczne liniowe struktury danych - stos, kolejka, lista. 1. Wady i zalety struktury tablicy Temat: Dynamiczne liniowe struktury danych - stos, kolejka, lista. 1. Wady i zalety struktury tablicy Wady ograniczony rozmiar maksymalny konieczno okrelenia stałego rozmiaru tablicy statyczna alokacja

Bardziej szczegółowo

Struktury czyli rekordy w C/C++

Struktury czyli rekordy w C/C++ Struktury czyli rekordy w C/C++ Wprowadzenie do programowania w języku C struktury. pola bitowe, unie Struktury (rekordy) są złożonymi zmiennymi, składającymi się z elementów różnych typów zwanych polami,

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

Wykłady opracowane zostały w oparciu o materiały prof. dr hab. Jerzego Weresa. Poznań 2009/2010 Algorytmy i struktury danych Krzysztof Nowakowski 2

Wykłady opracowane zostały w oparciu o materiały prof. dr hab. Jerzego Weresa. Poznań 2009/2010 Algorytmy i struktury danych Krzysztof Nowakowski 2 Wykłady opracowane zostały w oparciu o materiały prof. dr hab. Jerzego Weresa Poznań 2009/2010 Algorytmy i struktury danych Krzysztof Nowakowski 2 Struktura danych (ang. data structure) sposób uporządkowania

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Liniowe struktury danych - Lista Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.

Bardziej szczegółowo

Wskaźniki w C. Anna Gogolińska

Wskaźniki w C. Anna Gogolińska Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik

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

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

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 2 Podstawy programowania 2 Temat: Zmienne dynamiczne tablica wskaźników i stos dynamiczny Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Tablice wskaźników Tablice

Bardziej szczegółowo

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka

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

Marcin Matusiak i Łukasz Stasiak

Marcin Matusiak i Łukasz Stasiak Marcin Matusiak i Łukasz Stasiak Lista jest sekwencyjną strukturą danych, która składa się z ciągu elementów tego samego typu. Dostęp do elementów listy jest sekwencyjny tzn. z danego elementu listy możemy

Bardziej szczegółowo

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

. Podstawy Programowania 2. Jednokierunkowa lista liniowa. Arkadiusz Chrobot. 28 marca 2017

. Podstawy Programowania 2. Jednokierunkowa lista liniowa. Arkadiusz Chrobot. 28 marca 2017 .. Podstawy Programowania 2 Jednokierunkowa lista liniowa Arkadiusz Chrobot Zakład Informatyki 28 marca 2017 1 / 57 Plan.1 Jednokierunkowa lista liniowa.2 Implementacja Typ bazowy i wskaźnik listy Tworzenie

Bardziej szczegółowo

Paradygmaty programowania. Paradygmaty programowania

Paradygmaty programowania. Paradygmaty programowania Paradygmaty programowania Paradygmaty programowania Dr inż. Andrzej Grosser Cz estochowa, 2013 2 Spis treści 1. Zadanie 2 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do zadania..............................

Bardziej szczegół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

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Drzewa poszukiwań binarnych Kacper Pawłowski Streszczenie W tej pracy przedstawię zagadnienia związane z drzewami poszukiwań binarnych. Przytoczę poszczególne operacje na tej strukturze danych oraz ich

Bardziej szczegółowo

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli) Wykład 7 Abstrakcyjne typy danych słownik (lista symboli) Definicja słownika: Słownik (tablica lub lista symboli) to struktura danych zawierająca elementy z kluczami, która pozwala na przeprowadzanie dwóch

Bardziej szczegółowo