01. Adatszerkezetek

Default book

Az adatok mennyisége, mértékegysége

Az adatok bármilyen módon tároljuk, helyezzük el őket helyet foglalnak. A helyfoglalás mértékegységére az alábbiakat használjuk:

bit - egy darab igaz-hamis állítás, az adattárolás legkisebb egysége. Kétféle értéket vehet fel egy bit mennyiségű adat.

byte (bájt) - 8 db bit. Mivel minden bit kétféle értéket vehet fel, ezért 8 bit 2*2*2*2*2*2*2*2 = 256 féle értéket vehet fel vagy másképpen ennyiféle adatot tárolhatunk nyolc biten.

Kbyte (kilobyte) - 1024 bájt = 2*2*2*2*2*2*2*2*2*2 bájt = 210 bájt

MByte  (megabyte) = 1024 Kbyte

GByte (gigabájt) = 1024 Mbyte

TByte (Terabyte) = 1024 Gbyte

Egy pár száz oldalas könyvben lévő szöveg mennyisége 100-200 kbyte

Egy telefon memóriája 32-64 GByte

A mai modern merevlemezek 1-2 Tbyte adatot tudnak tárolni.

Az adatok típusai

Az informatikában az adatok tárolása nem ömlesztve, hanem rendszer szerint történik. Az adatokat a tárolóterületeken egymás után sorban (sorfolytonosan) helyezzük el. Fontos az elhelyezett adatok típusa is, mert egy szám, egy szöveg, vagy egy logikai érték (igen-nem) több-kevesebb helyet foglal el a tárolóhelyen. Az adat által elfoglalt tárolóhely mértéke függ az illető adat típusától.

Az informatikában tehát az adatokat típusokra osztjuk és egy adott típusnak mindig ugyanannyi tárolóhelyet biztosítanak az informatikai rendszerek.( Ez a mondatom persze nem mindig igaz, mert különböző programozási nyelvek kicsit másképp kezelik a típusokat, de egy nyelven belül azért ez következetesen igaz)

Az adatok fontos tulajdonságai

  • típusa (előre megadott típusok közül választhatunk)
    • mérete (helyfoglalása) - ami általában következik a típusból
    • A típus által felvehető lehetséges értékek (értéktartomány)
  • A letárolt adat helye (címe)
  • értéke

Amikor egy programozási nyelven adatokat akarunk tárolni, akkor el kell döntenünk, hogy milyen típusokat használunk, mert minden adattípusnak vannak jellemző felhasználási területei. Amikor egy adatot tárolunk a memóriában vagy a háttértáron, akkor az adat tárolásának helyét az adat címének hívjuk.A programozás hajnalán az adatok címét közvetlenül egy memóriacímmel jelezték, de a modern programozási nyelvekben van egy adatkezelési mechanizmus, ami biztosítja azt, hogyha egy adatnak nevet adunk, akkor a rendszer gondoskodik arról, hogy az adat címe is megfelelően legyen kezelve. Ha egy adatnak nevet adtunk és a rendszerünk ismeri a program futása közben az adat címét, akkor azt az adatot később el tudjuk érni, a tartalmát ki tudjuk íratni, törölni tudjuk az értékét vagy módosítani is tudjuk.

Változó

Ha egy adatot elnevezünk és utána tudjuk módosítani az értékét, akkor azt változónak hívjuk (variable)

Konstans (Állandó)

Olyan adat, amelyet névvel nevezünk el, de a program futása során az értéke nem változik. Általában csupa nagybetűből álló kifejezéssel nevezzük el a konstansokat.

Elemi adattípusok

Logikai (boolean)

  • Mérete: 1 bit (1 byte)
  • Lehetséges értékei: Igen-nem, igaz-hamis, yes-no

Egész (Integer, int)

  • Mérete: 2 byte (4 byte a 32 bites rendszerek esetén)
  • Lehetséges értékei: -32768....0...32767 (=-28 ...0....27), egész számok (-216...+215)

Kettes komplemens számábrázolás

Az egész számok ábrázoláshoz az alábbi elvet kell követni, amit a 8 bites rendszereken mutatom be:

  • A legmagasabb helyiértékű bit az előjelbit. A szám negatív, ha az előjelbit 1-es, pozitív vagy nulla, ha az előjelbit 0.
  • Ha egy negatív számot ki akarunk számolni, akkor azt kell tudnunk, hogy a negatív szám + a pozitív komplementerét összeadva 0-át kapunk eredményül. Például:
8 bites rendszerben csak 8 bit jelent adatot.

 00000001  => 1 a tízes számrendszerben
+????????  => mi lesz a mínusz 1?
---------
 00000000

Vonjuk ki a 0-ból a +1-et, akkor mit kapunk? A -1-et.

 100000000 => 9. bit azért kell, mert a számítógépek csak a matematikához hasonló dolgot használnak.
- 00000001
----------
  11111111   => Ez lesz a -1 kettes komplemens számábrázolás esetén

 100000000
- 00000011   => +3
----------
  11111101 

Hogyan végezhető el a kivonás?
Képzeljük el, hogy 10-es számrendszerben minden 1-es helyére 9 írunk. Végezzük el a kivonást vagy az összeadást...

 100000000
- 00000099
----------
  99999901
Az eredmény 9-esei helyett is írjunk 1-et...

Hasonló módon működik minden 16, 32 bites rendszerben. A plusz egy bitről a processzorok gondoskodnak...

Lebegőpontos (Float)

  • Mérete: 5-6 byte
  • Lehetséges értékei:10-11 ....0 ......1011 nagyságrendű pozitív és negatív tizedes törtek.

Karakter (betű)

  • Mérete: 1 vagy 2 byte ( a karakterek kódolásától függően)
  • Lehetséges értékei: 256 féle vagy 65536 (=-216) féle írásjel (betű)

Szöveg (String)

  • Mérete: A szöveget alkotó karakterek hosszának összege. Általában nem lehet korlátlan méretű, de szokásosan maximált a mérete, pl: 256 karakter, 65536 karakter, stb.
  • Lehetséges értékei: tetszőleges (!) hosszúságú betűkből álló szöveg. Általában van felső korlátja.

Összetett adattípusok

Tömb

  • Definíció: Azonos típusú adatokból álló sorozat.
  • A tömb elemei: a tömböt alkotó adatok
  • A tömb indexe: egy sorszám, amely általában 0-tól a tömb elemszáma-1 -ig terjedő egész szám lehet. Általában i, j,k stb.-vel jelöljük.
  • A tömb elemeinek elérése: A tömb nevével és az indexével lehetséges. T[i]
  • A tömb mérete: A tömb elemeit alkotó adatok méreteinek az összege

A tömbök adatainak feldolgozását általában ciklusokkal oldjuk meg. A ciklusok általában a tömb első elemével indulnak és végiglépkednek a tömb összes elemén.

Egy dimenziós tömbről beszélünk, ha csak egy indexxel hivatkozunk a tömb elemeire. Ezt egy vonal mentén lévő adatokkal lehet elképzelni

Két dimenziós tömbről beszélünk, ha két indexet használunk az adatok eléréséhez. ezt egy sík pontjaival lehet ábrázolni

Rekord

  • Definíció: Különböző típusú adatokból álló adatszerkezet
  • A rekord mezői: Az adatszerkezetet alkotó adattípusok.
  • A rekord mezőinek elérése: A mezőkre a nevükkel hivatkozunk: pl. r.nev
  • A rekord mérete: A rekordot alkotó adatok méreteinek összege

Az adatbázisokban rekordokban tároljuk az összetartozó adatokat

Lista

  • Definíció: Olyan adatszerkezet, amikor a lista adatelemein kívül minden elemben van egy hivatkozás a lista következő elemére. Ezt mutatónak hívják.
  • A lista adatainak típusa: Legegyszerűbb esetben a lista azonos típusú adatokból áll, de gyakan különböző adattípusok alkotják
  • Listafej: Az a hely a memóriában, amelyet az informatikai rendszer mindig ugyanott talál meg. A listafejből egy "muttaó" mutat a lista első elemére.
  • Egy irányú lista: Ha csak az első elemtől indulva lehet bejárni a listát, azaz a lista elemeiben csak a lista következő elemére hivatkozó mutató van. A lista utolsó eleme esetén egy lehetetlen értékre hivatkozó mutató van
  • Kétirányú lista: Ha az elemekben a következő elemre és az előző elemre is hivatkozik egy mutató. 

Lista adatszerkezetet használunk például a merevlemezek fájljainak tárolásához.

Osztály

Objektum-orientált programozásnál használjuk. Az osztály hasonlít a rekordhoz, de nem csak adatokat tárolunk benne, hanem az adatok feldolgozásához használható programrészeket - metódusokat - is.

Speciális adattípusok

Mutató

  • Definíció: A memória vagy egyéb tárolóeszköz címét tároló adat. Segítségével el lehet érni a megadott helyen lévő adatot
  • Mérete: Az éppen használt fizikai (vagy logikai) eszköz címzéséhez használható adat mérete. Általában 2, 4, 8, 16 byte.

A magas szintű programozási nyelvek általában kerülik a mutatók programozó általi közvetlen használatát, mert a helytelen használat program futási hibákhoz vezet. Valójában a programok futás közben mindig mutatókat használnak csak ezt eldugják a programozók elől.

Egyes programozási nyelvek esetén (pl. C) a mutatónak is lehet típusa. Ekkor a típus egyúttal azt is jelenti, hogy milyen típusú adatra mutat az érték.

Erőforrás

  • Definíció: Speciális mutató típus. Ebben az esetben a mutató egy összetett adattípusra mutat, amely a programozási környezet vagy futtató rendszer speciális erőforrásának elérését biztosítja.

Például egy File megnyitásakor ilyen mutató áll rendelkezésünkre.