/* LISTARR.CPP Esimerkki (yksisuuntaisen) listan toteuttamisesta taulukon avulla. Kaksi esimerkki„ mahdollisuuksista k„yd„ lista kokonaan l„pi. joko: for (c=l.first(); !l.out(); c=l.next() ) -> k„yt„ c ?? tai: for (l.tobegin(); !l.out(); l.forward() ) -> k„yt„ l.current() Ei tapahdu "vahinkoa", vaikka listaa yritet„„n k„ytt„„ liian pitk„lle. vl 6.11.1993 Teht„vi„ 1) Peri luokasta luokka cList2, joka on kaksisuuntainen ja jossa voidaan siis liikkua kumpaankin suuntaan. 2) Toteuta list "oikeana" dynaamisena listana. 3) Peri teht„v„n 2 listasta 2-suuntainen lista. Onnistuuko kunnolla? 4) Mit„ t„ss„ pit„„ muuttaa, mik„li halutaan k„ytt„„ muun tyyppisi„ listan alkioita? Kokeile reaalilukuja ja piste-luokan alkioita! (Piste-luokka ks. MYSTREAM.CPP) 5) Ent„ jos halutaan k„ytt„„ samassa ohjelmassa kahta tai useampaa eri listaan menev„„ tyyppi„? */ #include inline int inside(int a,int x,int b) // x v„lille [a,b], jos b= MAX_ELEM ) return 1; data[nelem++] = p; return 0; } }; /* cList */ #define VIIVA "------------------------------------------------------------\n" /****************************************************************************/ int main(void) { cout << VIIVA; cList lc; lc.add('a'); lc.add('b'); lc.add('c'); lc.add('d'); for (char c=lc.first(); !lc.out(); c=lc.next() ) cout << c << " "; cout << c << "\n" << VIIVA; for (lc.tobegin(); !lc.out(); lc.forward() ) cout << lc.current() << " "; cout << lc.current() << "\n" << VIIVA; return 0; }