Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Operacje na strukturach listowych Lista Kolejka Stos Uruchom program dydaktyczny Uruchom program dydaktyczny.

Podobne prezentacje


Prezentacja na temat: "Operacje na strukturach listowych Lista Kolejka Stos Uruchom program dydaktyczny Uruchom program dydaktyczny."— Zapis prezentacji:

1 Operacje na strukturach listowych Lista Kolejka Stos Uruchom program dydaktyczny Uruchom program dydaktyczny

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

3 Przykładowa lista jednokierunkowa 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. Kasia OlaBeata Dane Wskaźnik do następnego elementu Pole z danymi użytkowymi Wskaźnik do pierwszego elementu Next First MENU

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

5 Wstawianie elementu na początek listy 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 Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First NewOne MENU

6 Wstawianie elementu na początek listy 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. czyli wskazuje na pierwszy element listy. Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First NewOne MENU

7 Wstawianie elementu na początek listy 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. Kasia OlaBeataAnia Asia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First NewOne MENU

8 Wstawianie elementu na początek listy 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. Kasia OlaBeataAnia Asia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First NewOne MENU

9 Wstawianie elementu na początek listy 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. Kasia OlaBeataAnia Asia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First NewOne MENU

10 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaBeataAnia Przed element o podanej watrości Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU Dodaj za element o podanej watrości Dodaj za element o podanej watrości

11 Wstawianie elementu do wnętrza listy 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 begin New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; / Zaczynamy przeglądać liste - wskaźnik TEMP wskazuje na pierwszy element. Kasia OlaBeataAnia Przed element o podanej watrości Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

12 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaBeataAnia Przed element o podanej watrości Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

13 Wstawianie elementu do wnętrza listy 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 begin New(newOne); newOne^ := temp^; temp^.dane := nowa; temp^.next := newOne; end; / Za pomocą procedury NEW przydzielamy miejsce w pamięci dla nowego elementu. Kasia OlaBeataAnia Przed element o podanej watrości Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

14 Wstawianie elementu do wnętrza listy 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 begin 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). Kasia OlaBeataAnia Przed element o podanej watrości Beata Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

15 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaBeataAnia Przed element o podanej watrości Beata Aga Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

16 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaAnia Przed element o podanej watrości Beata Aga Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

17 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaAnia Przed element o podanej watrości Beata Aga Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

18 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaBeataAnia Za element o podanej watrości Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

19 Wstawianie elementu do wnętrza listy 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 begin New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; / Zaczynamy przeglądać liste - wskaźnik TEMP wskazuje na pierwszy element. Kasia OlaBeataAnia Za element o podanej watrości Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

20 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaBeataAnia Za element o podanej watrości Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

21 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaBeataAnia Za element o podanej watrości Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

22 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaBeataAnia Za element o podanej watrości Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

23 Wstawianie elementu do wnętrza listy 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 begin New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; / Dana nowego elementu przyjmuje wartość parametru nowa (łańcuch =Marta) Kasia OlaBeataAnia Za element o podanej watrości Marta Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

24 Wstawianie elementu do wnętrza listy 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 begin 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. Kasia OlaBeataAnia Za element o podanej watrości Marta Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

25 / Wstawianie elementu do wnętrza listy 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 begin New(newOne); newOne^.next := temp^.next; newOne^.dane := nowa; temp^.next := newOne; end; Za element o podanej watrości Kasia OlaAnia Marta Beata Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

26 Wstawianie elementu na koniec listy procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else begin 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. Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

27 Wstawianie elementu na koniec listy procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else begin 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. Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

28 Wstawianie elementu na koniec listy procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else begin 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. Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

29 Wstawianie elementu na koniec listy procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else begin 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. Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

30 Wstawianie elementu na koniec listy procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else begin 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) Kasia OlaBeataAnia Zosia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

31 Wstawianie elementu na koniec listy procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else begin 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 ) Kasia OlaBeataAnia / Zosia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

32 Wstawianie elementu na koniec listy procedure DodajNaKoniec (wartosc : string); var newOne,temp : pElement; begin if first = nil then DodajNaPoczatek(wartosc) else begin 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. Kasia OlaBeataAnia / Zosia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi Temp First NewOne MENU

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

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

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

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

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

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

39 Usuwanie elementu z wnętrza listy 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 begin temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then begin temp^.next := toDel^.next; dispose(toDel); end; / W prezentowanym przykładzie parametr wartosc = Ola Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First Temp ToDel MENU

40 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 begin temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then begin temp^.next := toDel^.next; dispose(toDel); end; Usuwanie elementu z wnętrza listy / Wskaźnik TODEL wskazuje na pierwszy element listy. Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First Temp ToDel MENU

41 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 begin temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then begin temp^.next := toDel^.next; dispose(toDel); end; Usuwanie elementu z wnętrza listy / Wskaźnik TEMP wskazuje na pierwszy element listy. Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First Temp ToDel MENU

42 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 begin temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then begin temp^.next := toDel^.next; dispose(toDel); end; Usuwanie elementu z wnętrza listy / Wskaźnik TODEL wskazuje na kolejny element listy. Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First Temp ToDel MENU

43 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 begin temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then begin temp^.next := toDel^.next; dispose(toDel); end; Usuwanie elementu z wnętrza listy / Wskaźnik NEXT elementu wyznaczonego przez TEMP wskazuje na kolejny element po szukanym. Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First Temp ToDel MENU

44 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 begin temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then begin temp^.next := toDel^.next; dispose(toDel); end; Usuwanie elementu z wnętrza listy / Element wyznaczony przez wskaźnik TODEL zostaje zwolniony z pamięci (usunięty) Kasia OlaBeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First Temp ToDel MENU

45 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 begin temp := toDel; toDel := toDel^.next; end; if toDel^.dane = wartosc then begin temp^.next := toDel^.next; dispose(toDel); end; Usuwanie elementu z wnętrza listy / Element wyznaczony przez wskaźnik TODEL zostaje zwolniony z pamięci (usunięty) Kasia BeataAnia Dane Next Wskaźnik do następnego elementu Pole z danymi użytkowymi First Temp ToDel MENU

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

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

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

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

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

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

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

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

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

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

56 Przykładowa lista dwukierunkowa 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 ). Kasia OlaBeata Wskaźnik do następnego elementu Pole z danymi użytkowymi Wskaźnik do pierwszego elementu / Wskaźnik do poprzedniego elementu First Prev Dane Next MENU

57 Przykładowa lista cykliczna 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. Kasia OlaBeata Wskaźnik do następnego elementu Pole z danymi użytkowymi Wskaźnik do pierwszego elementu Next Dane First MENU

58 ... Kolejka Dołączenie(DoKolejki)Obsłużenie(ZKolejki) WyjścieWejście Struktura FIFO - First In First Out Kolejka - struktura danych (znaczeniowo odpowiadająca nazwie), której elementy są uporządkowane zgodnie z kolejnością ich napływania. 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) początekkoniec MENU

59 Przykładowa kolejka 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. Kasia OlaBeata Wskaźnik do pierwszego elementu / Ania Zrealizowana na liście jednokierunkowej Wskaźnik do ostatniego elementu Wyjście Wejście First Last MENU

60 Dodawanie nowego elementu do kolejki W prezentowanym przykładzie zmienna wartość = Asia. Kasia OlaBeata / Ania WyjścieWejś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; NewOne First Last MENU

61 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; Dodawanie nowego elementu do kolejki Za pomocą procedury New przydzielamy miejsce w pamięci dla nowego elementu. Kasia OlaBeata / Ania WyjścieWejście NewOne First Last MENU

62 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; Dodawanie nowego elementu do kolejki Wskaźnik NEXT nowego elementu przyjmuje NIL. Kasia OlaBeata / Ania WyjścieWejście / NewOne First Last MENU

63 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; Dodawanie nowego elementu do kolejki Pole z danymi użytkowymi nowego elementu przyjmuje łańcuch Asia. Kasia OlaBeata / Ania WyjścieWejście / Asia NewOne First Last MENU

64 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; Dodawanie nowego elementu do kolejki Wskaźnik NEXT ostatniego elementu wskazuje na nowy element. Kasia OlaBeata / Ania WyjścieWejście / Asia NewOne First Last MENU

65 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; Dodawanie nowego elementu do kolejki Nowy element staje się ostatnim. Kasia OlaBeataAnia WyjścieWejście / Asia NewOne First Last MENU

66 Dodawanie nowego elementu do kolejki Nowy element staje się ostatnim. Kasia OlaBeataAnia WyjścieWejście / Asia / Wejście NewOne First Last MENU 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;

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

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

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

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

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

72 Stos Położenie(Push) Zdjęcie(Pop) WyjścieWejście. Struktura LIFO - Last In First Out.. 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. 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) wierzchołek MENU

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

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

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

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

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

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

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

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

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

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

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

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

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


Pobierz ppt "Operacje na strukturach listowych Lista Kolejka Stos Uruchom program dydaktyczny Uruchom program dydaktyczny."

Podobne prezentacje


Reklamy Google