You are on page 1of 21

MASYVŲ APDOROJIMAS

(2 DALIS)
Lina Čeponienė
Pamokos uždavinys
 Programuojant C++kalba mokiniai susipažins
su masyvų šalinimo ir įterpimo į masyvą
algoritmais.
Elemento įterpimas į masyvą

 Gyvenime tokių situacijų pasitaiko dažnai: į klasę


ateina naujas mokinys, viešbutyje apsigyvena
žmogus, į autobusą įlipa keleivis, į parduotuvę
atvežanaują prekę ir t.t. Kadangi masyvus aprašome
su atsarga, tai įterpti naujus elementus galėsime, jei
bus vietos. Svarbesnis klausimas yra visai kitas - kur
įterpti naują elementą? Galima jį įterpti:
 į masyvo pabaigą,
 į pasyvo pradžią arba
 į pasirinktą vietą.
Nuo ko pradėti...

Įterpiant naujus masyvo elementus, reikia pasirūpinti, kad nebūtų


peržengtos masyvo ribos, todėl kaskart, prieš įterpiant, būtina
patikrinti, ar masyve yra laisvų vietų:
if (n < CMax) ...
Elemento įterpimas į masyvo pabaigą (1)

 Elementą įterpti į masyvo pabaigą yra


lengviausia ir naudingiausia. Tereikia apibrėžti
kintamąjį, kuris fiksuotų pirmą neužimtą
masyvo elementą. Elemento įterpimo į masyvo
pabaigą algoritmas labai paprastas:
 Reikšmė r įrašoma į parengtą neužimtą vietą
masyve.
 Masyvo elemntų skaičius n padidinamas
vienetu.
Elemento įterpimas į masyvo pabaigą (2)

 Įterpimo veiksmus galima užrašyti viena eilute:


if (n < CMax) M[n++] = r;
Elemento įterpimas į masyvo pradžią arba į pasirinktą vietą, kai buvusi elementų
išdėstymo tvarka nėra svarbi (1)

 Kartais naują masyvo elementą reikia įterpti į numatytą


vietą, kuri užimta. Panaši situacija pasitaiko autobuse,
kai keleivis, kasoje nusipirkęs bilietą, savo vietą randa
užimtą. Ne savo vietoje sėdintis žmogus persodinamas
į kurią nors laisvą vietą, o turintis bilietą keleivis
atsisėda jam skirtoje. Įterpimo algorimas yra efektyvus,
jį sudaro keli nesudėtingi veiksmai:
 Masyvo elementas M[kur] perkeliamas į masyvo
pabaigą M[n].
 Masyvo elementų skaičius n padidinamas vienetu.
 Į M[kur] įrašoma nauja elemento reikšmė r.
Elemento įterpimas į masyvo pradžią arba į pasirinktą
vietą, kai buvusi elementų išdėstymo tvarka nėra
svarbi (2)
Elemento įterpimas į masyvo pradžią arba į pasirinktą vietą, kai buvusi elementų
išdėstymo tvarka yra svarbi (1)

 Jeigu buvusią masyvo elementų išdėstymo


tvarką reikia išsaugoti, tai masyvo elementus
teks paslinkti. Šį algoritmą sudaro daug
veiksmų.
 Tarkime, kad į masyvo M ketvirtojo elemento
vietą reikia įrašyti skaičių 17 išsaugant buvusią
elementų tvarką.
Elemento įterpimas į masyvo pradžią arba į pasirinktą vietą, kai buvusi elementų
išdėstymo tvarka yra svarbi (2)

Atkreipti dėmesį į tai, kad elementai traukiami dešinėn pradedant nuo paskutinio,
t.y. ciklas vykdomas keičiant ciklo kintamąjį mažėjimo kryptimi. Kitaip būtų
sugadinta dalis masyvo reikšmių. Beje, paskutiniai du algoritmai tinka masyvo
elementams įterpti ir į masyvo pradžią, ir į pasirinktą vietą, ir į pabaigą. Įterpiant į
masyvo pabaigą, ciklo veiksmai neatliekami, nes netenkinama salyga i > k.
Vieno masyvo reikšmių įterpimas į kitą masyvą, kai buvusi elementų išdėstymo
tvarka yra svarbi (1)

Taikydami išnagrinėtą algoritmą daug kartų, galėtume įterpti kitą masyvą,


tačiau tai būtų labai neefektyvu. Tarkime turime du masyvus M ir P.
Masyvo P reikšmes reikia įterpti į masyvą M.
Vieno masyvo reikšmių įterpimas į kitą masyvą, kai buvusi elementų išdėstymo
tvarka yra svarbi (2)

 Įterpimo algoritmas nėra labai sudėtingas, tačiau


reikia labai apgalvoti veiksmus.
1. Pirmiausia patikriname ar masyve M užteks
vietos.
2. Masyvas M padidinamas pridedant kP vietų.
3. Masyvo M reikšmės, pradedant M[kur],
paslenkamos į dešinę per kP vietų.
4. Masyvo P reikšmės perrašomos į masyvą M.
Vieno masyvo reikšmių įterpimas į kitą masyvą, kai buvusi elementų išdėstymo
tvarka yra svarbi (3)

Pastaba. Nepamirškite, kad slinkti reikia nuo elemento, kurio indeksas didesnis, ir tai daryti
indekso mažėjimo tvarka, o naujas reikšmes į masyvą įrašyti įprasta tvarka.
Elementų šalinimas iš masyvo (1)

 Tarkime turime taip aprašytą masyvą M:

Elemento šalinimo iš masyvo veiksmai priklauso nuo to, kurioje masyvo


vietoje yra tas elementas. Jei elementasyra paskutinis, pakaks tik sutrumpinti
masyvą, t.y. sumažinti kintamojo n reikšmę vienetu:

Jei buvusi masyvo elementų išdėstymo tvarka nėra svarbi, o šalinamas tik vienas
elementas, tai paskutinį masyvo elementą galima perkelti į šalinamojo vietą, o
masyvo elementų skaičių sumažinti vienetu;
Elementų šalinimas iš masyvo (2)

Jei buvusi elementų tvarka yra svarbi, tai, šalinant ne paskutinį masyvo elementą, dalį
masyvo elementų teks paslinkti į kairę.
Elementų šalinimas iš masyvo (3)

 Masyvo dalies šalinimas. Norint pašalinti


kelis iš eilės einanačius masyvo elementus,
reikės nurodyti, nuo kurio elemento ir kiek jų
šalinsime. Elementų, likusius dešnėje (jei tokių
bus), teks paslinkti į kairę.
 Pavyzdys. Tarkime, reikia pašalinti keturis
masyvo M elementus pradedant trečiuoju:
Elementų šalinimas iš masyvo (4)

 Neperžengdami masyvo ribų, jo elementus


paslinkome per kiek vietų kairėn. Paskui
suamžinome masyvo dydįkiek elementais.
Šiuos veiksmus užrašytume taip:

Labai svarbu sekti, kad nepašalintume daugiau masyvo elementų, negu galima.
Todėl prieš šalinant būtina patikrinti ir prireikus apskaičiuoti naują kiek reikšmę:
Elementų šalinimas iš masyvo (5)

 Funkciją galima užrašyti taip:


Paieška sutvarkytame masyve (1)

 Norint surikiuoti masyvą reikia atlkti labai daug veiksmų.


Dažnai tai yra naudinga, nes su tokiu masyvu daug
paprasčiau dirbti. Tarkime masyvas surikiuotas didėjimo
tvarka. Tada labai nesunku rasti didžiausią (mažiausią)
jo elementą, atsakyti kiek kartų pasikartoja viena ar kita
reikšmė. Palengvėja ir paieška masyve, nes galima
naudoti vieną efektyviausių paieškų – dvejetainę
paiešką, kai ieškant elementų skaičius dalijamas pusiau.
Sutvarkytame masyve, kurį sudaro 1000 elementų,
paieškai atlikti turi pakakti 10 iteracijų (kartojimų), o
masyve, kurį saudaro milijonas elementų – apie 20
iteracijų.
Paieška sutvarkytame masyve (2)

 Paieškos algoritmas. Turime surikiuotą masyvą didėjimo


(mažėjimo) tvarka. Masyvo pradžios indeksas pr, o pabaigos
indeksas pb. Norime rasti elemento, kurio reikšmė r, indeksą.
 Patikriname, ar reikšmė neperžengia masyvo ribų. Jei
peržiangia, paieškos neatliksime, masyve tokio elemento nėra.
 Kol apatinis rėžis susilygins su viršutiniu, ieškome:
 dalijame masyvą pusiau ir gauname vidurinę reikšmę,
 jei vidurinė reikšmė ne mažesnė už ieškomąją, ieškome kairėje
masyvo dalyje, priešingu atveju – dešinėje. Tereikia perstumti vieną
iš rėžių.
 Baigę paiešką, patikriname, ar radome tinkamą reikšmę, nes
ieškomos reikšmės masyve gali ir nebūti.
Paieška sutvarkytame masyve (3)

You might also like