Pino vs. keko vs. lista vs. vektorit vs. ...
Olen aina vain käyttänyt taulua, mutta algoritmeihin tutustuessani olen kohdannut pinoja ja muita tietorakenteita. Milloin tulisi käyttää mitäkin? Onko taulu joskus huomattavasti huonompi ratkaisu, kuin vaikka pino?
Siis mitä ylipäätään tarkoitat käyttäneesi kun puhut taulusta? Assosiaatiotaulua, hajautustaulua, taulukkoa, tietokantataulua, vai jotain muuta?
- taulukkoa
Esimerkki:
int a[5] = {0, 1, 2, 3}; int *b = new int[10];
Sekoitat nyt eri tasoille kuuluvia käsitteitä. Algoritmien teoriassa puhutaan usein abstrakteista tietorakenteista (lista, pino, jono, prioriteettijono). Samalle rakenteelle voi olla monta erilaista toteutusta; esimerkiksi pinon voi toteuttaa taulukon tai listan avulla. Konkreettiset toteutukset taas perustuvat johonkin matalan tason rakenteisiin eli viime kädessä taulukoihin ja osoittimiin.
Olennaista on ymmärtää, mitä eri rakenteilla voi tehdä: miten tietoa lisätään, mitä tietoa voi hakea, mitkä operaatiot ovat nopeita ja mitkä hitaita.
Kiitän. Tutustuin abstraktin tietotyypin käsitteeseen ja asia selkeni.
Tietorakennetta kannattaa käyttää, jos siitä on hyötyä algoritmissa eli jos algoritmissa usein tarvittavat tietorakenteen operaatiot ovat tehokkaita.
Jotkin algoritmikirjojen tietorakenteista ovat käytännössä melko hyödyttömiä. Esimerkiksi linkitetty lista esitellään usein pitkällisesti, mutta käytännössä muuttuvan kokoinen taulukko (esim. C++:n vector) korvaa sen lähes täydellisesti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.