egy sor mutató

„Ne nézd az egység az összesített, de az egységesség a szétválás.”
Kozma bárok.

Egy sor mutató, mint egy adattípust, és mint adatstruktúra


Egy sor mutató (MU) - az elemi adatszerkezet, ahol a különbség jelenik meg, a fizikai és a logikai sorrendjét az elemek. Eljárás rendezésére adatok már világos, a meghatározás: egy tömb, melynek minden eleme tartalmaz egy mutatót egy változó (objektum).







egy sor mutató

Ábra. 62.1. A különbség a tömb mutatókat - típusa és adatstruktúra

Ha meg van írva szempontjából összefüggésben definíciójában találunk, például

P változó kell érteni, mint egy tömb (Step []), minden eleme, amely egy mutató egy változó típusú kettős (működés *). P változó értéke egy sor mutató, mint egy adattípus, de ez nem olyan adatszerkezet. Hogy átalakítsa a adatstruktúra kell kiegészíteni ukazuemymi változók és mutatók (kötvények).

A különböző lehetőségek végrehajtásához tömbök pointerek felmerül több okból is:

· C s tömb mutató, változók és ukazuemye hivatkozások (pointerek) lehet statikusan (a program), vagy dinamikusan létrehozott végrehajtás során;

· Kétszeres értelmezése a mutató, mint egy mutató egy külön változó, és egy sor változó (string), akkor létrehozhat egydimenziós LED - tömbök mutató változók és kétdimenziós - tömbök mutatókat tömbök (sorok) a változók;

· Ukazuemye változó lehet „tulajdon” az adatok miatt, de egy sor mutató, és a kifejezés változók (objektumok), amelyek egy részét más adatszerkezeteket.

A fő nehézség abban rejlik, hogy minden esetben ugyanazt a típusú adatok és egy bizonyos típusú adatstruktúrát a környezet határozza meg a használatuk a programban.

adattípusok munka során használt tömbökkel pointerek


Az egyik típusú adatok már említett bennünket - ez egy tömb mutató, változó típusa int * p []. Ezen kívül használja még egy másik típusa int ** pp. amely lehet meghatározni általánosságban mint egy mutatót egy mutatót.

Ábra. Június 2 0,2. A különböző értelmezések adattípus int ** pp

Emlékezzünk, hogy a C-két interpretációja a mutató helyzetben, megkülönböztetni, hogy melyik program szövege csak akkor használható, megjelenésében a műveleteket végezni (vagyis csak az alkalmazási céljának):

· A hagyományos értelmezése a mutatót egy hivatkozást önálló változó felel meg a működését a mutató indirekció * pp;

A mutató egy mutató oly módon teszi akár négy értelmezéseket. Ezen túlmenően, ezek mindegyikére kell állítani (inicializált) saját adatszerkezet. A helyzetet súlyosbítja az a tény, hogy a megfelelő adatstruktúrák és műveletek biztosítania kell, a programozó (fordító nem ezt).

int a = 5, b = 10; int * p = a; int ** pp = p;

int a [10] = 5, b [10] = 10; int * p = a; int ** pp = p;

A (int i = 0; i<10;i++) (*pp)[i]=0;


A második lehetőség az is elég egzotikus - egy mutató a mutató egy lineáris tömb. A kifejezések, amelyeket használnak ilyen adatstruktúra tartalmaz prioritást zárójelben indirekció működését az első szinten megelőzi az indexelési művelet az első.







Más megvalósítási módok szerint, int ** adattípus felhasznált tömbök mutatók. Klasszikus értelmezése - mutató egy tömb mutatókat az egyes tárgyak segítségével a természetes rendje műveletek * p [i] eléréséhez ukazuemym tárgyakat.

A (int s = 0, i = 0; i<10;i++) s=s+*pp[i];

Egy sor mutató változók lineáris elrendezések kétdimenziós adatszerkezetet, és használja a kettős indexelés. Funkcionálisan ez egyenértékű egy kétdimenziós tömbben.

A (int s = 0, i = 0; i<3;i++)

A (int j = 0; j<4;j++) s=s+pp[i][j];

A statikus és dinamikus tömbök mutatók

Egy másik forrás a sokszínűség - módszer kialakítására a fenti adatszerkezeteket. A statikus tömb pointerek során keletkező fordítás: a változók (a tömb mutatókat és ukazuemye változók) meghatározása statikusan, mint egy hagyományos nevű változók és mutatók inicializáljuk. Az adatstruktúra, amelyet közvetlenül a kódot, és „kész”.

for (i = 0; i<19; i++) pd[i] = &d[i];

Végül, ha a mutató tömb van kialakítva, mint egy dinamikus adatszerkezet, dinamikus tömb mutató alatt jön létre, a program működését. Működés, mint egy új visszaad egy pointert tartalmazó memória mutatókat azaz int típusú **. amely egy változóban tároljuk az azonos típusú.

pp = newint * [20]; // memória tömb mutató

for (i = 0; i<19; i++)

pp [i] = p; // lehet PP [i] = new int; * Pp [i] = i;


Egy sor mutató. Fizikai és logikai sorrendben

Amikor dolgozik egy sor mutató használt két kontextusban:

- pp [i] -i-edik index a tömbben;

- * Pp [i] az az érték, az i-edik változó ukazuemoy.

Algoritmusok dolgozik egy sor mutató, és a szokásos sor kifelé nagyon hasonló. A különbség az, hogy az elhelyezés adatokat egy hagyományos tömb a fizikai rend a sorozat memória, és egy sor mutató lehetővé teszi, hogy létrehoz a logikai sorrendjét az elemek összhangban mutatókat hogy keresse meg őket. Ezután a változás szekvencia (befogadás, kirekesztés, rendelés permutáció), amely a szokásos tömb mozgatni maguk az elemek, egy sor mutató kell kísérnie műveletek mutatók nekik. Nyilvánvaló előnyök származnak ha ukazuemye változók önmagukban elég nagy, vagy mozgatni őket lehetetlen bármilyen okból (például azok említett más a program). Az összehasonlítás rendezni funkció tömb és a tömb a mutatók.

// --- Tömbök és a tömb mutató

void sort1 (kettős d [], int sz)

A (k = 0, i = 0; i

void sort2 (dupla * PD [])

A (k = 0, i = 0; PD [i + 1] = NULL ;! i ++)

if (* pd [i]> * pd [i +1]) // összehasonlítása ukazuemyh változók

c = pd [i]; pd [i] = PD [i + 1]; PD [i + 1] = C; k = 1;>

A dinamikus tömb mutató változók (objektumok)

Ha egy dinamikus tömb mutató hivatkozva egy sor „már ismert”, azaz ezek nem alkotnak, és ez nem tulajdonosa a változók (objektumok), célszerű lehet tekinteni, mint egy gyűjtemény, amely a saját logikai sorrendben. Példaként vegyünk egy függvényt, amely létrehozza egy sor mutató pozitív értékeket vett tömb rendezett emelkedő. Mint minden dinamikus tömb, a tömb indexek mind érvényes következtetéseket a dimenziója: ebben az esetben, akkor lehet előre kiszámítani. Az eredmény az, hogy a funkció típusa kétszeres ** - egy mutatót a dinamikus tömb a pointerek, legújabb a funkciót.

// -------- dinamikus tömb mutató

// a megrendelt pozitív eleme az eredeti tömb

kettős ** létre (kettős a [], int n)

int i. j. m; // számolja a dimenzió

for (i = 0, m = 0; i0) m ++;

kettős ** pp = új dupla * [m + 1]; // Létrehozunk egy motorvonat

for (i = 0, j = 0; i

Ha ([i]> 0) pp [J ++] = a [i]; // pozitív elem

A dinamikus tömb mutatókat tömbök változók

egy sor mutató


Ábra. Február 6 0,3. Prezentációsablont változó dimenzió DMU on line

// --- Matrix tetszőleges méretek - egy sor mutatókat tömbök

kettős ** terhelés (char nm [], int n. int m)

ha (fd == NULL) visszatérési NULL;

fscanf (fd, "..", n, m); // Reading a méretei

kettős ** pp = új dupla * [n]; // Létrehozunk a motorvonat első dimenzió

pp [i] = új dupla [m]; // létrehozása Lineáris DM (sorok)

A (int j = 0; j


Kapcsolódó cikkek