**Tietorakenne** on tietojenkäsittelyssä esiintyvä termi, joka tarkoittaa tapaa säilöä ja käsitellä dataa tietokoneella tyypillisesti tietokoneen muistissa tietokoneohjelman suorituksen aikana. Tiedostoihin tallennetun tiedon järjestämisestä (siirtäminen, pysyvä säilytys) käytetään termiä tiedostomuoto. Säilömistä tai toiselle koneelle siirtämistä varten tietorakenteet on serialisoitava tarkoitukseen sopivassa muodossa.

Taustaa
-------

Esimerkki hajautustauluna tunnetusta tietorakenteesta.
Algoritmit riippuvat tietorakenteiden suunnittelusta. Tietorakenteen vaihtaminen ei vaikuta algoritmin *oikeellisuuteen*, mutta se voi tarjota vaihtoehtoja ja vaikuttaa operaatioiden tehokkuuteen, jolloin suorituskyky voi parantua dramaattisesti.

Matematiikassa muuttujat luokitellaan tiettyjen tärkeiden piirteiden mukaan, josta esimerkkinä jakaminen reaali- ja kompleksilukuihin tai joukkoihin arvoja. Luokittelu on vähintään yhtä tärkeää tietojen käsittelyssä ja muuttujilla, vakioilla, lausekkeilla ja aliohjelmilla on tietty tyyppi. Tyyppien lisäksi yleiskäyttöisen ohjelmointikielen on tarjottava menetelmä koostaa tietoa rakenteisiin. Rakenteet voivat vaihdella yksinkertaisista monimutkaisiin ja ne voivat olla kiinteitä tai dynaamisesti muodostettuja.

Taulukko on yksi tunnetuimmista tietorakenteista koska monissa kielissä kuten Fortran ja ALGOL se on ainoa eksplisiittisesti saatavilla oleva tietorakenne. Taulukko on homogeeninen tietorakenne, joka koostuu komponenteista, jotka ovat kaikki samaa tyyppiä (perustyyppi). Taulukkoa voi käyttää hajasaantina ja jokaiseen elementtiin voi lukea ja kirjoittaa missä tahansa järjestyksessä. Taulukossa yksittäiseen elementtiin viitataan indeksillä, joka voi olla eri tyyppiä kuin taulukon perustyyppi.

Monissa tapauksissa tarvitaan tietojen yhdistelmää esimerkiksi koordinaattijärjestelmä voi vaatia pisteelle kahta numeroa ilmaistuna tai luonnolliseen henkilöön voidaan liittää etu- ja sukunimi, syntymäpäivä ja niin edelleen. Yhdistelmätyypistä käytetään tietojenkäsittelyssä termiä tietue. Eri yhdistelmätyyppejä voi muodostaa kielestä riippuen muun muassa `struct` tai `tuple` -tyyppeinä, joissa ensimmäisessä jäsenkentät ovat nimettyjä kun taas jälkimmäisessä ne eivät ole: tämä vaikuttaa tietojen käsittelyn helppouteen.

Joukko on taulukon ja tietueen ohella perustava käsite, joka voi sisältää x kappaletta muun tyyppistä elementtiä.

Tyyppihierarkia Python 3:ssa.

Tietorakenteita
---------------

* Pino
* Jono
* Pakka
* Rengaspuskuri
* Taulukko
* Linkitetty lista
* Puu
* Hajautustaulu

Spatiaaliset tietorakenteet
---------------------------

Spatiaalinen tietorakenne on sellainen tietorakenne, jossa määrätyn etäisyysmitan perusteella lähimmän alkion hakeminen on tehokasta. Spatiaalisia tietorakenteita euklidiseen avaruuteen ovat 3D-grafiikassa paljon käytetyt **bsp-puu** ja **kd-puu**.

Katso myös
----------

* Tiedostojärjestelmä
* Luokka (ohjelmointi)

Lähteet
-------

1. ↑  Serialization and Unserialization *isocpp.org*. Viitattu 9.9.2022. (englanniksi)
2. ↑  Serialization (C#) *docs.microsoft.com*.  15.9.2021. Viitattu 9.9.2022. (englanniksi)
3. ↑  John Bullinaria: Lecture Notes for Data Structures and Algorithms (PDF) (sivu 5) *cs.bham.ac.uk*.  27.3.2019. Viitattu 8.9.2022. (englanniksi)
4. ↑  Skiena, Steven S.: *The Algorithm Design Manual*, s. 3–4,65,273. Second edition. Springer, 2008. ISBN 978-1-84800-070-4. doi:10.1007/978-1-84800-070-4.  (englanniksi)
5. 1 2 3 4 5 6 7 8 9 10 11  Wirth, Niklaus: *Algorithms + Data structures = Programs*, s. 1–6,11,16,23–33. Prentice-Hall, 1976. ISBN 0-13-022418-9. (englanniksi)
6. ↑  Defining and Instantiating Structs *doc.rust-lang.org*. Viitattu 9.9.2022. (englanniksi)
7. ↑  Data Types *doc.rust-lang.org*. Viitattu 9.9.2022. (englanniksi)

Aiheesta muualla
----------------

* Type Theory (englanniksi)

Kirjallisuutta
--------------

* Mehta, Dinesh P. & Sahni, Sartaj: *Handbook of Data Structures And Applications*. Chapman & Hall/CRC, 2005. ISBN 1-58488-435-5. (englanniksi)
* A. V. Aho, J. E. Hopcroft, J. D. Ullman: *Data Structures and Algorithms*. Addison-Wesley, 1983. ISBN 0-201-00023-7. (englanniksi)