Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
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;
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.