PODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIwykład 4.wykład 4.wykład 4.wykład 4.wykład 4.wykład 4.wykład 4.wykład 4.
Adrian Adrian HorzykHorzykWeb: Web: http://home.agh.edu.pl/~horzyk/http://home.agh.edu.pl/~horzyk/
EE--mail: mail: [email protected]@agh.edu.plEE--mail: mail: [email protected]@agh.edu.pl
Google: Adrian Google: Adrian HorzykHorzyk
Gabinet: paw. D13 p. 325Gabinet: paw. D13 p. 325
Akademia GórniczoAkademia Górniczo--Hutnicza w KrakowieHutnicza w Krakowie
WEAIiEWEAIiE, Katedra Automatyki, Katedra Automatyki
http://www.agh.edu.plhttp://www.agh.edu.pl
Mickiewicza Av. 30, 30Mickiewicza Av. 30, 30--059 059 CracowCracow, Poland, Poland
Struktury danychStruktury danychStruktury danychStruktury danychStruktury danychStruktury danychStruktury danychStruktury danych
Przy rozwiązywaniu problemu (za pomocą komputera, czy też bez niego)
trzeba dokonać wyboru pewnego abstrakcyjnego modelu rzeczywistości,
czyli zdefiniować zbiór danych mających reprezentować rzeczywistą sytuację.
W tym celu wykorzystujemy pewne specyficzne zbiory danych, które
charakteryzują się różną strukturą wewnętrzną ułożenia tych danych oraz
różnym sposobem zapisu i dostępu do tych danych. Dostęp do odpowiednich
składowych takiego zbioru może w dużym stopniu wpłynąć na złożoność
obliczeniową całego algorytmu – więc wybór odpowiednich struktur danych
jest sprawą kluczową decydującą o efektywności działania programów.
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 2222....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
jest sprawą kluczową decydującą o efektywności działania programów.
Wybór odpowiednich struktur danych podyktowany jest poprzez
rozwiązywany problem oraz możliwości obliczeniowe komputera.
Wybór reprezentacji danych zależny jest nie tylko od możliwości komputera,
lecz również zależny jest od przewidywanych operacji, jakie na danych będą
wykonywane.
Rodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danych
Tablica – składa się z wielu elementów tego samego typu ułożonych jedna po drugiej z
możliwością odwoływania się do nich za pomocą indeksów.
Rekord – składa się z wielu elementów różnego typu, do których odwołujemy się za
pomocą ich nazwy.
Zbiór – składa się z wielu elementów tego samego typu.
Plik sekwencyjny – składa się z sekwencji elementów różnego typu.
Ciąg znaków – składa się z sekwencji elementów typu znakowego.
Kolejki FIFO (first in first out) – składa się z ciągu elementów tego samego typu z
możliwością wkładania elementów na jej końcu i wyciągania elementów z jej początku.
Stos FILO (first in last out) – składa się z ciągu elementów tego samego typu z
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 3333....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Stos FILO (first in last out) – składa się z ciągu elementów tego samego typu z
możliwością wkładania i wyciągania elementów tylko z jego końca.
Lista (pojedynczo lub podwójnie wiązane) – składa się z elementów tego samego typu
tak, że elementy są wzajemnie ze sobą powiązane tak, że każdy element zna tylko
swojego następnika (ew. również poprzednika).
Drzewo (binarne, rozpinające, pozycyjne, turniejowe) – składa się z elementów tego
samego typu ułożonych hierarchicznie w taki sposób, że każdy węzeł drzewa może być
rodzicem dla innych węzłów, a węzły mające swojego rodzica nazywamy dziećmi.
Graf (skierowane i nieskierowane, cykliczne, acykliczne, planarne) – składa się z
wierzchołków i krawędzi, które łączą ze sobą poszczególne wierzchołki w różny sposób.
TablicaTablicaTablicaTablicaTablicaTablicaTablicaTablica
Tablica – jest strukturą jednorodną, która składa się z elementów tego samego typu;
charakteryzuje się swobodnym dostępem do danych, zaś składowe tablicy są
indeksowane, co umożliwia łatwy i szybki dostęp do poszczególnych składowych
tablicy:
Definiujemy tablicy w Pascalu:
type T = array [ZAKRES] of TYP; np. type Wektor = array [1..50] of real;
Deklaracja tablicy w Pascalu:
var x: Wektor; var i: Integer;
Odwołanie do elementów tablicy poprzez odpowiedni indeks „i”, np.: x[i]
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 4444....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Odwołanie do elementów tablicy poprzez odpowiedni indeks „i”, np.: x[i]
Indeks tablicy może być stałą (np. x[3]), zmienną (np. x[i]), jak również wyrażeniem
indeksowym (np. x[2*i+1]).
Przykład 1. Poszukiwanie najmniejszego indeksu i składowej o wartości x
var A: array[1..G] of T {G>0}; var i : Integer;
i:=0;
repeat i:=i+1 until (A[i]=x) or (i=G);
if A[i] <> x then Writeln(‘Gie ma takiego elementu w tablicy A.’)
else Writeln (‘Znaleziono x na ’, i, ‘-tej pozycji w tablicy A.’);
Tablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowa
Jeżeli elementy tablicy zostały wcześniej uporządkowane/posortowane przeszukiwanie
można znacznie przyspieszyć. W takim przypadku stosuje się metodę połowienia
przedziału, w którym może się znajdować poszukiwany element. Metodę tą nazywamy
metodą bisekcją lub przeszukiwaniem połówkowym:
i:=1; j:=G;
repeat k:=(i+j) div 2
if x>A[k] then i:=k+1 else j:=k-1
until (A[k]=x) or (i>j)
Górną granicą wymaganej liczby porównań jest log2 G
Macierz (tablica dwuwymiarowa) – to tablica, której składowe są również tablicami:
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 5555....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Macierz (tablica dwuwymiarowa) – to tablica, której składowe są również tablicami:
np. M: array [1..10] of Wektor jest tablicą o 10 składowych (wierszach), z których
każdy wiersz składa się z 50 składowych typu real i nazywa się macierzą 10x50
o składowych rzeczywistych lub też macierzą o 10 wierszach i 50 kolumnach.
Odwołujemy się do elementów macierzy poprzez odpowiednie indeksy:
M[i][j] lub M[i,j]
Deklarację macierzy można uprościć w następujący sposób w Pascalu:
M: array [1..10] of array [1..50] of real;
lub
M: array [1..10,1..50] of real;
RecordRecordRecordRecordRecordRecordRecordRecord
Rekord – jest najprostszym sposobem tworzenia typów złożonych, składających się z
elementów dowolnego typu.
Definicja typu record w Pascalu:
type LiczbaZespolona = record
re, im: real;
end
type Osoba = record
imie, nazwisko: alfa;
dataurodzenia: Data;
plec: (kobieta, mezczyzna);
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 6666....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
plec: (kobieta, mezczyzna);
stancywilny: (wolny, zonaty, owdowialy, rozwiedziony)
end
Deklaracja zmiennej typu rekord w Pascalu:
z: LiczbaZespolona;
p: Osoba;
Konstruujemy/inicjujemy rekord przez:
z = LiczbaZespolona (1.0, -2.0);
p = Osoba (‘Jan’, ‘Gowak’, Data(19,3,1976), mezczyzna, wolny);
ZbiórZbiórZbiórZbiórZbiórZbiórZbiórZbiór
Zbiór – odnosi się do elementów tego samego typu. Definiujemy go następująco:
type Z = set of TYP np. type zbiorznakow = set of char
Deklaracja zbioru:
zz := [‘+’,’-‘,’d’,’g’,’5’]
Ga wszystkich typach zbiorowych są określone następujące operatory elementarne,uszeregowane według priorytetów:
* - przecięcie (mnożenie) zbiorów
+ - suma (dodawanie) zbiorów
- - różnica zbiorów
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 7777....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
in - należenie do zbioru
r*s+t = (r*s) + t; r-s*t = r-(s*t); r-s+t = (r-s)+t; x in s+t = x in (s+t)
Zbiór S wygodnie jest reprezentować w pamięci komputera za pośrednictwem jegofunkcji charakterystycznej C(s). Jest to wektor wartości logicznych, którego i-taskładowa określa występowanie bądź brak wartości i w zbiorze, np. zbiór liczbcałkowitych:
S = [1,4,8,9] jest reprezentowany przez ciąg wartości logicznychF (fałsz) i T (prawda) następująco:
C(s) = (FTFFTFFFTT)
jeśli typem podstawowym zbioru S jest 0..9.
Zbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięci
W pamięci komputera sekwencja wartości logicznych jest reprezentowana
przez ciąg bitów:
S: 0 1 0 0 1 0 0 0 1 1 - reprezentacja w pamięci
0 1 2 3 4 5 6 7 8 9 - kolejne bity
Reprezentacja zbioru przez jego funkcję charakterystyczną ma tę zaletę, że
operacje obliczania sumy, przecięcia i różnicy dwóch zbiorów można
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 8888....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
operacje obliczania sumy, przecięcia i różnicy dwóch zbiorów można
realizować w maszynie cyfrowej jako elementarne operacje logiczne.
Sprawdzanie czy element x należy do zbioru możemy wykonać poprzez
badanie warunku:
if x in [c1, c2, ..., cn] then …
Zamiast
if (x= c1) or (x= c2) or … or (x= cn) then …
Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)
Plik sekwencyjny (ciąg) – należy do struktur danych o mocy nieskończonej:
type tekst = file of char {definicja typu pliku znakowego (tekstowego)}rewrite(x) {konstruowanie pliku/ciągu pustego}put(x) {wydłuża plik/ciąg x poprzez dołączenie na jego końcu elementu z bufora}reset(x) {zapoczątkowuje przeglądanie pliku/ciągu x}get(x) {przejście do następnej składowej, odczytanie jej i przypisanie do bufora}eof(x) {służy do badania, czy został osiągnięty koniec pliku x}read(x,v) {odczytanie elementu z ciągu x i zapisanie go do zmiennej v}write(x,v) {wydłuża plik/ciąg x poprzez dołączenie na jego końcu elementu v}
Przykłady:
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 9999....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Przykłady:rewrite (x);while p dobegin
Operacja(v); write (x,v)end;
reset (x);while not(eof(x)) dobegin
read(x,v); Operacja(v)end;
Teksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstowe
Teksty – odgrywają szczególnie istotną rolę w przetwarzaniu danych, albowiem służądo komunikacji użytkownika z komputerem.type tekst = file of char;var input, output: tekst;writeln(f) {dołącz znak końca wiersza do pliku f}readln(f) {przeskocz ciąg znaków pliku f aż do znaku występującego
bezpośrednio po najbliższym znaczniku końca wiersza}eoln(f) {funkcja boolowska, która przyjmuje wartość true, jeśli aktualna
pozycja pliku wskazuje na separator wiersza,w przeciwnym przypadku przyjmuje wartość false}
rewrite(f);while not(q) do
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 10101010....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
while not(q) dobegin
while not(p) do begin Operacja(x); write (f,x) end;writeln(f)
endreset(f);while not eof(f) dobegin
Operacja1();while not eoln(f) do begin read(f,x); Operacja2(x); end;Operacja3();readln(f)
end
Dynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danych
Dynamiczne struktury danych charakteryzują się zmiennością swoich strukturpodczas procesu obliczeniowego. Zmiany te dotyczą przede wszystkim ichrozmiarów (ilości zajętej pamięci). Ga dynamiczne struktury danych kompilatornie może „z góry” przydzielić określonej ilości pamięci podczas dokonywanejtranslacji kodu, gdyż jej ilość może się zmieniać. Mówimy więc o tzw. dynamicznymprzydzielaniu pamięci już podczas wykonywania programu. Oznacza toprzydzielanie pamięci każdej ze składowych w chwili powołania danego obiektu dożycia. Kompilator w procesie translacji przydziela więc tylko stałą ilość pamięci nazapamiętanie adresu składowej umieszczanej dynamicznie w pamięci zamiastsamej składowej.
Zmienna statyczna powiązana jest z konkretnym miejscem i rozmiarem pamięci
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 11111111....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Zmienna statyczna powiązana jest z konkretnym miejscem i rozmiarem pamięcijuż w momencie kompilacji programu.
Zmienna dynamiczna jest tworzona i usuwana podczas wykonywania programu.Tak więc pamięć potrzebna do zapamiętania zmiennej dynamicznej może byćprzydzielana (w miarę dostępnych zasobów), zwalniana i znowu przydzielanainnej zmiennej.
W Pascalu można tworzyć proste zmienne dynamiczne oraz dynamiczne strukturydanych, np. listy.
Dynamiczne struktury danych mogą się rozszerzać lub kurczyć w miarę potrzeb wtrakcie wykonywania programu.
Wskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowania
Dynamiczny przydział pamięci jest realizowany za pomocą wskaźników, które
są specjalnym typem zmiennej, która nie przechowuje żadnych danych, lecz
adres ich położenia w pamięci.
W programie można zmienić wartość wskaźnika, tak aby wskazywał na inne
miejsce pamięci lub żeby nie wskazywał żadnego miejsca (GIL). Można też
zwolnić miejsce związane z określonym wskaźnikiem i przydzielić je innym
zmiennym.
Listy są przydatne w sytuacjach, gdy nie można przewidzieć zapotrzebowania
na pamięć. Wskaźniki służą do powiązania poszczególnych elementów listy ze
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 12121212....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
na pamięć. Wskaźniki służą do powiązania poszczególnych elementów listy ze
sobą. Każdy element listy zawiera minimalnie jeden wskaźnik, który wskazuje
następny element listy (lista pojedynczo wiązana). Można też zastosować dwa
wskaźniki, wtedy wskazywany jest również element poprzedni listy.
Tablice można traktować jako przeciwieństwo list, gdyż te wymagają
określenia wielkości w momencie ich tworzenia bez dalszej możliwości ich
zwiększania czy zmniejszania. Wadą tablic jest więc konieczność przydzielania
takiej ilości pamięci, ile wymaga maksymalna przewidziana liczba danych.
Takie postępowanie może być dużym marnotrawstwem pamięci.
Definiowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikach
Wskaźniki mogą odwoływać się do danych dowolnego typu. W Pascalu chcąc odnieśćsię do obiektu wskazywanego przez wskaźnik dodajemy daszek „^”.
Deklaracja wskaźnika wskazującego na zmienną typu „integer”:
var Wsk_Int : ^integer;
Gastępnie trzeba przydzielić pamięć dla danej typu „integer” wskazywanej przez tenwskaźnik:
new (Wsk_Int);
Przypisanie:
Wsk_Int^ := 500;
Zmienna = Wsk_Int^;
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 13131313....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Zmienna = Wsk_Int^;
Działania na wskaźnikach ograniczają się do porównania, np.:
if Wsk1 = Wsk2 then...;
i do przypisania wartości, np.:
Wsk1 := Wsk2;
W wyniku takiego działania zmienia się miejsce odwołania wskaźnika Wsk1 na takiesamo, jakie ma wskaźnik Wsk2. Miejsce pamięci wskazywane wcześniej prze Wsk1 jestpo wykonaniu działania niedostępne (o ile nie wskazywał na nie inny wskaźnik).
Zwalnianie miejsca pamięci wskazywanego przez wskaźnik:
dispose (Wsk_Int);
Funkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikach
Gew – tworzy nową dynamiczną zmienną i przypisuje jej adres zmiennej:
procedure Gew(var P: Pointer);
Dispose – zwalnia pamięć przydzieloną dynamicznej zmiennej:
procedure Dispose(var P: Pointer);
Przykłady:
type
Str18 = string[18];
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 14141414....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Str18 = string[18];
var
P: ^Str18;
begin
Gew(P);
P^ := 'Gow you see it...';
Dispose(P); { Gow you don't... }
end.
Dynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięci
GetMem – tworzy dynamiczną zmienną o podanej wielkości i przypisuje adres tegobloku do wyspecyfikowanego wskaźnika:
procedure GetMem(var P: Pointer; Size: Word);
FreeMem – zwalnia pamięć zajmowaną przez dynamiczną zmienną o określonejwielkości:
procedure FreeMem(var P: Pointer; Size: Word);
Przykłady:type TFriendRec = record
Game: string[30]; Age : Byte;end;
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 15151515....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
end;var p: pointer;begin
if MaxAvail < SizeOf(TFriendRec) thenWriteln('Got enough memory')
elsebegin
GetMem(p, SizeOf(TFriendRec)); { Allocate memory on heap }{ ...Use the memory... }FreeMem(p, SizeOf(TFriendRec)); { Then free it when done }
end;end.
Stos (FILO Stos (FILO Stos (FILO Stos (FILO Stos (FILO Stos (FILO Stos (FILO Stos (FILO –––––––– First In First In First In First In First In First In First In First In LastLastLastLastLastLastLastLast Out)Out)Out)Out)Out)Out)Out)Out)
STOS – FILO DODAWAGIE USUWAGIE
G.G.wskwsk
zawartośćzawartość
GG--1.1.
góragóra
G.G.wskwsk
zawartośćzawartość
GG--1.1.
góragóra
G+1.G+1.wskwsk
zawartośćzawartość
G.G.wskwsk
zawartośćzawartość
GG--1.1.
góragóra
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 16161616....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
GG--1.1.wskwsk
zawartośćzawartość
GG--2.2.wskwsk
zawartośćzawartość
1.1.GILGIL
zawartośćzawartość
GG--1.1.wskwsk
zawartośćzawartość
GG--2.2.wskwsk
zawartośćzawartość
1.1.GILGIL
zawartośćzawartość
GG--1.1.wskwsk
zawartośćzawartość
GG--2.2.wskwsk
zawartośćzawartość
1.1.GILGIL
zawartośćzawartość
Definicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w Pascalu
Deklaracja dynamicznej struktury stosu:
TYPE StosPtr = ^Stos;
Stos = record
dolny : StosPtr;
zawartosc: integer
end
Tworzenie pustego stosu:
VAR wierzch : StosPtr;
wierzch := GIL;
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 17171717....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Wstawianie nowego elementu (recordu) na górę stosu:
VAR nowy : StosPtr;
Gew (nowy);
nowy^.dolny := wierzch;
wierzch := nowy;
Usuwanie górnego elementu (recordu) ze stosu:
if (wierzch^.dolny)
then begin usuwany := wierzch; wierzch := wierzch^.dolny; Dispose (usuwany) end
else begin Dispose (wierzch); wierzch := GIL end;
Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO –––––––– First In First Out)First In First Out)First In First Out)First In First Out)First In First Out)First In First Out)First In First Out)First In First Out)
Dynamiczna struktura kolejki:
Usuwanie elementu (rekordu) z początku kolejki:
G.G.GILGIL
zawartośćzawartość
GG--1.1.wskwsk
zawartośćzawartość
GG--2.2.wskwsk
zawartośćzawartość
1.1.wskwsk
zawartośćzawartośćkonieckoniec początekpoczątek
G.G.GILGIL
zawartośćzawartość
GG--1.1.wskwsk
zawartośćzawartość
1.1.wskwsk
zawartośćzawartośćkonieckoniec początekpoczątek
2.2.wskwsk
zawartośćzawartość
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 18181818....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Dodawanie nowego elementu (rekordu) na koniec kolejki:
G.G.wskwsk
zawartośćzawartość
GG--1.1.wskwsk
zawartośćzawartość
GG--2.2.wskwsk
zawartośćzawartość
1.1.wskwsk
zawartośćzawartośćkonieckoniec początekpoczątek
G+1.G+1.GILGIL
zawartośćzawartość
Definicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w Pascalu
Deklaracja dynamicznej struktury kolejki:TYPE KolejkaPtr = ^Kolejka;
Kolejka = recordnastepny : KolejkaPtr ;zawartosc: integer
end
Pusta kolejka:VAR poczatek, koniec : KolejkaPtr ;poczatek := GIL;koniec := GIL;
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 19191919....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Wstawianie nowego elementu (recordu) na koniec kolejki:VAR nowy : KolejkaPtr ;Gew (nowy);koniec^.nastepny := nowy;nowy^.nastepny := GIL;koniec := nowy;
Usuwanie elementu (recordu) z przodu kolejki:if (poczatek) thenbegin usuwany := poczatek; poczatek := poczatek^.nastepny; Dispose (usuwany) end
Listy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązane
Przykład listy pojedynczo wiązanej:
Wklejanie elementu (rekordu) na początek listy:
1.1.wskwsk
zawartośćzawartość
2.2.wskwsk
zawartośćzawartość
3.3.wskwsk
zawartośćzawartość
G.G.GILGIL
zawartośćzawartośćpoczątekpoczątek
GOWYGOWYwskwsk
zawartośćzawartość
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 20202020....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Wklejanie elementu (rekordu) do środka listy:
1.1.wskwsk
zawartośćzawartość
2.2.wskwsk
zawartośćzawartość
3.3.wskwsk
zawartośćzawartość
G.G.GILGIL
zawartośćzawartośćpoczątekpoczątek
1.1.wskwsk
zawartośćzawartość
2.2.wskwsk
zawartośćzawartość
3.3.wskwsk
zawartośćzawartość
G.G.GILGIL
zawartośćzawartośćpoczątekpoczątek
GOWYGOWYwskwsk
zawartośćzawartość
Listy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązane
Przykład listy pojedynczo wiązanej:
Usuwanie elementu (rekordu) z początku listy:
1.1.wskwsk
zawartośćzawartość
2.2.wskwsk
zawartośćzawartość
3.3.wskwsk
zawartośćzawartość
G.G.GILGIL
zawartośćzawartośćpoczątekpoczątek
1.1.wskwsk
2.2.wskwsk
3.3.wskwsk
G.G.GILGILpoczątekpoczątek
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 21212121....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Usuwanie elementu (rekordu) ze środka listy:
wskwsk
zawartośćzawartośćwskwsk
zawartośćzawartośćwskwsk
zawartośćzawartośćGILGIL
zawartośćzawartośćpoczątekpoczątek
1.1.wskwsk
zawartośćzawartość
2.2.wskwsk
zawartośćzawartość
3.3.wskwsk
zawartośćzawartość
G.G.GILGIL
zawartośćzawartośćpoczątekpoczątek
Listy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązane
Przykład listy pojedynczo wiązanej:
Wklejanie elementu (rekordu) do środka listy:
1.następny
zawartość
2.następny
zawartość
3.następny
zawartość
G.GIL
zawartość
początek
GIL poprzed. poprzed. poprzed.
koniec
GOWYnastępny
zawartośćpoprzed.
koniec
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 22222222....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Usuwanie elementu (rekordu) ze środka listy:
1.następny
zawartość
2.następny
zawartość
3.następny
zawartość
G.GIL
zawartość
początek
GIL poprzed. poprzed. poprzed.
koniec
1.następny
zawartość
2.następny
zawartość
3.następny
zawartość
G.GIL
zawartość
początek
GIL poprzed. poprzed. poprzed.
koniec
Implementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicy
INDEKSY TABLICY:
NASTĘPNIKI ELEMENTÓW LISTY PODWÓJNIE WIĄZANEJ:
5.8
6.5
6 7
7.4
4.7
8 3
11.0
10
9.10
10.11
4 9
3.6
8.9
2 5
1.2
2.3
0 1
7. 8.5. 6. 11.9. 10.3. 4.1. 2.
Wykład 8. Strona Wykład 8. Strona Wykład 8. Strona Wykład 8. Strona 23232323....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
POPRZEDNIKI ELEMENTÓW LISTY PODWÓJNIE WIĄZANEJ :
Listę wobec tego możemy zaimplementować również z wykorzystaniem tablicy.Mankamentem takiej implementacji jest niemożliwość rozszerzenia listy pozawyznaczony rozmiar tablicy oraz ew. nieoszczędność takiej implementacji, jeślilista jest mała, a zadeklarowania tablica bardzo duża.
zawartość zawartośćzawartość zawartość zawartośćzawartość zawartośćzawartość zawartośćzawartość zawartość
Definicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w Pascalu
Definicja i deklaracja dynamicznej struktury listy podwójnie wiązanej:TYPE ListPtr = ^List;
List = recordnastepny, poprzedni : ListPtr;zawartosc: integer
end
Tworzenie pustej listy dwukierunkowej:VAR poczatek, koniec : ListPtr;poczatek := GIL; koniec := GIL;
Wstawianie nowego elementu (recordu) po aktualnym wskaźniku do listy:VAR nowy : ListPtr;Gew (nowy);
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 24242424....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Gew (nowy);nowy^.nastepny := aktualny^.nastepny;nowy^.poprzedni := aktualny;nowy^.nastepny^.poprzedni := nowy;aktualny^.nastepny := nowy;
Usuwanie wskazywanego elementu (recordu) z listy:aktualny^.następny^.poprzedni := aktualny^.poprzedni;aktualny^.poprzedni^.nastepny := aktualny^.nastepny;if (aktualny^.poprzedni) begin
aktualny := aktualny^.poprzedni; Dispose (aktualny^.nastepny) endelse if (aktualny^.nastepny) begin
aktualny := aktualny^.nastepny; Dispose (aktualny^.poprzedni) endelse begin Dispose (aktualny); aktualny := GIL end;
Edycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w Pascalu
PROGRAM Nazwa;PROGRAM Nazwa;
USES USES NazwaBibliotekiNazwaBiblioteki;;
CONST CONST NazwaStalejNazwaStalej = = WartoscStalejWartoscStalej;;
TYPE TYPE NazwaTypuNazwaTypu = = DefinicjaTypuDefinicjaTypu;;
VAR VAR NazwaZmiennejGlobalnejNazwaZmiennejGlobalnej : : TypZmiennejGlobalnejTypZmiennejGlobalnej;;
BEGINBEGIN {wielkość liter w nazwach instrukcji nie ma znaczenia}{wielkość liter w nazwach instrukcji nie ma znaczenia}
ReadlnReadln (a);(a);
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 25252525....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
ReadlnReadln (a);(a);
FOR i=1 TO a DOFOR i=1 TO a DO
BEGINBEGIN
IF i<10 THEN IF i<10 THEN WritelnWriteln (‘Mała liczba’) {brak średnika przed ELSE}(‘Mała liczba’) {brak średnika przed ELSE}
ELSE ELSE WritelnWriteln (‘Duża liczba’)(‘Duża liczba’) {brak średnika przed END}{brak średnika przed END}
ENDEND
WritelnWriteln (‘Wcięcia w programie powinny odwzorowywać strukturę!’);(‘Wcięcia w programie powinny odwzorowywać strukturę!’);
REPEAT UNTIL REPEAT UNTIL KeypressedKeypressed {brak średnika przed END}{brak średnika przed END}
END. {program główny w Pascalu kończy się kropką}END. {program główny w Pascalu kończy się kropką}
{Wcięcia ułatwiają orientację w programie i jego czytelność.}{Wcięcia ułatwiają orientację w programie i jego czytelność.}
Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD -------- klasycznyklasycznyklasycznyklasycznyklasycznyklasycznyklasycznyklasyczny
Klasyczny szkolny algorytm charakteryzuje się dużą złożonością obliczeniową.Klasyczny szkolny algorytm charakteryzuje się dużą złożonością obliczeniową.
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 26262626....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD –––––––– poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 27272727....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Dążenie do efektywności i optymalizacji Dążenie do efektywności i optymalizacji ––
to cecha dobrych informatyków!to cecha dobrych informatyków!
Wyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownika
Zadanie wyszukania słowa w słowniku uporządkowanych słów.Zadanie wyszukania słowa w słowniku uporządkowanych słów.
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 28282828....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe –––––––– „Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”
Zasada wyszukiwania połówkowego polega na podzieleniu posortowanego Zasada wyszukiwania połówkowego polega na podzieleniu posortowanego
ciągu elementów na 2 części, zbadanie, w której z nich leży poszukiwany ciągu elementów na 2 części, zbadanie, w której z nich leży poszukiwany
element i powtórzeniu tego algorytmu tylko dla tej części, w której on leży.element i powtórzeniu tego algorytmu tylko dla tej części, w której on leży.
Dzięki takiemu podziałowi uzyskujemy złożoność obliczeniową wyszukiwania Dzięki takiemu podziałowi uzyskujemy złożoność obliczeniową wyszukiwania
O(log n), gdzie n O(log n), gdzie n –– ilość elementów ciągu.ilość elementów ciągu.
Zasadę tą stosujemy we wielu bardziej skomplikowanych algorytmach, np. Zasadę tą stosujemy we wielu bardziej skomplikowanych algorytmach, np.
podczas sortowania.podczas sortowania.
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 29292929....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Potęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnym
Można zauważyć, iż w przypadku wykładników o Można zauważyć, iż w przypadku wykładników o
większych potęgach można wykorzystać wcześniejsze większych potęgach można wykorzystać wcześniejsze
wyniki mnożenia zamiast mnożenia podstawy nwyniki mnożenia zamiast mnożenia podstawy n--1 razy:1 razy:
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 30303030....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Obliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodnia
Dzień tygodnia może być obliczony bardzo efektywnie zastępując intuicyjne Dzień tygodnia może być obliczony bardzo efektywnie zastępując intuicyjne
dodawanie od wybranej daty wzorami matematycznymi, które bez dodawanie od wybranej daty wzorami matematycznymi, które bez
wykorzystania pętli obliczą stosowny dzień tygodnia z uwzględnieniem lat wykorzystania pętli obliczą stosowny dzień tygodnia z uwzględnieniem lat
przestępnych, różnej ilości dni w poszczególnych miesiącach itp.przestępnych, różnej ilości dni w poszczególnych miesiącach itp.
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 31313131....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Obliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianu
Często prosta zamiana kolejności operacji i umiejętne wykorzystanie wspólnych Często prosta zamiana kolejności operacji i umiejętne wykorzystanie wspólnych
wyników cząstkowych umożliwia zmniejszenie złożoności obliczeń.wyników cząstkowych umożliwia zmniejszenie złożoności obliczeń.
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 32323232....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:
� L. Banachowski, K. Diks, W. Rytter: „Algorytmy i struktury danych”, WNT, Warszawa, 2001
� Z. Fortuna, B. Macukow, J. Wąsowski, „Metody numeryczne”, WNT, Warszawa, 1993.
� K. Jakubczyk, „Turbo Pascal i Borland C++”, Wydanie II, Helion, 2006.
� J. i M. Jankowscy, „Przegląd metod i algorytmów numerycznych”, WNT, Warszawa, 1988.
� A. Kiełbasiński, H. Schwetlick, „Numeryczna algebra liniowa”, WNT, Warszawa 1992.
� A. Kierzkowski, „Turbo Pascal. Ćwiczenia praktyczne.”, Helion 2006.
� K. Koleśnik, „Wstęp do programowania z przykładami w Turbo Pascalu”, Helion,
� M. Sysło: „Elementy Informatyki”.
� A. Szepietowski: „Podstawy Informatyki”.
Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 33333333....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
� R. Tadeusiewicz, P. Moszner, A. Szydełko: „Teoretyczne podstawy informatyki”.
� W. M. Turski: „Propedeutyka informatyki”.
� N. Wirth: „Wstęp do programowania systematycznego”.
� N. Wirth: „ALGORYTMY + STRUKTURY DANYCH = PROGRAMY”.
Top Related