. Podstawy Programowania 2. Dwukierunkowa lista cykliczna. Arkadiusz Chrobot. 24 kwietnia 2016
|
|
- Kamila Łuczak
- 7 lat temu
- Przeglądów:
Transkrypt
1 .. Podstawy Programowania 2 Dwukierunkowa lista cykliczna Arkadiusz Chrobot Zakład Informatyki 24 kwietnia / 38
2 Plan.1 Wstęp.2 Implementacja Typ bazowy i wskaźnik listy Tworzenie listy Dodawanie elementu do listy Usuwanie elementu z listy Wypisywanie zawartości listy Usuwanie listy.3 Podsumowanie 2 / 38
3 Wstęp Wstęp Lista cykliczna (ang. Circular Linked List) jest listą w której nie jest wyróżniony element początkowy, ani końcowy. Każdy element ma swojego następcę i poprzednika. Listy takie można konstruować jako jedno lub dwukierunkowe. Liniowa lista jednokierunkowa może zostać przekształcona w listę cykliczną poprzez zapisanie w polu wskaźnikowym jej ostatniego elementu adresu elementu pierwszego. Podobne operacje pozwalają zamienić dwukierunkową listę liniową w listę cykliczną. W ramach wykładu zaprezentowany zostanie program, który od tworzy listę, która od momentu powstania jest dwukierunkową listą cykliczną. Następny slajd zawiera rysunek przedstawiający schematycznie taką listę. 3 / 38
4 Wstęp Wstęp node data data data data data data previous previous previous previous previous previous next next next next next next. Dwukierunkowa lista cykliczna 4 / 38
5 Implementacja Implementacja Podobnie jak w przypadku poprzednich list, dwukierunkowa lista cykliczna zostanie zaprezentowana przy pomocy programu, który przechowuje w niej liczby naturalne uporządkowane nierosnąco. Ponieważ lista cykliczna nie ma początku ani końca to ten porządek będzie względny, tzn. zależny od elementu przechowującego bieżąco najmniejszą z liczb zapisanych w liście. Lista cykliczna może być zrealizowana przy pomocy tablicy lub jako dynamiczna struktura danych. Na wykładzie będzie interesował nas ten drugi sposób jej tworzenia. Takie listy dosyć często są realizowane jako listy z wartownikiem, co upraszcza implementację operacji na nich. Zaprezentowane rozwiązanie nie zawiera takiego udogodnienia. 5 / 38
6 Implementacja Typ bazowy i wskaźnik listy Typ bazowy i wskaźnik listy 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 const unsigned int how_many = 2; 5 6 struct list_node 7 { 8 int data; 9 struct list_node *previous, *next; 10 } *list_pointer; 6 / 38
7 Typ bazowy Implementacja Typ bazowy i wskaźnik listy Typ bazowy dwukierunkowej listy cyklicznej jest taki sam, jak typ bazowy dwukierunkowej listy liniowej. Można go również poddawać takim samym modyfikacją, zależnie od problemu jaki staramy się rozwiązać przy użyciu dwukierunkowej takiej listy. Ze względu na konstrukcję dwukierunkowej listy cyklicznej żaden jej element nie będzie zawierał elementu, którego pola wskaźnikowe lub jedno z tych pól miałoby wartość null. Oprócz typu definicji typu bazowego listy i deklaracji jej wskaźnika na poprzednim slajdzie znajdują się instrukcje preprocesora włączające do programu te same pliki nagłówkowe, co w przypadku innych programów dotyczących list oraz definicja stałej, które będzie używana jak argument funkcji wypisującej wartości elementów listy na ekran. 7 / 38
8 Wskaźnik listy Implementacja Typ bazowy i wskaźnik listy W przypadku listy cyklicznej, obojętnie czy jedno, czy dwukierunkowej, wskaźnik listy może wskazywać na dowolny element należący do niej. Nie ma żadnych wymogów, odnośnie tego, który to z nich będzie. Jeśli wskaźnik jest pusty (ma wartość null), to oznacza to, że lista jest pusta. 8 / 38
9 Operacje na liście Implementacja Typ bazowy i wskaźnik listy Dwukierunkowa lista cykliczna jest, podobnie jak poprzednio opisywane listy, abstrakcyjną strukturą danych. Oprócz określenia jej typu bazowego musimy zatem zdefiniować operacje, jakie będą na niej przeprowadzane. Tak jak poprzednio ograniczymy się do tych najbardziej podstawowych: tworzenia listy, dodawania elementu (wraz z wyszukiwaniem elementu w liście), usuwania elementu, wypisywania elementów oraz usuwania listy. 9 / 38
10 Tworzenie listy Implementacja Tworzenie listy 1 struct list_node *create_list(int number) 2 { 3 struct list_node *new_node = (struct list_node *) 4 malloc(sizeof(struct list_node)); 5 if(new_node) { 6 new_node->data = number; 7 new_node->previous = new_node->next = new_node; 8 } 9 return new_node; 10 } 10 / 38
11 Tworzenie listy Implementacja Tworzenie listy Przedstawiona na poprzednim slajdzie funkcja tworzy dwukierunkową listę cykliczną poprzez utworzenie jej pierwszego elementu. Budowa tej funkcji w dużej mierze jest taka sama jak analogicznej funkcji dla dwukierunkowej listy liniowej. Różnica polega na zainicjowaniu pól wskaźnikowych tworzonego elementu nie wartością null, ale adresem tego elementu (wiersz nr 7). Dzięki temu powstaje dwukierunkowa list liniowa składająca się tylko z jednego elementu. 11 / 38
12 Implementacja Dodawanie elementu do listy Dodawanie elementu do listy Operacja dodawania elementu do dwukierunkowej listy cyklicznej musi być przeprowadzana dla niepustej listy. Tak jak w przypadku poprzednich list chcemy, aby wartości w elementach dwukierunkowej listy cyklicznej tworzyły uporządkowany nierosnąco ciąg. Problem znajdywania miejsca dla nowego elementu w takiej liście sprowadza się do znalezienia elementu o wartości większej lub równej tej, która jest w nim zapisana lub do znalezienia elementu o wartości minimalnej w całej liście. Ten ostatni przypadek ma zastosowanie w sytuacji wstawiania elementu o wartości większej od wartości wszystkich elementów dotychczas tworzących listę. Obie operacje wyszukiwania są zaimplementowane w osobnych, pomocniczych funkcjach, które będą przedstawione na kolejnych slajdach. 12 / 38
13 Implementacja Dodawanie elementu do listy Znajdowanie najmniejszej wartości w liście Dodawanie elementu do listy 1 struct list_node *find_minimum_value_node( 2 struct list_node *list_pointer) 3 { 4 struct list_node *start = NULL, *result = NULL; 5 start = result = list_pointer; 6 int minimum = list_pointer->data; 7 do { 8 if(minimum>list_pointer->data) { 9 minimum = list_pointer->data; 10 result = list_pointer; 11 } 12 list_pointer = list_pointer->next; 13 } while(list_pointer!=start); 14 return result; 15 } 13 / 38
14 Implementacja Dodawanie elementu do listy Znajdowanie najmniejszej wartości w liście Dodawanie elementu do listy Zadaniem przedstawionej na poprzednim slajdzie funkcji jest odnalezienie elementu listy zawierającego minimalną liczbę zapisaną w tej liście. W przypadku gdyby taka wartość kilkukrotnie się powtarzała, czyli na liście występowałoby skupisko elementów, inaczej klaster, zawierających te same wartości, to ta funkcja znajduje pierwszy lub ostatni element tego klastra. Zapewnia to zachowanie pozostałych funkcji zdefiniowanych w tym programie. Funkcja find_minimum() używa do znalezienia elementu o wartości minimalnej modyfikacji algorytmu, który wyszukuje wartość minimalną w nieuporządkowanej tablicy. Do tej funkcji przekazywany jest wskaźnik na listę, a zwraca ona adres elementu zawierający liczbę o minimalnej wartości. Algorytm jej działania wymaga, aby wszystkie elementy listy zostały sprawdzone w pętli. Ponieważ w żadnym polu wskaźnikowym elementów listy nie ma zapisanej wartości null, która sygnalizowałaby kiedy pętla musi się zatrzymać, to należy rozwiązać problem jej zakończenia. 14 / 38
15 Implementacja Dodawanie elementu do listy Znajdowanie najmniejszej wartości w liście Dodawanie elementu do listy W wierszu nr 4 funkcji find_minimum_value_node() zadeklarowane są dwie zmienne wskaźnikowe: start i result. W kolejnym wierszu obie te zmienne są inicjowane bieżącą wartością wskaźnika listy, ale ich rola będzie inna. Zmienna start będzie przechowywała adres elementu, od którego rozpocznie się przeszukiwania listy. Do poruszania się po liście będzie służył w pętli wskaźnik list_pointer. Jeśli jego wartość pokryje się z wartością zmiennej start, to będzie to oznaczało, że wszystkie elementy listy zostały odwiedzone i należy ją zakończyć. Aby pętla przynajmniej raz się wykonała ten warunek powinien być badany po wykonaniu instrukcji stanowiących jej ciało, dlatego zamiast pętli while została zastosowana w tej funkcji pętla do while. Po zakończeniu tej pętli zmienna result będzie wskazywała element o najmniejszej wartości w liście i jego adres zostanie zwrócony przez funkcję (wiersz nr 14). Zmienna lokalna minimum będzie używana do zapamiętania tej wartości. Obie zmienne są używane w pętli. 15 / 38
16 Implementacja Dodawanie elementu do listy Znajdowanie najmniejszej wartości w liście Dodawanie elementu do listy Najpierw sprawdzane jest w niej, czy bieżący element ma wartość mniejszą od tej zapamiętanej bieżąco w minimum (wiersz nr 8). Jeśli tak, to jego wartość zapamiętywana jest w tej zmiennej, a w zmiennej result jego adres. Po zakończeniu pętli result zawiera adres szukanego elementu. 16 / 38
17 Implementacja Dodawanie elementu do listy Znajdywanie miejsca dla elementu Dodawanie elementu do listy 1 struct list_node *find_next_node(struct list_node *list_pointer, 2 int number) 3 { 4 list_pointer = find_minimum_value_node(list_pointer); 5 struct list_node *start = list_pointer; 6 do { 7 if(list_pointer->data>number) 8 break; 9 list_pointer = list_pointer->next; 10 } while(list_pointer!=start); 11 return list_pointer; 12 } 17 / 38
18 Implementacja Dodawanie elementu do listy Znajdywanie miejsca dla elementu Dodawanie elementu do listy Funkcja find_next_node() zwraca adres elementu, przed którym należy wstawić nowy element do listy. Przyjmuje ona dwa argumenty wywołania, czyli wskaźnik listy oraz liczbę zapisaną w nowym elemencie. Najpierw wywołuje one find_minimum_value_node() celem znalezienia elementu listy o najmniejszej wartości. Będzie to punkt startowy dla jej dalszych poszukiwań (wiersz nr 5), które będą przeprowadzane w pętli do while. Sposób określenia warunku zatrzymania tej pętli jest taki sam, jak w poprzednio opisanej funkcji - pętla wykonuje się tak długo, aż wskaźnik listy wróci do elementu, od którego zaczęło się jej wykonanie (wiersz nr 10). Możliwy jest również inny scenariusz jej zakończenia. Podczas jej wykonania może zostać napotkany element o większej wartości od tej, która będzie umieszczona w nowym elemencie (wiersz nr 7). Jeśli tak się stanie to wykonanie pętli zostanie przerwane (wiersz nr 8). Niezależnie od sposobu zatrzymania pętli, wskaźnik listy będzie zawierał adres elementu, przed którym należy wstawić nowy i on zostanie przez funkcję zwrócony (wiersz nr 11). 18 / 38
19 Implementacja Dodawanie elementu do listy Dodanie elemenut do listy Dodawanie elementu do listy 1 void add_node(struct list_node *list_pointer, int number) 2 { 3 if(list_pointer) { 4 struct list_node *new_node = (struct list_node *) 5 malloc(sizeof(struct list_node)); 6 if(new_node) { 7 new_node->data = number; 8 list_pointer = 9 find_next_node(list_pointer,number); 10 new_node->next = list_pointer; 11 new_node->previous = list_pointer->previous; 12 list_pointer->previous->next = new_node; 13 list_pointer->previous=new_node; 14 } 15 } 16 } 19 / 38
20 Implementacja Dodawanie elementu do listy Dodawanie elementu do listy Funkcja add_node() wykonuje dodanie elementu do listy. Przyjmuje ona dwa argumenty wywołania, czyli wskaźnik na listę i liczbę, którą należy zapisać w jej nowym elemencie. Ponieważ wynik działania funkcji jest widoczny po wypisaniu jej zwartości na ekranie, to funkcja ta nie zwraca żadnej wartości. Najpierw sprawdza ona, czy lista, do której element ma być dodany istnieje (wiersz nr 3). Jeśli tak, to przydziela pamięć na ten element (wiersze 4 i 5). Jeśli ten przydział się nie powiedzie, to funkcja kończy działanie, a stan listy pozostaje niezmieniony. Jeśli jednak przydział zakończy się sukcesem (wiersz nr 6), to w nowym elemencie zapisywana jest przekazana do funkcji liczba (wiersz nr 7), a następnie funkcja ustala adres elementu, przed którym należy wstawić nowy. W tym celu wywołuje find_next_node() (wiersze nr 8 i 9). Po jej zakończeniu funkcja add_node() dołącza nowy element do listy (wiersze nr 10, 11, 12 i 13). Odbywa to się w podobny sposób jak dodanie nowego elementu wewnątrz dwukierunkowej listy liniowej. 20 / 38
21 Implementacja Usuwanie elementu z listy Usuwanie elementu z listy Implementując operację usuwania elementu z dwukierunkowej listy cyklicznej należy rozważyć dwie sytuacje: 1. usuwany jest element z jednoelementowej listy cyklicznej, 2. usuwany jest element z listy zawierającej więcej niż jeden element. W pierwszym przypadku po usunięciu elementu lista stanie się pusta, w drugim lista stanie się tylko mniejsza o jeden element. Należy również zadbać, aby ta operacja była przeprowadzana na niepustej liście. 21 / 38
22 Usuwanie z listy Implementacja Usuwanie elementu z listy 1 struct list_node *delete_node(struct list_node *list_pointer, int number) 2 { 3 if(list_pointer) { 4 list_pointer = find_next_node(list_pointer,number); 5 list_pointer = list_pointer->previous; 6 if(list_pointer->data == number && 7 list_pointer == list_pointer->next) { 8 free(list_pointer); 9 return NULL; 10 } else { 11 if(list_pointer->data == number) { 12 struct list_node *next = list_pointer->next; 13 list_pointer->previous->next = list_pointer->next; 14 list_pointer->next->previous = list_pointer->previous; 15 free(list_pointer); 16 list_pointer=next; 17 } } 20 } 21 return list_pointer; 22 } 22 / 38
23 Usuwanie z listy Implementacja Usuwanie elementu z listy Funkcja delete_node() przyjmuje dwa argumenty wywołania: wskaźnika na listę oraz liczbę, którą powinien zawierać element do usunięcia. W przypadku kiedy jest wiele elementów zawierających taką liczbę, to wystarczy, że zostanie usunięty jeden z nich. Funkcja zwraca wskaźnik na dowolny element listy jeśli po usunięciu elementu lista zawiera inne elementy lub null jeśli po wykonaniu tej operacji lista staje się pusta. W wierszu nr 3 delete_node() najpierw sprawdza, czy została wywołana dla listy, która nie jest pusta. Jeśli tak jest to ustala ona położenie elementu, który należy usunąć. W tym celu wywołuje funkcję find_next_node() (wiersz nr 4), ale ta zwraca wskaźnik na element o wartości większej niż poszukiwana. Zatem w wierszu nr 5 funkcja delete_node() cofa wskaźnik list_pointer o jeden element, a następnie w wierszach nr 6 i 7 sprawdza, czy ten element zawiera poszukiwaną wartość i czy nie jest jedynym elementem listy. Aby uzyskać odpowiedź na to ostatnie pytanie należy sprawdzić, czy dowolne z pól wskaźnikowych elementu nie wskazuje na niego. W tym przypadku wybór padł na next. 23 / 38
24 Usuwanie z listy Implementacja Usuwanie elementu z listy Jeśli oba warunki są prawdziwe, to oznacza, że należy usunąć jedyny element w liście. Zatem w wierszu nr 8 zwalniana jest pamięć przeznaczona na ten element, a w wierszu nr 9 funkcja zwraca wartość null i kończy swoje wykonanie. Jeśli warunek z wierszy nr 6 i 7 nie jest spełniony, to funkcja sprawdza, czy choć element, na który wskazuje wskaźnik list_pointer nie zawiera liczby będącej kryterium usunięcia (wiersz nr 11). Jeśli tak jest to usuwa element z listy, która ma więcej niż jeden element. Najpierw zapamiętuje adres następnego elementu względem tego usuwanego we wskaźniku lokalnym next (wiersz 12). Potem wyłącza usuwany element z listy (wiersze 13 i 14). Operacja ta przebiega identycznie, jak w przypadku usuwania elementu z wnętrza dwukierunkowej listy liniowej. Następnie zwalniana jest pamięć przeznaczona na usuwany element (wiersz nr 15) i wskaźnikowi listy przypisywany jest adres zapamiętany w zmiennej next (wiersz nr 16). To przypisanie jest potrzebne, ponieważ w wierszu nr 21 funkcja zwraca ten wskaźnik i musi on wskazywać na istniejący element listy. 24 / 38
25 Usuwanie z listy Implementacja Usuwanie elementu z listy Gdyby lista przekazana do funkcji delete_node() była pusta, to zwróciłaby ona w wierszu nr 21 wartość null. Gdyby natomiast okazało się, że nie ma w liście elementu, który należałoby usunąć, to zwróciłaby ona tę samą wartość wskaźnika listy, jaka została jej przekazana podczas wywołania. 25 / 38
26 Implementacja Wypisywanie zawartości listy Wypisywanie zawartości listy 1 void print_list(struct list_node *list_pointer, 2 const unsigned int how_many) 3 { 4 if(list_pointer) { 5 list_pointer = find_minimum_value_node(list_pointer); 6 int i; 7 for(i=0; i<how_many; i++) { 8 struct list_node *start = list_pointer; 9 do { 10 printf("%d ",list_pointer->data); 11 list_pointer = list_pointer->next; 12 } while(list_pointer!=start); 13 puts(""); 14 } 15 } 16 } 26 / 38
27 Implementacja Wypisywanie zawartości listy Wypisywanie zawartości listy Operacja wypisywania elementów z listy została zaimplementowana w postaci funkcji print_list(). Funkcja ta nie zwraca żadnej wartości, ale przyjmuje dwa argumenty wywołania. Pierwszym jest wskaźnik na listę, a drugim liczba określająca ile razy (w osobnych wierszach) ma być wypisana zawartość listy. Parametr, przez który jest przekazywany ten argument nazywa się how_many. Argumentem, który jest za niego podstawiany jest stała, która ma taką samą nazwę, a jej wartość wynosi 2. Po sprawdzeniu, czy lista, która ma być wypisana istnieje (wiersz nr 4) funkcja ustala adres elementu o najmniejszej wartości za pomocą wywołania find_minimum_value_node(). Nie jest to konieczne, ale ułatwia sprawdzenie, że faktycznie liczby zapisane w liście tworzą ciąg niemalejący. Następnie w pętli for funkcja zapamiętuje w zmiennej lokalnej start adres elementu, od którego rozpocznie wypisywanie wartości elementów na ekranie i wypisuje je używając do tego pętli do while. Po zakończeniu tej pętli kursor jest przenoszony do następnego wiersza ekranu za pomocą wywołania puts() i zależnie od wartości parametru how_many rozpoczyna się kolejna iteracja pętli for.27 / 38
28 Usuwanie listy Implementacja Usuwanie listy 1 void remove_list(struct list_node **list_pointer) 2 { 3 if(*list_pointer) { 4 struct list_node *start = *list_pointer; 5 do { 6 struct list_node *next = (*list_pointer)->next; 7 free(*list_pointer); 8 *list_pointer = next; 9 } while(*list_pointer!=start); 10 *list_pointer = NULL; 11 } 12 } 28 / 38
29 Usuwanie listy Implementacja Usuwanie listy Usuwanie listy zaimplementowane jest podobnie jak w przypadku liniowych list jedno i dwukierunkowych. Funkcja remove_list() różni się od analogicznych funkcji dla wspomnianych list wstępnym sprawdzaniem, czy usuwana lista istnieje (wiersz nr 3), konstrukcją i rodzajem użytej pętli, w której usuwane są poszczególne elementy oraz tym, że po jej zakończeniu wskaźnikowi listy jest przypisywana wartość null (wiersz nr 10). Ta ostatnia czynność podyktowana jest tym, że po opróżnieniu listy wskaźnik na nią musi być pusty. Ponieważ nie ma w liście pola wskaźnikowego, które posiadałoby wartość null, to nie gwarantuje tego instrukcja z wiersza nr 8. Pętla użyta do zwalniania pamięci przeznaczonej na poszczególne elementy listy to do while. Jej sposób użycia jest podobny jak we wcześniej zaprezentowanych funkcjach. Po pobieżnej analizie możemy mieć wątpliwości, czy sprawdzenie warunku w wierszu nr 9 jest bezpieczne, gdyż wskaźnik start zawiera adres elementu, który został usunięty. Odpowiedź jest pozytywna. Sprawdzany jest tylko adres w tym wskaźniku, nie jest wykonywana jego dereferencja, a więc nie jest odczytywana zawartość nieistniejącego elementu. 29 / 38
30 Funkcja main() Część pierwsza Implementacja Usuwanie listy 1 int main(void) 2 { 3 list_pointer = create_list(1); 4 int i; 5 for(i=2;i<5;i++) 6 add_node(list_pointer,i); 7 for(i=6;i<10;i++) 8 add_node(list_pointer,i); 9 print_list(list_pointer,how_many); 30 / 38
31 Funkcja main() Część pierwsza Implementacja Usuwanie listy W pierwszej części funkcji main() tworzona jest dwukierunkowa lista cykliczna z jednym elementem o wartości 1 (wiersz nr 3), następnie (podobnie jak w przypadku poprzednio opisywanych list) dodawane są do niej elementy o wartościach od 2 do 4 i od 6 do 9 (wiersze nr 5 i 6 oraz 7 i 8). Potem zawartość listy jest wypisywana na ekranie dwukrotnie, zgodnie z wartością stałej how_many (wiersz nr 9). Zwiększając lub zmniejszając wartość tej stałej przed kompilacją możemy wpływać na to ile razy zawartość listy będzie wypisana przy pojedynczym wywołaniu funkcji print_list(). 31 / 38
32 Funkcja main() Część druga Implementacja Usuwanie listy 1 add_node(list_pointer,0); 2 print_list(list_pointer,how_many); 3 add_node(list_pointer,5); 4 print_list(list_pointer,how_many); 5 add_node(list_pointer,7); 6 print_list(list_pointer,how_many); 7 add_node(list_pointer,10); 8 print_list(list_pointer,how_many); 32 / 38
33 Funkcja main() Część druga Implementacja Usuwanie listy W drugiej części funkcji main() do listy są dodawane elementy o wartościach 0, 5, 7 i 10. Po każdym dodaniu zawartość listy jest wypisywana dwukrotnie na ekranie. 33 / 38
34 Funkcja main() Część trzecia Implementacja Usuwanie listy 1 list_pointer = delete_node(list_pointer,0); 2 print_list(list_pointer,how_many); 3 list_pointer = delete_node(list_pointer,1); 4 print_list(list_pointer,how_many); 5 list_pointer = delete_node(list_pointer,1); 6 print_list(list_pointer,how_many); 7 list_pointer = delete_node(list_pointer,5); 8 print_list(list_pointer,how_many); 9 list_pointer = delete_node(list_pointer,7); 10 print_list(list_pointer,how_many); 11 list_pointer = delete_node(list_pointer,10); 12 print_list(list_pointer,how_many); 13 remove_list(&list_pointer); 14 return 0; 15 } 34 / 38
35 Funkcja main() Część trzecia Implementacja Usuwanie listy W trzeciej części funkcji main() z listy usuwane są elementu o wartościach 0, 1, ponownie 1 (tym razem nie zostanie usunięty żaden element). 5, 7 (zostanie usunięty tylko jeden z dwóch elementów zawierających taką wartość) oraz 10. Po każdej takiej operacji zawartość listy jest wypisywana na ekranie. Ostatnią operacją wykonywaną na liście w funkcji main() jest usunięcie tej listy. Po tym funkcja zwraca 0 i kończy swoje działanie. Czynności wykonywane w funkcji main() nie wyczerpują możliwości testowania tej implementacji dwukierunkowej listy cyklicznej, ale stanowią podstawowe minimum pozwalające sprawdzić poprawność działania najważniejszych operacji. 35 / 38
36 Podsumowanie Podsumowanie Przedstawiona implementacja nie wykorzystuje wszystkich możliwości, jakie daje dwukierunkowa lista cykliczna, np. funkcja print_list() wypisuje zawartość listy tylko w jednym kierunku. Podobnie jak listy liniowe, listy cykliczne mogą być zrealizowane z użyciem tablicy, lub tak jak wspomniano wcześniej posiadać element będący wartownikiem. Tego typu listy mają zastosowanie np. w systemach operacyjnych w realizacji rotacyjnego algorytmu szeregowania lub jako bufory np. pakietów danych obsługiwanych przez podsystemy komunikacji sieciowej. D.E.Knuth w pierwszej części Sztuki programowania opisuje algorytm, w którym listy cykliczne są używane do mnożenia wielomianów. Poszczególne elementy takich list zawierają ich współczynniki. 36 / 38
37 Pytania Zakończenie? 37 / 38
38 koniec Zakończenie Dziękuję Państwu za uwagę! 38 / 38
. 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. 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ółowoPodstawy Programowania 2 Jednokierunkowa lista liniowa. Plan. Jednokierunkowa lista liniowa. Jednokierunkowa lista liniowa. Notatki. Notatki.
Podstawy Programowania 2 Jednokierunkowa lista liniowa Arkadiusz Chrobot Zakład Informatyki 26 marca 2019 1 / 57 Plan Jednokierunkowa lista liniowa Implementacja Typ bazowy i wskaźnik listy Tworzenie listy
Bardziej szczegółowoPodstawy Programowania 2 Jednokierunkowa lista liniowa i rekurencja. Plan. Wstęp. Założenia. Notatki. Notatki. Notatki. Notatki.
Podstawy Programowania 2 Jednokierunkowa lista liniowa i rekurencja Arkadiusz Chrobot Zakład Informatyki 2 kwietnia 2019 1 / 58 Plan Wstęp Realizacja Typ bazowy i wskaźnik listy Operacja usuwania elementu
Bardziej szczegółowoPodstawy 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. 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ół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ół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ółowoPodstawy Programowania 2 Grafy i ich reprezentacje. Plan. Wstęp. Teoria grafów Graf skierowany. Notatki. Notatki. Notatki. Notatki.
Podstawy Programowania Grafy i ich reprezentacje Arkadiusz Chrobot Zakład Informatyki 7 maja 09 / 4 Plan Wstęp Zastosowania grafów / 4 Wstęp Grafy są w informatyce strukturami danych stosowanymi w wielu
Bardziej szczegółowo. Podstawy Programowania 2. Grafy i ich reprezentacje. Arkadiusz Chrobot. 9 czerwca 2016
Podstawy Programowania 2 Grafy i ich reprezentacje Arkadiusz Chrobot Zakład Informatyki 9 czerwca 2016 1 42 Plan 1 Wstęp 2 Teoria grafów 3 Grafy jako struktury danych 4 Zastosowania grafów 2 42 Wstęp Wstęp
Bardziej szczegółowo. 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. Algorytmy z nawrotami. Arkadiusz Chrobot. 9 czerwca 2019
Podstawy Programowania 2 y z nawrotami Arkadiusz Chrobot Zakład Informatyki 9 czerwca 2019 1 / 57 Plan 1 Wstęp 2 Problem dzbanów z wodą 3 Analiza problemu 4 Wersja z jednym rozwiązaniem Wersja z wieloma
Bardziej szczegółowoDynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)
Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013
Bardziej szczegół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ółowoAlgorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Animacja. Algorytm DFS Animacja. Notatki. Notatki.
Podstawy Programowania Algorytmy dfs i bfs Arkadiusz Chrobot Zakład Informatyki czerwca 09 / 70 Plan Wstęp Podsumowanie / 70 Wstęp Istnieje wiele algorytmów związanych z grafami, które w skrócie nazywane
Bardziej szczegółowo. Podstawy Programowania 2. Algorytmy dfs i bfs. Arkadiusz Chrobot. 2 czerwca 2019
Podstawy Programowania Algorytmy dfs i bfs Arkadiusz Chrobot Zakład Informatyki czerwca 09 / 70 Plan Wstęp Algorytm BFS Podsumowanie / 70 Wstęp Wstęp Istnieje wiele algorytmów związanych z grafami, które
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ół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ółowoPodstawy Programowania 2 Algorytmy z nawrotami. Plan. Wstęp
Podstawy Programowania y z nawrotami Arkadiusz Chrobot Zakład Informatyki 9 czerwca 09 / 5 Plan Wstęp Problem dzbanów z wodą Analiza problemu Wersja z jednym rozwiązaniem Wersja z wieloma rozwiązaniami
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ółowo. Podstawy Programowania 2. Kolejki i ich zastosowania. Arkadiusz Chrobot. 21 marca 2016
.. Podstawy Programowania 2 Kolejki i ich zastosowania Arkadiusz Chrobot Zakład Informatyki 21 marca 2016 1 / 60 Plan.1 Kolejki i ich klasyfikacja.2 Kolejka fifo Implementacja za pomocą tablicy.3 Testowanie
Bardziej szczegółowoPodstawy Programowania 2 Kolejki i ich zastosowania. Plan. Kolejki i ich klasyfikacja. Kolejki i ich klasyfikacja Kolejki dwustronne. Notatki.
Podstawy Programowania 2 Kolejki i ich zastosowania Arkadiusz Chrobot Zakład Informatyki 18 marca 2019 1 / 60 Plan Kolejki i ich klasyfikacja Testowanie niektórych operacji dynamicznych struktur danych
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ółowoWskazówki dotyczące zmiennych, tablic i procedur 1
Wskazówki dotyczące zmiennych, tablic i procedur 1 Spis treści 1. Tworzenie zmiennych i tablic 1 2. Procedury i zmienne, przekazywanie zmiennych do procedur 5 3. Zakończenie działania procedury 9 1. Tworzenie
Bardziej szczegółowoProgramowanie i struktury danych
Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie
Bardziej szczegół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ółowo7. Pętle for. Przykłady
. Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i
Bardziej szczegółowoPodstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Bardziej szczegółowoZasady programowania Dokumentacja
Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika
Bardziej szczegółowoDynamiczne struktury danych
Listy Zbiór dynamiczny Zbiór dynamiczny to zbiór wartości pochodzących z pewnego określonego uniwersum, którego zawartość zmienia się w trakcie działania programu. Elementy zbioru dynamicznego musimy co
Bardziej szczegół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ółowoPętle. Dodał Administrator niedziela, 14 marzec :27
Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać
Bardziej szczegółowoWykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Bardziej szczegółowoLaboratorium 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ółowoPętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady
Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy
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ółowo6. Pętle while. Przykłady
6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!
Bardziej szczegółowoInformatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
Bardziej szczegółowoznajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Bardziej szczegółowoPodstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Bardziej szczegółowoMETODY 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ół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ółowoPodstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
Bardziej szczegółowoJęzyki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD
Języki C i C++ Wykład: 2 Wstęp Instrukcje sterujące 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe
Bardziej szczegółowoPodstawy Programowania 2 Stos i jego zastosowania. Plan. Abstrakcyjne struktury danych. Stos - wprowadzenie. Notatki. Notatki. Notatki.
Podstawy Programowania Stos i jego zastosowania Arkadiusz Chrobot Zakład Informatyki marca 09 / 7 Plan Abstrakcyjne struktury danych Stos - wprowadzenie Wycieki pamięci Przykłady zastosowania stosu Podsumowanie
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ółowoPodstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, Materiał
Bardziej szczegółowoPodstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
programowania Wykład: 5 Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania w C++ Instrukcje sterujące 2 dr Artur Bartoszewski
Bardziej szczegółowoPodstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok
Bardziej szczegółowo. Podstawy Programowania 2. Stos i jego zastosowania. Arkadiusz Chrobot. 6 marca 2018
.. Podstawy Programowania 2 Stos i jego zastosowania Arkadiusz Chrobot Zakład Informatyki 6 marca 2018 1 / 73 Plan.1 Abstrakcyjne struktury danych.2 Stos - wprowadzenie.3 Stos - implementacja.4 Wycieki
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ół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ół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ółowoĆwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz
Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Podstawowe algorytmy przetwarzania tablic (wypełnianie, porównywanie elementów,
Bardziej szczegółowoWykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Bardziej szczegół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ółowoPodstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.
Podstawy Programowania 1 Sortowanie tablic jednowymiarowych Arkadiusz Chrobot Zakład Informatyki 12 listopada 20 1 / 35 Plan Sortowanie Wartość minimalna i maksymalna w posortowanej tablicy Zakończenie
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ółowoPodstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie Krzysztof Banaś Podstawy programowania 1 są sposobem na przechowywanie w ramach pojedynczej zmiennej zestawu zmiennych różnych typów,
Bardziej szczegółowoInstrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal
Instrukcja wyboru, pętle 2 wykład. Podstawy programowania - Paskal Tematy Instrukcja wyboru jeden z wielu wariantów: case Pętle while repeat for Instrukcje sterowania pętli break continue goto Instrukcja
Bardziej szczegółowoElementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.
Wykład 3 ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Waldi Ravens J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 75 / 146 deklaracje zmiennych instrukcja podstawienia
Bardziej szczegółowoMateriał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach
Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach 27 kwietnia 2012 Wiedząc, że deklarowanie typu rekordowego w języku C/ C++ wygląda następująco: struct element
Bardziej szczegół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ół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ółowoTEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
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++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU
Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale
Bardziej szczegółowoPodstawy Programowania 2 Wskaźniki i zmienne dynamiczne. Plan. Wskaźniki - krótka powtórka. Wskaźniki - krótka powtórka Wartości wskaźników.
Podstawy Programowania 2 Wskaźniki i zmienne dynamiczne Arkadiusz Chrobot Zakład Informatyki 25 lutego 2019 1 / 55 Plan Wskaźniki - co już wiemy? Jak czytać skomplikowane deklaracje? 2 / 55 Zmienne wskaźnikowe,
Bardziej szczegółowoWskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
Bardziej szczegółowoProgramowanie w Turbo Pascal
Skróty: ALT + F9 Kompilacja CTRL + F9 Uruchomienie Struktura programu: Programowanie w Turbo Pascal Program nazwa; - nagłówek programu - blok deklaracji (tu znajduje się VAR lub CONST) - blok instrukcji
Bardziej szczegółowoListy powiązane zorientowane obiektowo
Listy powiązane zorientowane obiektowo Aby zilustrować potęgę polimorfizmu, przeanalizujmy zorientowaną obiektowo listę powiązaną. Jak zapewne wiesz, lista powiązana jest strukturą danych, zaprojektowaną
Bardziej szczegółowolekcja 8a Gry komputerowe MasterMind
lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych
Bardziej szczegółowoWstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami
Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność
Bardziej szczegółowoProgramowanie - wykład 4
Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include
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ółowoProgram znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy dopóki nam sie nie znudzi.
Program 3 Program znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy póki nam sie nie znudzi. #include using namespace std; int main() int odp,a,m; bool pierwsze_podanie =
Bardziej szczegółowoWstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
Bardziej szczegółowoTablice (jedno i wielowymiarowe), łańcuchy znaków
Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie
Bardziej szczegółowoProgram 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:
Program 6 Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje: Funkcja pobierz_osobe wczytuje dane osoby podanej jako argument. Funkcja wypisz_osobe
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ółowoZajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje
Bardziej szczegółowoProgram 14. #include <iostream> #include <ctime> using namespace std;
Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału
Bardziej szczegółowoLaboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów. mgr inż. Arkadiusz Chrobot
Laboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów mgr inż. Arkadiusz Chrobot 10 listopada 2010 1 Preprocesor Preprocesor jest programem uruchamianym przed właściwym procesem kompilacji
Bardziej szczegółowoCzęść 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Bardziej szczegółowoProgramowanie i struktury danych
Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne
Bardziej szczegółowoZapis algorytmów: schematy blokowe i pseudokod 1
Zapis algorytmów: schematy blokowe i pseudokod 1 Przed przystąpieniem do napisania kodu programu należy ten program najpierw zaprojektować. Projekt tworzącego go algorytmu może być zapisany w formie schematu
Bardziej szczegółowoTemat 20. Techniki algorytmiczne
Realizacja podstawy programowej 5. 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych problemów; 2) formułuje ścisły opis prostej sytuacji problemowej, analizuje
Bardziej szczegółowoE S - uniwersum struktury stosu
Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów
Bardziej szczegółowoTechniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
Bardziej szczegółowoLaboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski
Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje
Bardziej szczegółowoAlgorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2
Algorytmy i struktury danych Wykład 6 Tablice rozproszone cz. 2 Na poprzednim wykładzie Wiele problemów wymaga dynamicznych zbiorów danych, na których można wykonywać operacje: wstawiania (Insert) szukania
Bardziej szczegółowoPodstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Bardziej szczegółowoczęść 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia
Język ANSI C część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia najbardziej podstawowe operacje na wskaźnikach int x = 1, y = 2, Tab[10]; int *ip; // czy
Bardziej szczegółowoWidoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?
Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz
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ółowoNiezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.
Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą
Bardziej szczegółowo. Podstawy Programowania 1. Funkcje. Arkadiusz Chrobot. 29 października 2015
.. Podstawy Programowania 1 Funkcje Arkadiusz Chrobot Zakład Informatyki 29 października 2015 1 / 55 Plan.1 Programowanie strukturalne.2 Funkcje.3 Zmienne lokalne.4 Przekazywanie argumentów.5 Wskazówki
Bardziej szczegółowoProgramowanie i techniki algorytmiczne
Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej
Bardziej szczegółowo