logo

Večdimenzionalni nizi v C

Predpogoj: Nizi v C

Večdimenzionalno matriko lahko imenujemo matrika matrik, ki hrani homogene podatke v obliki tabele. Podatki v večdimenzionalnih nizih so v pomnilniku običajno shranjeni v vrstnem redu.



The splošna oblika deklariranja N-dimenzionalnih nizov je prikazano spodaj.

Sintaksa:

data_type array_name[size1][size2]....[sizeN];>
  • data_type : vrsta podatkov, ki bodo shranjeni v matriki.
  • ime_matrike : ime matrike.
  • velikost1, velikost2,…, velikostN : Velikost vsake dimenzije.

Primeri :



df loc
  Two dimensional array:   int two_d[10][20];   Three dimensional array:   int three_d[10][20][30];>

Velikost večdimenzionalnih nizov:

Skupno število elementov, ki jih je mogoče shraniti v večdimenzionalni niz, je mogoče izračunati z množenjem velikosti vseh dimenzij.
Na primer:

  • Niz int x[10][20] lahko shrani skupaj (10*20) = 200 elementov.
  • Podobno niz int x[5][10][20] lahko shrani skupaj (5*10*20) = 1000 elementov.

Da bi dobili velikost matrike v bajtih, pomnožimo velikost posameznega elementa s skupnim številom elementov v matriki.
Na primer:

  • Velikost niza int x[10][20] = 10 * 20 * 4 = 800 bajtov. (kjer int = 4 bajti)
  • Podobno velikost int x[5][10][20] = 5 * 10 * 20 * 4 = 4000 bajtov. (kjer int = 4 bajti)

Najpogosteje uporabljene oblike večdimenzionalne matrike so:



  1. Dvodimenzionalni niz
  2. Tridimenzionalni niz

Dvodimenzionalni niz v C

A dvodimenzionalni niz oz 2D niz v C je najpreprostejša oblika večdimenzionalne matrike. Dvodimenzionalno matriko si lahko predstavljamo kot matriko enodimenzionalnih matrik, razporejenih ena nad drugo, ki tvorijo tabelo z vrsticami 'x' in stolpci 'y', kjer se številka vrstice giblje od 0 do (x-1) in številka stolpca se giblje od 0 do (y-1).

grafični prikaz dvodimenzionalne matrike

Grafična predstavitev dvodimenzionalne matrike velikosti 3 x 3

Deklaracija dvodimenzionalne matrike v C

Osnovna oblika deklariranja 2D polja z x vrstice in in stolpcev v C je prikazano spodaj.

Sintaksa:

data_type array_name[x][y];>

kje,

  • data_type: Vrsta podatkov, ki bodo shranjeni v vsakem elementu.
  • ime_matrike: ime matrike
  • x: Število vrstic.
  • in: Število stolpcev.

Dvodimenzionalno matriko celih števil, recimo 'x', z 10 vrsticami in 20 stolpci lahko deklariramo kot:

primer:

int x[10][20];>

Opomba: Pri tej vrsti deklaracije je matriki dodeljen pomnilnik v skladu, velikost matrike pa mora biti znana v času prevajanja, tj. velikost matrike je fiksna. Z uporabo omenjenih metod lahko tudi dinamično ustvarimo niz v C tukaj

Inicializacija dvodimenzionalnih nizov v C

Različni načini, na katere je mogoče inicializirati 2D polje, so naslednji:

  1. Uporaba seznama inicializatorjev
  2. Uporaba zank

1. Inicializacija 2D polja z uporabo Initializer List

2D matriko lahko inicializiramo v C z uporabo seznama inicializatorjev, kot je prikazano v spodnjem primeru.

Prva metoda:

int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}>

Zgornji niz ima 3 vrstice in 4 stolpce. Elementi v oklepajih od leve proti desni so shranjeni v tabeli tudi od leve proti desni. Elementi bodo v matriki zapolnjeni po vrstnem redu: prvi 4 elementi z leve bodo zapolnjeni v prvi vrstici, naslednji 4 elementi v drugi vrsti itd.

Druga metoda (boljša) :

int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};>

Ta vrsta inicializacije uporablja ugnezdene oklepaje. Vsak niz notranjih naramnic predstavlja eno vrstico. V zgornjem primeru so skupaj tri vrstice, tako da obstajajo trije nizi notranjih naramnic. Prednost te metode je, da jo je lažje razumeti.

Opomba: Število elementov na seznamu inicializatorja mora biti vedno manjše ali enako skupnemu številu elementov v matriki.

Matriko lahko deklariramo tudi brez definiranja velikosti vrstice, če uporabljamo inicializacijo seznama. Prevajalnik bo v tem primeru samodejno ugotovil velikost matrike:

data_type array_name[][y] = {...} ;>

Še vedno je obvezno določiti število stolpcev.

2. Inicializacija 2D polja z uporabo zank

Uporabimo lahko katero koli zanko C za inicializacijo vsakega člana 2D niza enega za drugim, kot je prikazano v spodnjem primeru.

primer:

int x[3][4]; for(int i = 0; i <3; i++){ for(int j = 0; j < 4; j++){ x[i][j] = i + j; } }>

Ta metoda je uporabna, kadar so vrednosti vsakega elementa v nekem zaporednem razmerju.

Dostop do elementov dvodimenzionalnih nizov v C

Do elementov v 2D nizih se dostopa z uporabo indeksov vrstic in indeksov stolpcev. Vsak element v 2D nizu se lahko sklicuje na:

Sintaksa:

array_name[i][j]>

kje,

  • jaz: Indeks vrstice.
  • j: Indeks stolpca.

primer:

int x[2][1];>

Zgornji primer predstavlja element v tretji vrstici in drugem stolpcu.

Opomba : V nizih, če je velikost niza N. Njegov indeks bo od 0 do N-1. Zato je številka vrstice indeksa 2 2+1 = 3. Za izhod vseh elementov dvodimenzionalne matrike lahko uporabimo ugnezdene zanke for. Potrebovali bomo dva ' za ‘ zanke. Ena za prečkanje vrstic in druga za prečkanje stolpcev.

Za tiskanje celotne matrike dostopamo do vsakega elementa enega za drugim z uporabo zank. Vrstni red prečkanja je lahko vrstni red po vrsti ali po stolpcu, odvisno od zahteve. Spodnji primer prikazuje prehod po glavni vrstici 2D matrike.

primer:

C


kako pretvoriti niz v celo število v Javi



// C Program to print the elements of a> // Two-Dimensional array> #include> int> main(>void>)> {> >// an array with 3 rows and 2 columns.> >int> x[3][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };> >// output each array element's value> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <2; j++) {> >printf>(>'Element at x[%i][%i]: '>, i, j);> >printf>(>'%d '>, x[i][j]);> >}> >}> >return> (0);> }> // This code is contributed by sarajadhav12052009>

>

>

Izhod

Element at x[0][0]: 0 Element at x[0][1]: 1 Element at x[1][0]: 2 Element at x[1][1]: 3 Element at x[2][0]: 4 Element at x[2][1]: 5>

Časovna zahtevnost: O(N*M) , kjer sta N(tukaj 3) in M(tukaj 2) številu vrstic oziroma stolpcev.

Prostorska kompleksnost: O(1)

Kako so 2D nizi shranjeni v pomnilniku?

Elemente dvodimenzionalne matrike je treba v pomnilniku shranjevati neprekinjeno. Ker imajo računalniki linearne pomnilniške naslove, morajo biti 2-D nizi linearizirani, da se omogoči njihovo shranjevanje. Linearizacijo elementov polja lahko dosežete na dva načina:

  • vrstica-dur- Tehnika linearizacije najprej shrani prvo vrstico matrike, nato drugo vrstico matrike, nato tretjo vrstico in tako naprej. (tj. elementi so shranjeni po vrsticah. Vrstice so navedene na podlagi stolpcev)
  • Stolpec-glavni – Ta tehnika linearizacije shrani najprej prvi stolpec, nato drugi stolpec, nato tretji stolpec in tako naprej, tj. (elementi so shranjeni po stolpcih. Stolpci so navedeni na podlagi vrstic)

Računalnik ne sledi naslovom vseh elementov matrike, ampak sledi osnovnemu naslovu (začetnemu naslovu prvega elementa) in po potrebi izračuna naslove elementov.

Če želite izvedeti več, glejte članek - Izračun naslova elementa 1-D, 2-D in 3-D

Tridimenzionalni niz v C

A Tridimenzionalni niz oz 3D array v C je zbirka dvodimenzionalnih nizov. Lahko si ga predstavljamo kot več 2D nizov, ki so zloženi drug na drugega.

grafični prikaz tridimenzionalne matrike

Grafična predstavitev tridimenzionalne matrike velikosti 3 x 3 x 3

Deklaracija tridimenzionalne matrike v C

3D niz lahko deklariramo z x 2D polja, ki imajo vsaka in vrstice in z stolpcev z uporabo spodaj prikazane sintakse.

Sintaksa:

json iz predmeta java
data_type array_name[x][y][z];>
  • data_type: Vrsta podatkov, ki bodo shranjeni v vsakem elementu.
  • ime_matrike: ime matrike
  • x: Število 2D nizov.
  • in: Število vrstic v vsakem 2D nizu.
  • z: Število stolpcev v vsaki 2D matriki.

primer:

int array[3][3][3];>

Inicializacija tridimenzionalne matrike v C

Inicializacija v 3D nizih je enaka kot pri 2D nizih. Razlika je v tem, da se poveča število dimenzij, zato se poveča tudi število ugnezdenih oklepajev.

3D niz v C je mogoče inicializirati z uporabo:

  1. Seznam inicializatorjev
  2. Zanke

Inicializacija 3D matrike s seznamom inicializatorjev

1. metoda :

int x[2][3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};>

2. način (boljši) :

int x[2][3][4] =   {   { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} },  { {12,13,14,15}, {16,17,18,19}, {20,21,22,23} }  };>

Še enkrat, tako kot 2D-matrike, lahko tudi 3D-matrike prijavimo brez podajanja velikosti prvih dimenzij, če za inicializacijo uporabljamo seznam inicializatorjev. Prevajalnik bo samodejno izpeljal velikost prve dimenzije. Še vedno pa moramo določiti preostale dimenzije.

data_type array_name[][y][z] = {....};>

Inicializacija 3D polja z uporabo zank

Prav tako je podoben kot pri 2D nizu z eno dodatno ugnezdeno zanko za dostop do dodatne dimenzije.

int x[2][3][4]; for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { for (int k=0; k<4; k++) { x[i][j][k] = (some_value); } } }>

Dostop do elementov v tridimenzionalni matriki v C

Dostopanje do elementov v nizih 3D je podobno kot pri nizih 2D. Razlika je v tem, da moramo uporabiti tri zanke namesto dveh zank za eno dodatno dimenzijo v 3D nizih.

Sintaksa:

array_name[x][y][z]>

kje,

  • x: Indeks 2D niza.
  • in: Indeks te 2D matrične vrstice.
  • z: Indeks tega stolpca 2D matrike.

C




// C program to print elements of Three-Dimensional Array> #include> int> main(>void>)> {> >// initializing the 3-dimensional array> >int> x[2][3][2] = { { { 0, 1 }, { 2, 3 }, { 4, 5 } },> >{ { 6, 7 }, { 8, 9 }, { 10, 11 } } };> >// output each element's value> >for> (>int> i = 0; i <2; ++i) {> >for> (>int> j = 0; j <3; ++j) {> >for> (>int> k = 0; k <2; ++k) {> >printf>(>'Element at x[%i][%i][%i] = %d '>, i,> >j, k, x[i][j][k]);> >}> >}> >}> >return> (0);> }>

>

>

Izhod

Element at x[0][0][0] = 0 Element at x[0][0][1] = 1 Element at x[0][1][0] = 2 Element at x[0][1][1] = 3 Element at x[0][2][0] = 4 Element at x[0][2][1] = 5 Element at x[1][0][0] = 6 Element at x[1][0][1] = 7 Element at x[1][1][0] = 8 Element at x[1][1][1] = 9 Element at x[1][2][0] = 10 Element at x[1][2][1] = 11>

Na podobne načine lahko ustvarimo nize s poljubnim številom dimenzij. Vendar pa se z večanjem števila dimenzij povečuje tudi kompleksnost. Najpogosteje uporabljena večdimenzionalna matrika je dvodimenzionalna matrika.

Tudi polja so tesno povezana s kazalci v jeziku C. Če želite izvedeti več o razmerju nizov s kazalci v C, glejte to Članek.