Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Operacje na strukturach listowych

Podobne prezentacje


Prezentacja na temat: "Operacje na strukturach listowych"— Zapis prezentacji:

1 Operacje na strukturach listowych
Lista Kolejka Stos Uruchom program dydaktyczny

2 LISTA JEDNOKIERUNKOWA
MENU LISTA JEDNOKIERUNKOWA Przykładowa lista LISTA DWUKIERUNKOWA LISTA CYKLICZNA Wstawianie elementu: na początek listy do wnętrza listy na koniec listy Usuwanie elementu: z początku listy z wnętrza listy Z końca listy

3 Przykładowa lista jednokierunkowa
MENU Wskaźnik do następnego elementu Wskaźnik do pierwszego elementu Next Dane / Kasia Ola Beata First Pole z danymi użytkowymi type pElement = ^tElement; tElement = record Next : pElement; Dane : string; end; var First : pElement; Powyższy kod przedstawia implementację wskaźnikową ,strukturę elementu listy. Pole z danymi użytkowymi może zawierać cokolwiek: liczbę, znak, rekord. W prezentowanym przykładzie jest to łańcuch.

4 Wstawianie elementu na początek listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure DodajNaPoczatek (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; W prezentowanym przykładzie parametr wartość = ‘Asia’. Nacisnij spacje lub kliknij aby kontynuować.

5 Wstawianie elementu na początek listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure DodajNaPoczatek (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; Za pomocą procedury NEW przydzielamy miejsce w pamięci dla nowego elementu

6 Wstawianie elementu na początek listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure DodajNaPoczatek (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; Wskaźnik NEXT nowego elementu przyjmuje wartość wskaźnika FIRST, czyli wskazuje na pierwszy element listy.

7 Wstawianie elementu na początek listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Asia Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure DodajNaPoczatek (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; Pole z danymi użytkowymi nowego elementu przyjmuje wartość przekazaną przez parametr wartość, w tym przypadku jest to łańcuch ‘ Asia ‘.

8 Wstawianie elementu na początek listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Asia Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure DodajNaPoczatek (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; Wskaźnik FIRST przyjmuje wartość wskaźnika NEWONE , czyli nowy element staje się pierwszym elementem w liście.

9 Wstawianie elementu na początek listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Asia Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure DodajNaPoczatek (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; Wskaźnik FIRST przyjmuje wartość wskaźnika NEWONE , czyli nowy element staje się pierwszym elementem w liście.

10 Wstawianie elementu do wnętrza listy
Dodaj za element o podanej watrości Wstawianie elementu do wnętrza listy MENU Wskaźnik do następnego elementu Przed element o podanej watrości NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajPrzedWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; W prezentowanym przykładzie parametr szukana = ‘Beata’, natomiast nowa = ‘Aga’. Wskaźnik TEMP potrzebny jest do odnalezienia szukanego elementu.

11 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Przed element o podanej watrości NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajPrzedWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; Zaczynamy przeglądać liste - wskaźnik TEMP wskazuje na pierwszy element.

12 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Przed element o podanej watrości NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajPrzedWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; Przechodzimy do kolejnych elementów listy, aż znajdziemy szukany element. W tym przykładzie jest to łańcuch = ‘Beata’.

13 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Przed element o podanej watrości NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajPrzedWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; Za pomocą procedury NEW przydzielamy miejsce w pamięci dla nowego elementu.

14 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Przed element o podanej watrości NewOne Next Dane Beata Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajPrzedWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; Nowy element przyjmuje wartość elementu wyznaczonego przez wskaźnik TEMP. Zarówno wskaźnik do następnego elementu, jak i pole z danymi (łańcuch =‘Beata’).

15 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Przed element o podanej watrości NewOne Next Dane Beata Pole z danymi użytkowymi / First Kasia Ola Aga Beata Ania Temp procedure DodajPrzedWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; Pole z dana elementu wyznaczonego przez wskaźnik TEMP przyjmuje wartość parametru NOWA W tym przypadku łańcuch=‘Aga’.

16 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Przed element o podanej watrości NewOne Next Dane Beata Pole z danymi użytkowymi / First Kasia Ola Aga Ania Temp procedure DodajPrzedWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; Natomiast wskaźnik NEXT elementu wyznaczonego przez wskaźnik TEMP przyjmuje wartość wskaźnika NEWONE.

17 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Przed element o podanej watrości NewOne Next Dane Beata Pole z danymi użytkowymi / First Kasia Ola Aga Ania Temp procedure DodajPrzedWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; Takim sposobem wstawiliśmy nowy element przed element o podanej wartości. W rzeczywistości operacja ta polegała na wstawieniu za szukany element i zamienieniu kolejności tych dwóch elementów.

18 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Za element o podanej watrości NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajZaWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; W prezentowanym przykładzie parametr szukana = ‘Beata’, natomiast nowa = ‘Marta’. Wskaźnik TEMP potrzebny jest do odnalezienia szukanego elementu.

19 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Za element o podanej watrości NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajZaWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; Zaczynamy przeglądać liste - wskaźnik TEMP wskazuje na pierwszy element.

20 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Za element o podanej watrości NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajZaWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; Przechodzimy do kolejnych elementów listy, aż znajdziemy szukany element. W tym przykładzie jest to łańcuch = ‘Beata’.

21 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Za element o podanej watrości NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajZaWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; Za pomocą procedury NEW przydzielamy miejsce w pamięci dla nowego elementu.

22 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Za element o podanej watrości NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajZaWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; Wskaźnik NEXT nowego elementu przyjmuje wartość wskaźnika NEXT elementu wyznaczonego przez wskaźnik TEMP.

23 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Za element o podanej watrości NewOne Next Dane Marta Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajZaWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; Dana nowego elementu przyjmuje wartość parametru nowa (łańcuch =‘Marta’)

24 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Za element o podanej watrości NewOne Next Dane Marta Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajZaWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; Natomiast wskaźnik NEXT elementu wyznaczonego przez wskaźnik TEMP przyjmuje wartość wskaźnika NEWONE.

25 Wstawianie elementu do wnętrza listy
MENU Wskaźnik do następnego elementu Za element o podanej watrości NewOne Next Dane Marta Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajZaWartosc (szukana,nowa : string); var newOne,temp : pElement; begin temp := first; while(temp^.next <> nil) and (temp^.dane <> szukana) do temp := temp^.next; if temp^.dane = szukana then New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end;

26 Wstawianie elementu na koniec listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else new(newOne); temp := first; while temp^.next <> nil do temp := temp^.next; newOne^.dane := wartosc; newOne^.next := temp^.next; temp^.next := newOne; end; W prezentowanym przykładzie parametr wartość = ‘Zosia’.

27 Wstawianie elementu na koniec listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else new(newOne); temp := first; while temp^.next <> nil do temp := temp^.next; newOne^.dane := wartosc; newOne^.next := temp^.next; temp^.next := newOne; end; Za pomocą procedury NEW przydzielamy miejsce w pamięci dla nowego elementu.

28 Wstawianie elementu na koniec listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else new(newOne); temp := first; while temp^.next <> nil do temp := temp^.next; newOne^.dane := wartosc; newOne^.next := temp^.next; temp^.next := newOne; end; Zaczynamy przeglądać liste - wskaźnik TEMP wskazuje na pierwszy element.

29 Wstawianie elementu na koniec listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else new(newOne); temp := first; while temp^.next <> nil do temp := temp^.next; newOne^.dane := wartosc; newOne^.next := temp^.next; temp^.next := newOne; end; Przechodzimy do kolejnych elementów listy, aż znajdziemy ostatni element listy.

30 Wstawianie elementu na koniec listy
MENU Wskaźnik do następnego elementu NewOne Next Dane Zosia Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else new(newOne); temp := first; while temp^.next <> nil do temp := temp^.next; newOne^.dane := wartosc; newOne^.next := temp^.next; temp^.next := newOne; end; Dana nowego elementu przyjmuje wartość parametru nowa (łańcuch =‘Zosia’)

31 Wstawianie elementu na koniec listy
MENU Wskaźnik do następnego elementu NewOne Next / Dane Zosia Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else new(newOne); temp := first; while temp^.next <> nil do temp := temp^.next; newOne^.dane := wartosc; newOne^.next := temp^.next; temp^.next := newOne; end; Wskaźnik NEXT elementu przyjmuje wartość NIL ( puste wskazanie )

32 Wstawianie elementu na koniec listy
MENU Wskaźnik do następnego elementu NewOne Next / Dane Zosia Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else new(newOne); temp := first; while temp^.next <> nil do temp := temp^.next; newOne^.dane := wartosc; newOne^.next := temp^.next; temp^.next := newOne; end; Natomiast wskaźnik NEXT elementu wyznaczonego przez wskaźnik TEMP przyjmuje wartość wskaźnika NEWONE.

33 Wstawianie elementu na koniec listy
MENU Wskaźnik do następnego elementu NewOne Next / Dane Zosia Pole z danymi użytkowymi First Kasia Ola Beata Ania Temp procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else new(newOne); temp := first; while temp^.next <> nil do temp := temp^.next; newOne^.dane := wartosc; newOne^.next := temp^.next; temp^.next := newOne; end;

34 Usuwanie elementu z początku listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure UsunPoczatek; var toDel : pElement; begin if first <> nil then toDel := first; first := first^.next; dispose(toDel); end;

35 Usuwanie elementu z początku listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure UsunPoczatek; var toDel : pElement; begin if first <> nil then toDel := first; first := first^.next; dispose(toDel); end; Wskaźnik TODEL przyjmuje wartość wskaźnika FIRST czyli wskazuje na pierwszy element listy

36 Usuwanie elementu z początku listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure UsunPoczatek; var toDel : pElement; begin if first <> nil then toDel := first; first := first^.next; dispose(toDel); end; Pierwszym elementem listy staje się dotychczas drugi element s

37 Usuwanie elementu z początku listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / Kasia Ola Beata Ania First procedure UsunPoczatek; var toDel : pElement; begin if first <> nil then toDel := first; first := first^.next; dispose(toDel); end; Element, który był pierwszy zostaje zwolniony z pamięci (usunięty)

38 Usuwanie elementu z początku listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / Ola Beata Ania First procedure UsunPoczatek; var toDel : pElement; begin if first <> nil then toDel := first; first := first^.next; dispose(toDel); end;

39 Usuwanie elementu z wnętrza listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunWartosc (wartosc : string); var toDel,temp : pElement; begin toDel := first; if first^.dane = wartosc then first := first^.next else while(toDel^.next <> nil) and (toDel^.dane <> wartosc)do temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then temp^.next := toDel^.next; dispose(toDel); W prezentowanym przykładzie parametr wartosc = ‘Ola’

40 Usuwanie elementu z wnętrza listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunWartosc (wartosc : string); var toDel,temp : pElement; begin toDel := first; if first^.dane = wartosc then first := first^.next else while(toDel^.next <> nil) and (toDel^.dane <> wartosc)do temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then temp^.next := toDel^.next; dispose(toDel); Wskaźnik TODEL wskazuje na pierwszy element listy.

41 Usuwanie elementu z wnętrza listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunWartosc (wartosc : string); var toDel,temp : pElement; begin toDel := first; if first^.dane = wartosc then first := first^.next else while(toDel^.next <> nil) and (toDel^.dane <> wartosc)do temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then temp^.next := toDel^.next; dispose(toDel); Wskaźnik TEMP wskazuje na pierwszy element listy.

42 Usuwanie elementu z wnętrza listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunWartosc (wartosc : string); var toDel,temp : pElement; begin toDel := first; if first^.dane = wartosc then first := first^.next else while(toDel^.next <> nil) and (toDel^.dane <> wartosc)do temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then temp^.next := toDel^.next; dispose(toDel); Wskaźnik TODEL wskazuje na kolejny element listy.

43 Usuwanie elementu z wnętrza listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunWartosc (wartosc : string); var toDel,temp : pElement; begin toDel := first; if first^.dane = wartosc then first := first^.next else while(toDel^.next <> nil) and (toDel^.dane <> wartosc)do temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then temp^.next := toDel^.next; dispose(toDel); Wskaźnik NEXT elementu wyznaczonego przez TEMP wskazuje na kolejny element po szukanym.

44 Usuwanie elementu z wnętrza listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunWartosc (wartosc : string); var toDel,temp : pElement; begin toDel := first; if first^.dane = wartosc then first := first^.next else while(toDel^.next <> nil) and (toDel^.dane <> wartosc)do temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then temp^.next := toDel^.next; dispose(toDel); Element wyznaczony przez wskaźnik TODEL zostaje zwolniony z pamięci (usunięty)

45 Usuwanie elementu z wnętrza listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Beata Ania Temp procedure UsunWartosc (wartosc : string); var toDel,temp : pElement; begin toDel := first; if first^.dane = wartosc then first := first^.next else while(toDel^.next <> nil) and (toDel^.dane <> wartosc)do temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then temp^.next := toDel^.next; dispose(toDel); Element wyznaczony przez wskaźnik TODEL zostaje zwolniony z pamięci (usunięty)

46 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel);

47 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel); Wskaźnik TODEL wskazuje na pierwszy element listy.

48 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel); Wskaźnik TEMP wskazuje element wskazywany przez wskaźnik TODEL.

49 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel); Wskaźnik TODEL wskazuje na kolejny element listy.

50 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel); Wskaźnik TEMP wskazuje element wskazywany przez wskaźnik TODEL

51 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel); Wskaźnik TODEL wskazuje na kolejny element listy.

52 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel); Wskaźnik TEMP wskazuje element wskazywany przez wskaźnik TODEL

53 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel); Wskaźnik TODEL wskazuje na ostatni element listy.

54 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel); Wskaźnik NEXT przedostatniego elementu listy wskazuje na NIL (staje się więc ostatnim elementem)

55 Usuwanie elementu z końca listy
MENU Wskaźnik do następnego elementu Next ToDel Dane Pole z danymi użytkowymi / / First Kasia Ola Beata Ania Temp procedure UsunKoniec; var toDel,temp : pElement; begin toDel := first; if first^.next = nil then first := nil else begin while toDel^.next <> nil do temp := toDel; toDel := toDel^.next; end; temp^.next := nil; dispose(toDel); Dotychczas ostatni element listy zostaje zwolniony z pamięci.

56 Przykładowa lista dwukierunkowa
MENU Wskaźnik do następnego elementu Wskaźnik do pierwszego elementu Next Dane Pole z danymi użytkowymi First / Prev Kasia Ola Beata / Wskaźnik do poprzedniego elementu type pElement = ^tElement; tElement = record Next : pElement; Dane : string; Prev : pElement; end; var First : pElement; Powyższy kod przedstawia implementację wskaźnikową ,strukturę elementu listy dwukierunkowej. Operacje dodawania i usuwania elementów są analogiczne do listy jednokierunkowej z tym że należy uwzględnić również wskaźnik do poprzedniego elementu ( Prev ).

57 Przykładowa lista cykliczna
MENU Wskaźnik do następnego elementu Wskaźnik do pierwszego elementu Next Dane Kasia Ola Beata First Pole z danymi użytkowymi type pElement = ^tElement; tElement = record Next : pElement; Dane : string; end; var First : pElement; Powyższy kod przedstawia implementację wskaźnikową oraz strukturę elementu listy cyklicznej.

58 Kolejka . . . Struktura FIFO - First In First Out początek koniec
MENU Struktura FIFO First In First Out początek koniec Obsłużenie (ZKolejki) Dołączenie (DoKolejki) . . . Wyjście Wejście Kolejka - struktura danych (znaczeniowo odpowiadająca nazwie), której elementy są uporządkowane zgodnie z kolejnością ich napływania. Dane dokładane są na koniec kolejki, a pobierane z jej początku. Algorytm umieszczania oraz usuwania elementów z kolejki określa się skrótem FIFO (first-in-first-out czyli pierwszy na wejściu – pierwszy na wyjściu)

59 Zrealizowana na liście jednokierunkowej
Przykładowa kolejka MENU Zrealizowana na liście jednokierunkowej First Last Wskaźnik do ostatniego elementu Wskaźnik do pierwszego elementu / Kasia Ola Beata Ania Wyjście Wejście type pElement = ^tElement; tElement = record Next : pElement; Dane : string; end; var First, Last : pElement; Powyższy kod przedstawia implementację wskaźnikową oraz strukturę elementu kolejki.

60 Dodawanie nowego elementu do kolejki
MENU First Last NewOne / Kasia Ola Beata Ania Wyjście Wejście procedure DoKolejki (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := nil; newOne^.dane := wartosc; if first <> nil then last^.next := newOne else first := newOne; last := newOne; end; W prezentowanym przykładzie zmienna wartość = ‘Asia’.

61 Dodawanie nowego elementu do kolejki
MENU First Last NewOne / Kasia Ola Beata Ania Wyjście Wejście procedure DoKolejki (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := nil; newOne^.dane := wartosc; if first <> nil then last^.next := newOne else first := newOne; last := newOne; end; Za pomocą procedury New przydzielamy miejsce w pamięci dla nowego elementu.

62 Dodawanie nowego elementu do kolejki
MENU First Last NewOne / / Kasia Ola Beata Ania Wyjście Wejście procedure DoKolejki (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := nil; newOne^.dane := wartosc; if first <> nil then last^.next := newOne else first := newOne; last := newOne; end; Wskaźnik NEXT nowego elementu przyjmuje NIL .

63 Dodawanie nowego elementu do kolejki
MENU First Last NewOne / / Kasia Ola Beata Ania Asia Wyjście Wejście procedure DoKolejki (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := nil; newOne^.dane := wartosc; if first <> nil then last^.next := newOne else first := newOne; last := newOne; end; Pole z danymi użytkowymi nowego elementu przyjmuje łańcuch ‘Asia’ .

64 Dodawanie nowego elementu do kolejki
MENU First Last NewOne / / Kasia Ola Beata Ania Asia Wyjście Wejście procedure DoKolejki (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := nil; newOne^.dane := wartosc; if first <> nil then last^.next := newOne else first := newOne; last := newOne; end; Wskaźnik NEXT ostatniego elementu wskazuje na nowy element.

65 Dodawanie nowego elementu do kolejki
MENU First Last NewOne / Kasia Ola Beata Ania Asia Wyjście Wejście procedure DoKolejki (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := nil; newOne^.dane := wartosc; if first <> nil then last^.next := newOne else first := newOne; last := newOne; end; Nowy element staje się ostatnim.

66 Dodawanie nowego elementu do kolejki
MENU First Last NewOne / / Kasia Ola Beata Ania Asia Asia Wyjście Wejście Wejście procedure DoKolejki (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := nil; newOne^.dane := wartosc; if first <> nil then last^.next := newOne else first := newOne; last := newOne; end; Nowy element staje się ostatnim.

67 Usuwanie elementu z kolejki
MENU ToDel First Last / Kasia Ola Beata Ania Wyjście Wejście procedure ZKolejki; var toDel : pElement; begin if first<>nil then toDel := first; first := first^.next; dispose(toDel); end;

68 Usuwanie elementu z kolejki
MENU ToDel First Last / Kasia Ola Beata Ania Wyjście Wejście procedure ZKolejki; var toDel : pElement; begin if first<>nil then toDel := first; first := first^.next; dispose(toDel); end; Wskaźnik ToDel wskazuje na pierwszy element.

69 Usuwanie elementu z kolejki
MENU ToDel First Last / Kasia Ola Beata Ania Wyjście Wejście procedure ZKolejki; var toDel : pElement; begin if first<>nil then toDel := first; first := first^.next; dispose(toDel); end; Dotychczasowy drugi element staje się pierwszym.

70 Usuwanie elementu z kolejki
MENU ToDel First Last / Kasia Ola Beata Ania Wyjście Wejście procedure ZKolejki; var toDel : pElement; begin if first<>nil then toDel := first; first := first^.next; dispose(toDel); end; Element wyznaczony przez ToDel zostaje usunięty.

71 Usuwanie elementu z kolejki
MENU ToDel First Last / Ola Beata Ania Wyjście Wejście procedure ZKolejki; var toDel : pElement; begin if first<>nil then toDel := first; first := first^.next; dispose(toDel); end;

72 Stos . . . Struktura LIFO - Last In First Out Położenie Zdjęcie
MENU Struktura LIFO Last In First Out Położenie (Push) Zdjęcie (Pop) Wejście Wyjście wierzchołek . . . Stos - liniowa struktura danych, znaczeniowo odpowiadająca nazwie. Dane dokładane są na wierzchołek stosu, również z wierzchołka są zdejmowane. Elementy poniżej wierzchołka można wyłącznie obejrzeć, aby je zdjąć , trzeba najpierw po kolei zdejmować to, co jest nad nimi. Algorytm umieszczania elementów w stosie oraz ich zdejmowania określa się skrótem LIFO (last-in-first-out czyli ostatni na wejściu – pierwszy na wyjściu)

73 Zrealizowany na liście jednokierunkowej
Przykładowy stos MENU Wskaźnik do następnego elementu Zrealizowany na liście jednokierunkowej Wskaźnik do wierzchołka stosu First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Kasia Ola Beata Ania Wejście (Push) type pElement = ^tElement; tElement = record Next : pElement; Dane : string; end; var First : pElement; Powyższy kod przedstawia implementację wskaźnikową stosu.

74 Dodawanie elementu na stos
MENU Wskaźnik do następnego elementu NewOne First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Kasia Ola Beata Ania Wejście (Push) procedure Push (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end;

75 Dodawanie elementu na stos
MENU Wskaźnik do następnego elementu NewOne First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Kasia Ola Beata Ania Wejście (Push) procedure Push (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; Przydzielamy pamięć dla nowego elementu.

76 Dodawanie elementu na stos
MENU Wskaźnik do następnego elementu NewOne First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Kasia Ola Beata Ania Wejście (Push) procedure Push (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; Wskaźnik next nowego elementu wskazuje na pierwszy element.

77 Dodawanie elementu na stos
MENU Wskaźnik do następnego elementu NewOne First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Ewa Kasia Ola Beata Ania Wejście (Push) procedure Push (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; Pole z danymi użytkowymi pierwszego elementu przyjmuje łańcuch ‘Ewa’ (parametr wartość).

78 Dodawanie elementu na stos
MENU Wskaźnik do następnego elementu NewOne First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Ewa Kasia Ola Beata Ania Wejście (Push) procedure Push (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end; Nowy element staje się pierwszym.

79 Dodawanie elementu na stos
MENU Wskaźnik do następnego elementu NewOne First Next Dane Pole z danymi użytkowymi Wyjście (Pop) Wyjście (Pop) / Ewa Kasia Ola Beata Ania Wejście (Push) Wejście (Push) procedure Push (wartosc : string); var newOne : pElement; begin New(newOne); newOne^.next := first; newOne^.dane := wartosc; first := newOne; end;

80 Usuwanie elementu ze stosu
MENU Wskaźnik do następnego elementu ToDel First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Ewa Kasia Ola Beata Ania Wejście (Push) procedure Pop (var wartosc : string); var toDel : pElement; begin toDel := first; wartosc := first^.dane; first := first^.next; Dispose(toDel); end;

81 Usuwanie elementu ze stosu
MENU Wskaźnik do następnego elementu ToDel First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Ewa Kasia Ola Beata Ania Wejście (Push) procedure Pop (var wartosc : string); var toDel : pElement; begin toDel := first; wartosc := first^.dane; first := first^.next; Dispose(toDel); end; Wskaźnik ToDel wskazuje na pierwszy element.

82 Usuwanie elementu ze stosu
MENU Wskaźnik do następnego elementu ToDel First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Ewa Kasia Ola Beata Ania Wejście (Push) procedure Pop (var wartosc : string); var toDel : pElement; begin toDel := first; wartosc := first^.dane; first := first^.next; Dispose(toDel); end; Pole z danymi użytkowymi pierwszego elementu zostaje przekazane parametrowi wartość.

83 Usuwanie elementu ze stosu
MENU Wskaźnik do następnego elementu ToDel First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Ewa Kasia Ola Beata Ania Wejście (Push) procedure Pop (var wartosc : string); var toDel : pElement; begin toDel := first; wartosc := first^.dane; first := first^.next; Dispose(toDel); end; Pierwszym elementem staje się dotychczasowy drugi element.

84 Usuwanie elementu ze stosu
MENU Wskaźnik do następnego elementu ToDel First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Ewa Kasia Ola Beata Ania Wejście (Push) procedure Pop (var wartosc : string); var toDel : pElement; begin toDel := first; wartosc := first^.dane; first := first^.next; Dispose(toDel); end; Element wyznaczony przez ToDel zostaje usunięty.

85 Usuwanie elementu ze stosu
MENU Wskaźnik do następnego elementu ToDel First Next Dane Pole z danymi użytkowymi Wyjście (Pop) / Kasia Ola Beata Ania Wejście (Push) procedure Pop (var wartosc : string); var toDel : pElement; begin toDel := first; wartosc := first^.dane; first := first^.next; Dispose(toDel); end;


Pobierz ppt "Operacje na strukturach listowych"

Podobne prezentacje


Reklamy Google