Wstęp do programowania

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

Dynamiczne struktury danych

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Dynamiczne struktury danych

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

Wstęp do programowania

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

Algorytmy i Struktury Danych.

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

Lista dwukierunkowa - przykład implementacji destruktorów

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

Algorytmy i Struktury Danych.

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Podstawowe struktury danych

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

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

Podstawy Programowania 2 Jednokierunkowa lista liniowa. Plan. Jednokierunkowa lista liniowa. Jednokierunkowa lista liniowa. Notatki. Notatki.

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

Drzewa poszukiwań binarnych

. Podstawy Programowania 2. Dwukierunkowa lista cykliczna. Arkadiusz Chrobot. 24 kwietnia 2016

Podstawy Programowania. Listy i stosy

Algorytmy i struktury danych. wykład 5

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

Jak napisać listę jednokierunkową?

ALGORYTMY I STRUKTURY DANYCH

Drzewa wyszukiwań binarnych (BST)

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

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

Algorytmy i język C++

Programowanie i struktury danych

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

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

Listy, kolejki, stosy

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

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

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

Porządek symetryczny: right(x)

Wykład 6. Drzewa poszukiwań binarnych (BST)

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

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

Programowanie obiektowe

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

ZASADY PROGRAMOWANIA KOMPUTERÓW

Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)

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

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Struktury czyli rekordy w C/C++

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński

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)

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Podstawy Informatyki. Metody dostępu do danych

E S - uniwersum struktury stosu

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

Zmienne i struktury dynamiczne

Wykład 2. Drzewa poszukiwań binarnych (BST)

1 Wskaźniki i listy jednokierunkowe

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Podstawy Programowania 2 Jednokierunkowa lista liniowa i rekurencja. Plan. Wstęp. Założenia. Notatki. Notatki. Notatki. Notatki.

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

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

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Algorytmy i Struktury Danych

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

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

Ćwiczenie 4 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

5. Podstawowe algorytmy i ich cechy.

- - Ocena wykonaniu zad3. Brak zad3

Wskaźniki. Programowanie Proceduralne 1

Klasy abstrakcyjne i interfejsy

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

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

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

Podejście obiektowe. Tablice (1) obiektów

Algorytmy i Struktury Danych. Anna Paszyńska

Zasady programowania Dokumentacja

Podstawy programowania komputerów

Podstawy programowania w języku C++

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Klasy i obiekty cz II

Algorytmy i Struktury Danych.

Programowanie w VB Proste algorytmy sortowania

1. Abstrakcyjne typy danych

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Wstęp do programowania 1

Zaawansowane algorytmy i struktury danych

Ćwiczenie 5 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

struktury danych dla operacji słownikowych

Strategia "dziel i zwyciężaj"

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy

TEMAT : KLASY DZIEDZICZENIE

Podstawy programowania w języku C++

Transkrypt:

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 listy struktur typu struct dana * struct dana *usun(struct dana *lista, int uwiek) // usuniecie pierwszej osoby o wskazanym wieku struct dana *pom, *poprz; while (pom!= NULL && pom->wiek!= uwiek) //poszukiwanie elementu o wieku uwiek poprz = pom; pom = pom->nast; if (pom!= NULL) // na liscie wystapil uwiek if (pom == lista) //do usuniecia pierwszy element lista=lista->nast; else // tworzymy powiazanie omijajace usuw.el. poprz->nast = pom->nast; Komentarz: - pierwsza pętla przechodzi przez listę w poszukiwaniu elementu o wartości pola wiek równej uwiek; - usunięcie elementu z listy wymaga zmiany następnika jego poprzednika, dlatego pierwsza pętla przechowuje wskaźnik na element poprzedni w zmiennej poprz; lista poprz pom - w sytuacji, gdy usuwamy pierwszy element, zmianie musi też ulec wartość wskaźnika na początek listy.

Aby uniknąć pamiętania zawsze wskaźników na element aktualny i poprzedni, możemy zastosować metodę użytą wcześniej przy wstawianiu elementu: pamiętamy tylko element poprzedni i sprawdzamy, czy do usunięcia jest jego następnik: struct dana *usun2(struct dana *lista, int uwiek) // usuniecie pierwszej osoby o wskazanym wieku struct dana *pom, *pom2; if (lista == NULL) return NULL; if (lista->wiek == uwiek) //do usuniecia pierwszy element lista = lista->nast; while (pom->nast!= NULL && pom->nast->wiek!= uwiek) pom = pom->nast; //poszukiwanie elementu o wieku uwiek if (pom->nast!= NULL) //wystepuje element o wieku uwiek pom2 = pom->nast; pom->nast = pom2->nast; free(pom2); Komentarze: - teraz zmienna pom ma zawsze wskazywać na element już sprawdzony, czyli różny od uwiek - dlatego na początku osobno traktujemy przypadek gdy lista jest pusta bądź jej pierwszy element jest do usunięcia.

Operacje na listach rekurencyjnie Wypisywanie elementów: void drukrek(struct dana *lista) if (lista!= NULL) printf("%d\n", lista->wiek); drukrek(lista->nast); Wstawianie elementu do listy uporządkowanej: struct dana *wstawporzadekrek(struct dana *lista, struct dana *nowy) // wstawia element,na który wskazuje nowy // nowy nie moze miec wartosci NULL // wstawia wg wieku niemalejaco struct dana *pom; int pwiek; if (lista==null lista->wiek >= nowy->wiek) nowy->nast = lista; return nowy; else pom = wstawporzadekrek(lista->nast,nowy); lista->nast = pom; Usuwanie elementu z listy (nieuporzadkowanej): struct dana *usunrek(struct dana *lista, int uwiek) // usuniecie pierwszej osoby o wskazanym wieku // z listy nieuporzadkowanej struct dana *pom, *pom2; if (lista!= NULL) if (lista->wiek == uwiek) //do usuniecia pierwszy element lista = lista->nast; else pom = usunrek(lista->nast, uwiek); lista->nast = pom;

Operacje listowe na dwa sposoby: lista wynikowa jako wartość funkcji i jako parametr (wskaźnik na wskaźnik). Struktura danych: struct elem int klucz; struct elem *nast; ELLIST; Wstawianie elementu na początek listy: struct elem *wstaw1(struct elem *lista, int nklucz) struct elem *pom; pom = (struct elem *) malloc(sizeof(ellist)); pom->klucz = nklucz; pom->nast = lista; return pom; void wstaw2(struct elem **lista, int nklucz) struct elem *pom; pom = (struct elem *) malloc(sizeof(ellist)); pom->klucz = nklucz; pom->nast = *lista; *lista = pom; Dla listy, na którą wskazuje zmienna struct elem *mlista wywołania wyglądają następująco mlista=wstaw1(mlista, 5); wstaw2(&mlista, 5);

Usuwanie elementu: struct elem *usun1(struct elem *lista, int uklucz) struct elem *pom, *poprz; while (pom!= NULL && pom->klucz!= uklucz) poprz = pom; pom = pom->nast; if (pom!= NULL) if (pom == lista) lista=lista->nast; else poprz->nast = pom->nast; void usun2(struct elem **lista, int uklucz) struct elem *pom, *poprz; pom = *lista; while (pom!= NULL && pom->klucz!= uklucz) poprz = pom; pom = pom->nast; if (pom!= NULL) if (pom == *lista) *lista=(*lista)->nast; else poprz->nast = pom->nast; Dla listy na którą wskazuje zmienna struct elem *mlista wywołania wyglądają następująco mlista=usun1(mlista, 5); usun2(&mlista, 5);

Listy a tablice: Lista dostęp do elementu na określonej pozycji wymaga czasu proporcjonalnego do odległości od początku listy zajętość pamięci jest proporcjonalna do aktualnej liczby elementów wyszukanie elementu wymaga liniowego czasu (proporcjonalnego do liczby elementów na liście) usunięcie wskazanego elementu lub wstawienie elementu na wskazanej pozycji można zrealizować w czasie niezależnym od rozmiaru listy Tablica dostęp do elementu na określonej pozycji w czasie niezależnym od rozmiaru tablicy zajęta pamięć jest proporcjonalna do rozmiaru tablicy wyszukiwanie w czasie liniowym, ale w przypadku uporządkowania elementów w tablicy, wyszukanie elementu możliwe jest w czasie logarytmicznym usunięcie elementu znajdującego się na określonej pozycji lub wstawienie elementu na wskazaną pozycję wymaga czasu proporcjonalnego do liczby elementów Usprawnienia i rozszerzenia: Dodanie wartownika na końcu listy (przyspieszenie wyszukiwania). Listę opisuje wskaźnik na pierwszy i na ostatni element na liście (umożliwia szybkie wstawianie na koniec listy). Lista dwukierunkowa (wskaźniki do następnego i poprzedniego elementu).