logo

Tablice wielowymiarowe w C

Warunek wstępny: Tablice w C

Tablicę wielowymiarową można nazwać tablicą tablic przechowujących jednorodne dane w formie tabelarycznej. Dane w tablicach wielowymiarowych są zazwyczaj przechowywane w pamięci w kolejności od głównych wierszy.



The ogólna forma deklarowania tablic N-wymiarowych pokazano poniżej.

Składnia:

data_type array_name[size1][size2]....[sizeN];>
  • typ danych : Typ danych, które mają być przechowywane w tablicy.
  • nazwa_tablicy : Nazwa tablicy.
  • rozmiar1, rozmiar2,…, rozmiarN : Rozmiar każdego wymiaru.

Przykłady :



jak zwrócić tablicę w Javie
  Two dimensional array:   int two_d[10][20];   Three dimensional array:   int three_d[10][20][30];>

Rozmiar tablic wielowymiarowych:

Całkowitą liczbę elementów, które można przechowywać w tablicy wielowymiarowej, można obliczyć, mnożąc rozmiar wszystkich wymiarów.
Na przykład:

  • Tablica int x[10] [20] może przechowywać łącznie (10*20) = 200 elementów.
  • Podobnie tablica int x[5] [10] [20] może przechowywać łącznie (5*10*20) = 1000 elementów.

Aby otrzymać rozmiar tablicy w bajtach, mnożymy rozmiar pojedynczego elementu przez całkowitą liczbę elementów w tablicy.
Na przykład:

  • Rozmiar tablicy int x[10] [20] = 10 * 20 * 4 = 800 bajtów. (gdzie int = 4 bajty)
  • Podobnie wielkość int x[5] [10] [20] = 5 * 10 * 20 * 4 = 4000 bajtów. (gdzie int = 4 bajty)

Najczęściej używanymi formami tablicy wielowymiarowej są:



  1. Tablica dwuwymiarowa
  2. Trójwymiarowa tablica

Tablica dwuwymiarowa w C

A tablica dwuwymiarowa Lub Tablica 2D w C jest najprostszą formą tablicy wielowymiarowej. Możemy wizualizować tablicę dwuwymiarową jako tablicę jednowymiarowych tablic ułożonych jedna nad drugą, tworzących tabelę z wierszami „x” i kolumnami „y”, gdzie numer wiersza mieści się w zakresie od 0 do (x-1), a numer kolumny waha się od 0 do (y-1).

graficzna reprezentacja tablicy dwuwymiarowej

Graficzne przedstawienie dwuwymiarowej tablicy o wymiarach 3 x 3

Deklaracja tablicy dwuwymiarowej w C

Podstawowa forma deklarowania tablicy 2D za pomocą X rzędy i I kolumny w C pokazano poniżej.

Składnia:

data_type array_name[x][y];>

Gdzie,

  • typ danych: Typ danych, które mają być przechowywane w każdym elemencie.
  • nazwa_tablicy: nazwa tablicy
  • X: Liczba rzędów.
  • I: Liczba kolumn.

Możemy zadeklarować dwuwymiarową tablicę liczb całkowitych, powiedzmy „x”, zawierającą 10 wierszy i 20 kolumn jako:

Przykład:

int x[10][20];>

Uwaga: W przypadku tego typu deklaracji tablicy przydzielana jest pamięć na stosie, a rozmiar tablicy powinien być znany w czasie kompilacji, tj. rozmiar tablicy jest stały. Tablicę możemy również utworzyć dynamicznie w C, korzystając z wymienionych metod Tutaj.

Inicjalizacja tablic dwuwymiarowych w C

Różne sposoby inicjowania tablicy 2D są następujące:

  1. Korzystanie z listy inicjatorów
  2. Korzystanie z pętli

1. Inicjalizacja tablicy 2D przy użyciu listy inicjatorów

Możemy zainicjować tablicę 2D w C, używając listy inicjatorów, jak pokazano w poniższym przykładzie.

Pierwsza metoda:

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

Powyższa tablica ma 3 wiersze i 4 kolumny. Elementy w nawiasach klamrowych od lewej do prawej są przechowywane w tabeli również od lewej do prawej. Elementy zostaną wypełnione w tablicy w kolejności: pierwsze 4 elementy od lewej zostaną wypełnione w pierwszym rzędzie, kolejne 4 elementy w drugim rzędzie i tak dalej.

Druga metoda (lepsza) :

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

Ten typ inicjalizacji wykorzystuje zagnieżdżone nawiasy klamrowe. Każdy zestaw nawiasów wewnętrznych reprezentuje jeden rząd. W powyższym przykładzie są w sumie trzy rzędy, więc istnieją trzy zestawy nawiasów wewnętrznych. Zaletą tej metody jest to, że jest łatwiejsza do zrozumienia.

Uwaga: Liczba elementów na liście inicjatorów powinna być zawsze mniejsza lub równa całkowitej liczbie elementów w tablicy.

Możemy również zadeklarować tablicę bez definiowania rozmiaru wiersza, jeśli używamy inicjalizacji listy. W tym przypadku kompilator automatycznie wydedukuje rozmiar tablicy:

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

Nadal obowiązkowe jest określenie liczby kolumn.

2. Inicjalizacja tablicy 2D za pomocą pętli

Możemy użyć dowolnej pętli C, aby zainicjować każdy element tablicy 2D jeden po drugim, jak pokazano w poniższym przykładzie.

Przykład:

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 jest przydatna, gdy wartości każdego elementu mają jakąś sekwencyjną relację.

Dostęp do elementów tablic dwuwymiarowych w C

Dostęp do elementów w tablicach 2D można uzyskać za pomocą indeksów wierszy i indeksów kolumn. Do każdego elementu tablicy 2D można się odwoływać poprzez:

Składnia:

array_name[i][j]>

Gdzie,

  • I: Indeks wiersza.
  • J: Indeks kolumny.

Przykład:

int x[2][1];>

Powyższy przykład przedstawia element występujący w trzecim wierszu i drugiej kolumnie.

zablokowane kontakty

Notatka : W tablicach, jeśli rozmiar tablicy wynosi N. Jej indeks będzie wynosić od 0 do N-1. Dlatego dla indeksu wiersza 2 numer wiersza wynosi 2+1 = 3. Aby wyprowadzić wszystkie elementy tablicy dwuwymiarowej, możemy użyć zagnieżdżonych pętli for. Będziemy potrzebować dwóch Do pętle. Jeden do przechodzenia przez wiersze, a drugi do przechodzenia przez kolumny.

Aby wydrukować całą tablicę, uzyskujemy dostęp do każdego elementu jeden po drugim za pomocą pętli. Kolejność przechodzenia może być rzędu głównego wiersza lub kolejności głównego kolumny, w zależności od wymagań. Poniższy przykład ilustruje przechodzenie między głównymi wierszami tablicy 2D.

Przykład:

C




// 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>

>

>

Wyjście

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>

Złożoność czasowa: O(N*M) , gdzie N(tutaj 3) i M(tutaj 2) to odpowiednio numery wierszy i kolumn.

Złożoność przestrzenna:O(1)

Jak tablice 2D są przechowywane w pamięci?

Elementy tablicy 2-D muszą być przechowywane w pamięci w sposób ciągły. Ponieważ komputery mają liniowe adresy pamięci, tablice 2-D muszą być linearyzowane, aby umożliwić ich przechowywanie. Linearyzację elementów tablicy można uzyskać na dwa sposoby:

  • Rząd-główny- Technika linearyzacji przechowuje najpierw pierwszy wiersz tablicy, następnie drugi wiersz tablicy, następnie trzeci wiersz i tak dalej. (tj. elementy są przechowywane wierszowo. Wiersze są zestawiane na podstawie kolumn)
  • Kolumna główna – Ta technika linearyzacji przechowuje najpierw pierwszą kolumnę, potem drugą kolumnę, potem trzecią kolumnę itd. (elementy są przechowywane kolumnowo. Kolumny są wyszczególniane na podstawie wierszy)

Komputer nie śledzi adresów wszystkich elementów tablicy, ale śledzi adres podstawowy (adres początkowy pierwszego elementu) i w razie potrzeby oblicza adresy elementów.

Więcej informacji znajdziesz w artykule – Obliczanie adresu elementu 1-D, 2-D i 3-D

Tablica trójwymiarowa w C

A Trójwymiarowa tablica Lub 3D array w C to zbiór tablic dwuwymiarowych. Można to zwizualizować jako wiele tablic 2D ułożonych jedna na drugiej.

graficzna reprezentacja tablicy trójwymiarowej

Graficzne przedstawienie trójwymiarowej tablicy o wymiarach 3 x 3 x 3

Deklaracja tablicy trójwymiarowej w C

Możemy zadeklarować tablicę 3D za pomocą X Tablice 2D, z których każda ma I rzędy i z kolumny, korzystając ze składni pokazanej poniżej.

Składnia:

data_type array_name[x][y][z];>
  • typ danych: Typ danych, które mają być przechowywane w każdym elemencie.
  • nazwa_tablicy: nazwa tablicy
  • X: Liczba tablic 2D.
  • I: Liczba wierszy w każdej tablicy 2D.
  • z: Liczba kolumn w każdej tablicy 2D.

Przykład:

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

Inicjalizacja tablicy trójwymiarowej w C

Inicjalizacja w tablicy 3D przebiega tak samo, jak w przypadku tablic 2D. Różnica polega na tym, że wraz ze wzrostem liczby wymiarów wzrasta także liczba zagnieżdżonych nawiasów klamrowych.

Tablicę 3D w C można zainicjować za pomocą:

  1. Lista inicjatorów
  2. Pętle

Inicjalizacja tablicy 3D przy użyciu listy inicjatorów

Metoda 1 :

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};>

Metoda 2 (lepsza) :

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} }  };>

Ponownie, podobnie jak tablice 2D, możemy również zadeklarować tablice 3D bez określania rozmiaru pierwszych wymiarów, jeśli do inicjalizacji używamy listy inicjatorów. Kompilator automatycznie wydedukuje rozmiar pierwszego wymiaru. Ale nadal musimy określić resztę wymiarów.

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

Inicjalizacja tablicy 3D za pomocą pętli

Jest również podobny do tablicy 2D z jeszcze jedną zagnieżdżoną pętlą umożliwiającą dostęp do jeszcze jednego wymiaru.

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); } } }>

Dostęp do elementów w tablicy trójwymiarowej w C

Dostęp do elementów w tablicach 3D jest również podobny do dostępu do tablic 2D. Różnica polega na tym, że dla jednego dodatkowego wymiaru w tablicach 3D musimy użyć trzech pętli zamiast dwóch.

Składnia:

array_name[x][y][z]>

Gdzie,

  • X: Indeks tablicy 2D.
  • I: Indeks tego wiersza tablicy 2D.
  • z: Indeks tej kolumny tablicy 2D.

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);> }>

>

>

niestabilne słowo kluczowe Java
Wyjście

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>

W podobny sposób możemy tworzyć tablice o dowolnej liczbie wymiarów. Jednak złożoność wzrasta również wraz ze wzrostem liczby wymiarów. Najczęściej używaną tablicą wielowymiarową jest tablica dwuwymiarowa.

Tablice są również ściśle powiązane ze wskaźnikami w języku C. Aby dowiedzieć się więcej o związku tablic ze wskaźnikami w C, zobacz Ten artykuł.