6.02.2012 Andmestruktuur: andmed teatud järjekorras (jadamisi, muul viisil ühendatud), kus järjekord ka mingit rolli mängib. Ahel kui alternatiiv massiivile andmestiku jadamisi hoidmiseks (mõned joonistatud näited tahvlile). Mida nendega teha saab. Viitmuutujast C-s - tema töö- ja kasutamise pühimõtted. Mis on magasin ja mis on järjekord - omadused, piirangud, erinevused? Poola kuju ja teisendamine NB! See ei ole kindlasti ainus pinu kasutusvaldkond, kuid samas üsna ilmekas. Ja rongid tupikteel. Proovime mõned ülesanded lahendada. Ülesanne nr. 1 Rongivagunite järjekorra muutmiseks ja ümberpööramiseks kasutatakse tupikteid, kuhu ühelt poolt saab vagunid sisselükata ja siis nad teises suunas välja tirida. Kui alguses on vagunite järjestus 1 2 3 4, siis milises järjekorras tuleks push ja pop operatsioone et vagunite järjekord saaks olema 2431? NB! Tupikteele saab sõita ainul ühelt poolt ja sellest välja sõita teisele poole. Mitte ühelgi vagunil ei ole nn tagasiteed! Ja on ainult üks tee tupikuni ja üks tee tupikust välja. Ülesanne nr. 2 Kui vagunid on alguses järjestatud 1 2 3 4 5 6, siis kas saab nad panna järjekorda 3 2 5 6 4 1 või 1 5 4 6 2 3? Kuidas? Kasuta operatsioone push ja pop. Ülesanne nr. 3 Avaldis pööratud Poola kujul e postfiksavaldis. Teisenda postfiks-kujule, kasutades järgnevalt kirjeldatud algoritmi: (5*((9*8)+(7*(4+6)))) (2*a)/((a+b)*(a-c)) Teisendusalgoritm (eeldab, et avaldises on maksimaalselt sulge): tööta märkhaaval - number kirjuta väljundisse - vasakut sulgu ignoreeri - operaator (tehtemärk) pane pinusse - parempoolse sulu puhul võta operaator pinust ja kirjuta väljundisse. Arvuta: 5 3 * 1 3 2 - + + 5 9 * 8 7 4 6 + * 2 1 3 * + * + * Arvutamisalgoritm: tööta märkhaaval - kui on arv, pane pinusse - kui on operaator, võta pinust 2 arvu, tee operaatorile vastav tehe ja kirjuta vastus pinusse. Räägin alamprogrammidest, nende väljakutsumisest, parameetritest ja pinust, kus neid hoitakse (vt link veebis).