502 2015 pv t02 2 vienkryptis veiksmai
DESCRIPTION
InformatikaTRANSCRIPT
-
T02 Vienkryptis sraas
2/3
-
P175B502 T02 2
Temos klausimai
Rekursins duomen struktros Dinaminio srao samprata
Tiesinis vienkryptis sraas:
formavimas,
perira,
informacijos sukeitimas vietomis, alinimas, terpimas,
paieka,
rikiavimas,
sraas su fiktyviais elementais
Konteinerin klas Dklas, eil
-
P175B502 T02 3
Tiesinis sraas
Informacijos sukeitimas vietomis
-
P175B502 T02 4
Dviej element informacini dali sukeitimas vietomis
Galimi variantai:
sukeisti informacines dalis;
perkabinti rodykles (tik B123 modulio stud.).
p 5 8 9 3
s1 s2
-
P175B502 T02 5
Informacini dali sukeitimas 1/3
int k = s1->duom; // 1
s1->duom = s2->duom; // 2
s2->duom = k; // 3
p 5 8 9 3
s1 s2
5 k
struct Mazgas {
int duom;
Mazgas *sek;
};
-
P175B502 T02 6
Informacini dali sukeitimas 2/3
int k = s1->duom; // 1
s1->duom = s2->duom; // 2
s2->duom = k; // 3
p 9 8 9 3
s1 s2
5 k
struct Mazgas {
int duom;
Mazgas *sek;
};
-
P175B502 T02 7
Informacini dali sukeitimas 3/3
int k = s1->duom; // 1
s1->duom = s2->duom; // 2
s2->duom = k; // 3
p 9 8 5 3
s1 s2
5 k
struct Mazgas {
int duom;
Mazgas *sek;
};
-
P175B502 T02 8
Tiesinis sraas
Element alinimas Srao naikinimas
-
P175B502 T02 9
1-o elemento alinimas
Mazgas *d = p; p = p->sek; delete d;
5 1 p ... p
d
Ar is bdas tinka sraui i vieno elemento?
1 2 3
-
P175B502 T02 10
Vidinio elemento alinimas
v->sek = d->sek; delete d;
1 -3 ...
d v
5 ...
Ar is bdas tinka srao gale?
Randamas alinamo elemento adresas d ir prie j esanio elemento adresas v; po to:
-
P175B502 T02 11
Elemento alinimas (kitas bdas) 1/3
d surandamas alinamas elementas
s sekantis u d elementas
Mazgas *s = d->sek; // sekantis elementas
p 5 8 9 3
d s
-
P175B502 T02 12
Elemento alinimas (kitas bdas) 2/3
alinam element d perrayti s element
*d = *s;
p 5 9 9 3
d s
-
P175B502 T02 13
Elemento alinimas (kitas bdas) 3/3
p 5 9 9 3
d s
is bdas netinka srao gale!
delete s;
-
P175B502 T02 14
Elemento paalinimas i srao
(nuorod korekcija)
... NULL
Inf.
0
Inf.
1
Inf.
2
Inf.
n
p
d
Reikia rasti prie tai esanio elemento adres Imesti i srao = perrayti adres
Dabar galima atsisakyti elemento
Srao pradios elementas imetamas perskaiiuojant nuorod p
v
-
P175B502 T02 15
Elemento paalinimas i srao
(reikmi persiuntimas)
... NULL
Inf.
0
Inf.
1
Inf.
2
Inf.
n
p
d
Imesti i srao = perrayti reikm Dabar galima atsisakyti elemento (sekanio)
Netinka srao paskutiniam elementui
s
sidmkime sekanio elemento adres
Inf.
2
-
P175B502 T02 16
Srao naikinimas
Kartoti 1-o elemento alinim, kol sraas taps tuias:
while (p != NULL) { // p srao pradia
Mazgas *d = p;
p = p->sek;
delete d;
}
struct Mazgas {
int duom; Mazgas *sek; };
p 5 8 9 3
d
1 / 4
-
P175B502 T02 17
Srao naikinimas
struct Mazgas {
int duom; Mazgas *sek; };
p 8 9 3
d
2 / 4
Kartoti 1-o elemento alinim kol sraas taps tuias:
while (p != NULL) { // p srao pradia
Mazgas *d = p;
p = p->sek;
delete d;
}
-
P175B502 T02 18
Srao naikinimas
struct Mazgas {
int duom; Mazgas *sek; };
p 9 3
d
3 / 4
Kartoti 1-o elemento alinim kol sraas taps tuias:
while (p != NULL) { // p srao pradia
Mazgas *d = p;
p = p->sek;
delete d;
}
-
P175B502 T02 19
Srao naikinimas
struct Mazgas {
int duom; Mazgas *sek; };
p 3
d
4 / 4
Kartoti 1-o elemento alinim kol sraas taps tuias:
while (p != NULL) { // p srao pradia
Mazgas *d = p;
p = p->sek;
delete d;
}
-
P175B502 T02 20
Srao naikinimas
... NULL
Info
rmac
ija 0
Info
rmac
ija 1
Info
rmac
ija 2
Info
rmac
ija n
p
d
NULL
-
P175B502 T02 21
Tiesinis sraas
Naujo elemento terpimas
-
P175B502 T01 22
Reikia inoti naujo elemento terpimo viet: srao pradioje; srao viduje; srao gale.
Naujo elemento terpimo situacijos 1/2
Pavyzdiui: prie didiausi reikm (savyb) turint element; u didiausi reikm (savyb) turinio elemento; nepaeidiant rikiavimo tvarkos; . . .
P175B502 T02 22
-
P175B502 T01 23
terpimas: srao pradioje atitinka srao formavimo atvirktine seka
atvej, kai naujas elementas jungiamas srao pradioje. srao gale atitinka srao formavimo tiesiogine seka atvej, kai
naujas elementas jungiamas srao gale.
Naujo elemento terpimo situacijos 2/2
Dirbant su vienkrypiu srau reikia surasti, kur terpti. terpim prie, reikia keisti terpimu po.
P
P175B502 T02 23
-
P175B502 T02 24
Informacijos terpimas srao viduje 1/2
int k; k = 1; // k reikm vedama arba skaiiuojama Mazgas *d = new Mazgas; d->duom = k;
1
-3 ...
s
d 1 k
5 ...
struct Mazgas {
int duom;
Mazgas *sek;
};
-
P175B502 T02 25
Informacijos terpimas srao viduje 2/2
Turi bti inomas s adresas elemento, u kurio terpiama
d->sek = s->sek; s->sek = d;
1
-3 ...
s
d 1 k
5 ...
Ar is bdas tinka srao gale?
-
P175B502 T02 26
Elemento terpimas u nurodyto
... NULL
Inf.
0
Inf.
1a
Inf.
1
Inf.
n
p
d
s s u kurio terpti
d terpiamas elementas Perraome nuorod
raome nuorod
-
P175B502 T02 27
Elemento terpimas prie pirmj
... NULL In
f. 0
Inf.
1a
Inf.
1
Inf.
n
p
d
d terpiamas elementas
Perraome nuorod
raome nuorod
-
P175B502 T02 28
Tiesinis sraas Paieka
-
P175B502 T02 29
Paieka
Maiausios (didiausios) reikms paieka.
Iekoma konkreios reikms srae (grinamas atsakymas yra arba nra; arba grainamas surastos reikms adresas, neradus NULL).
Iekoma, kiek yra element, turini nurodyt poym.
. . .
Tinka visi nuoseklios srao periros algoritmai, naudoti darbui su masyvais.
-
P175B502 T02 30
Maiausios (didiausios) reikms paieka 1/2
Rezultatas: Reikm Elemento, turinio t reikm, adresas
int MaxReiksme(Mazgas *p) { int r = -10000; for (Mazgas *d = p; d !=NULL; d = d->sek) if ( d->duom > r) r = d->duom; return r; }
Pradin paiekos reikm gali bti r = p->duom;
jeigu sraas netuias (p != NULL)
p srao pradios rodykl
-
P175B502 T02 31
Maiausios (didiausios) reikms paieka 2/2
Rezultatas: Reikm Elemento, turinio t reikm, adresas
Mazgas *MaxVieta(Mazgas *p) { Mazgas *did = p; for (Mazgas *d = p; d !=NULL; d = d->sek) if ( d->duom > did->duom) did = d; return did; }
did = NULL reikia, kad sraas tuias
-
P175B502 T02 32
Reikms paieka
Mazgas *Vieta(Mazgas *p, int r) { for (Mazgas *d = p; d !=NULL; d = d->sek) if (d->duom == r) return d; return NULL; }
bool Yra(Mazgas *p, int r) { for (Mazgas *d = p; d !=NULL; d = d->sek) if (d->duom == r) return true; return false; }
-
P175B502 T02 33
Kiek yra reikmi?
int KiekYra(Mazgas *p, int r) { int k = 0; for (Mazgas *d = p; d !=NULL; d = d->sek) if (d->duom == r) k++; return k; }
Rezultatas 0 reikia, kad srae element su reikme r nra
-
P175B502 T02 34
Elemento prie inom element radimas
Mazgas *VietaPries(Mazgas *p, Mazgas *v){ // p srao pradia, // v inomas elementas (v != p), // r elementas, esantis tiesiogiai prie v Mazgas *r; for (r = p; r->sek != v; r = r->sek); return r; }
5 -3 p 7
v
r
Koks bus rezultatas, jeigu v == p ?
-
P175B502 T02 35
Tiesinis sraas Rikiavimas minmax bdu
-
P175B502 T02 36
Srao rikiavimas: minmax 1/3
for (Mazgas *d1 = p; d1 != NULL; d1 = d1->sek) {
/* Rodykl d1 rodo didiausios reikms paiekos intervalo pradi. Rasta didiausia reikm bus sukeiiama su d1 elemento reikme: informacini dali sukeitimas vietomis. */ }
-
P175B502 T02 37
Srao rikiavimas: minmax 2/3
for (Mazgas *d1 = p; d1 != NULL; d1 = d1->sek) { // Didiausios reikms paieka intervale Mazgas *maxv = d1; for (Mazgas *d2 = d1; d2 != NULL; d2 = d2->sek) if (d2->duom > maxv->duom) maxv = d2; }
-
P175B502 T02 38
Srao rikiavimas: minmax 3/3
for (Mazgas *d1 = p; d1 != NULL; d1 = d1->sek) { Mazgas *maxv = d1; for (Mazgas *d2 = d1; d2 != NULL; d2 = d2->sek) if (d2->duom > maxv->duom) maxv = d2;
// Informacini dali sukeitimas vietomis
int k = d1->duom;
d1->duom = maxv->duom;
maxv->duom = k;
}
-
P175B502 T02 39
Dirbant su dinaminiais sraais btina patikrinti funkcij (metod) veikim, kai:
sraas tuias
srae yra tik vienas elementas
apdorojamas pirmas srao elementas
apdorojamas paskutinis srao elementas
apdorojamas vidinis srao elementas
Pastabos
-
P175B502 T02 40
Tiesinis sraas Rikiavimas porini sukeitimo bdu
-
P175B502 T02 41
Nagrinjami du gretimi elementai (pora) Jie sukeiiami vietomis arba ne Sraas peririmas pakartotinai daug kart Rikiavimas baigiamas, kai eilins periros metu nebuvo sukeistas n vienas elementas Sraas rikiuojamas, jeigu jame yra bent vienas elementas
-
P175B502 T02 42
Rikiavimas: gretima pora 1/5
p
d d1
Mazgas *d, *d1;
d = d1 = p;
p
d d1
p
d d1
while (d1 != NULL) {
d = d1;
d1 = d1->sek;
}
-
P175B502 T02 43
Rikiavimas: gretima pora 2/5
p
d d1
p
d d1
p
d d1
while (d1 != NULL) {
d = d1;
d1 = d1->sek;
}
-
P175B502 T02 44
Rikiavimas: gretima pora 3/5
while (d1 != NULL) {
d = d1;
d1 = d1->sek;
}
p
d d1
p
d d1
p
d d1
-
P175B502 T02 45
Rikiavimas: gretima pora 4/5
while (d1 != NULL) {
d = d1;
d1 = d1->sek;
}
p
d d1
p
d d1
p
d d1
-
P175B502 T02 46
Rikiavimas: gretima pora 5/5
while (d1 != NULL) {
d = d1;
d1 = d1->sek;
}
p
d d1
p
d d1
p
d d1
-
P175B502 T02 47
Rikiavimas: keiiamos reikms
void Klas::Burbulas1() { bool yra = true; Mazgas *d, *d1; while (yra) { yra = false; d = d1 = p;
while (d1 != NULL) {
if (d1->duom > d->duom) {
int c = d->duom; d->duom = d1->duom; d1->duom = c; yra = true; } d = d1; d1 = d1->sek; }
}
}
-
Sraas su fiktyviais elementais
-
P175B502 T02 49
Sraas su fiktyviais elementais
Pirmas ir paskutinis elementai nenaudojami informacijai saugoti.
Sraas niekada nebus tuias.
Element terpimas bei alinimas vyksta tik srao viduje (maiau tikrinim).
1 -3 p
1/3
-
P175B502 T02 50
Sraas su fiktyviais elementais
Galimi sraai tik su vienu fiktyviu elementu.
Patogu turti rodykl srao paskutin element.
2/3
1 -3 p 5
g
-
P175B502 T02 51
Sraas su fiktyviais elementais
Nupiekite naujo elemento d terpimo veiksmus:
p
d 5
d->sek = p->sek; p->sek = d;
3/3
-
Santrauka
-
P175B502 T02 53
Tiesinis dinaminis sraas
Formavimas
Perira
Element alinimas
Element terpimas
Duomen paieka
Rikiavimas
P
Dklas
Eil