Emular uma array 2-d usando uma array 1-d
Como converter uma array 2-d de tamanho (mxn) em uma array 1-d e como armazenar o elemento na posição [i, j] da array 2-d em uma array 1-d? Claramente, o tamanho do array 1-d é o número de elementos no array 2-d, isto é (mxn). Se os elementos na array 2-d forem armazenados na ordem da linha principal. Então, o elemento no índice [i, j] na array 2-d será armazenado na array 1-d no índice k como:
k = j + (i * total_no_of_columns_in_matrix)
Se os elementos na array 2-d forem armazenados na ordem da coluna principal, o valor do índice k será
k = i + (j * total_no_of_rows_in_matrix)
Para obter mais detalhes sobre a ordem da linha principal e da coluna principal, consulte: https://en.wikipedia.org/wiki/Row-major_order
Exemplos :
Given 2-d array: // array is formed in row-major order __________________________ | | |1(0,0) 2(0,1) 3(0,2)| | | |4(1,0) 5(1,1) 6(1,2)| |__________________________| // The elements in parenthesis represents the // index of the particular element in 2-d array. Index of element at (0,1) in 1-d array will be: k(0,1) = 1 + 0 * 3 = 1 Index of element at (1,1) in 1-d array will be: k(1,1) = 1 + 1 * 3 = 4
// C++ program to emulate 2-d array using
// 1-d array
#include<stdio.h>
#define n 3
#define m 3
#define max_size 100
int main()
{
// Initialising a 2-d array
int grid[n][m] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
// storing elements in 1-d array
int i, j, k = 0;
int array[max_size];
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
k = i*m + j;
array[k] = grid[i][j];
k++;
}
}
// displaying elements in 1-d array
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
printf("%d ", *(array + i*m + j));
printf("\n");
}
return 0;
}
// Java program to emulate 2-d array using
// 1-d array
class GFG
{
// Driver program
public static void main(String arg[])
{
// Declaring number of rows and columns
int n = 3, m = 3;
int array[]=new int[100];
// Initialising a 2-d array
int grid[][] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
// storing elements in 1-d array
int i, j, k = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
k = i * m + j;
array[k] = grid[i][j];
k++;
}
}
// displaying elements in 1-d array
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
System.out.print((array[i * m + j])+" ");
System.out.print("\n");
}
}
}
// This code is contributed by Anant Agarwal.
# Python program to emulate 2-d
# array using 1-d array
# Declaring number of rows and columns
n = 3; m = 3
array = [0 for i in range(100)]
# Initialising a 2-d array
grid = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]];
# storing elements in 1-d array
k = 0
for i in range(n):
for j in range(m):
k = i*m + j
array[k] = grid[i][j]
k += 1
# displaying elements in 1-d array
for i in range(n):
for j in range(m):
print((array[i*m + j]), " ", end = "")
print()
# This code is contributed by Anant Agarwal.
// C# program to emulate 2-d array using
// 1-d array
using System;
class GFG
{
// Driver program
public static void Main()
{
// Declaring number of rows and columns
int n = 3, m = 3;
int []array=new int[100];
// Initialising a 2-d array
int [,]grid = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
// storing elements in 1-d array
int i, j, k = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
k = i * m + j;
array[k] = grid[i, j];
k++;
}
}
// displaying elements in 1-d array
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
Console.Write((array[i * m + j])+" ");
Console.Write("\n");
}
}
}
// This code is contributed by nitin mittal
<script>
// Javascript program to emulate 2-d array using
// 1-d array
// Declaring number of rows and columns
let n = 3, m = 3;
let array = new Array(100);
// Initialising a 2-d array
let grid = [ [ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ] ];
// Storing elements in 1-d array
let i, j, k = 0;
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
{
k = i * m + j;
array[k] = grid[i][j];
k++;
}
}
// Displaying elements in 1-d array
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
document.write((array[i * m + j]) + " ");
document.write("<br>");
}
// This code is contributed by _saurabh_jaiswal
</script>
Saída:
1 2 3 4 5 6 7 8 9
Este artigo é uma contribuição de Harsh Agarwal . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando write.geeksforgeeks.org ou enviar seu artigo para review-team@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva