Skip to content

Latest commit

 

History

History
194 lines (135 loc) · 8.33 KB

File metadata and controls

194 lines (135 loc) · 8.33 KB

7 Arrays

7.1 Introdução

Este capítulo serve como uma introdução às estruturas de dados. Os arrays são estruturas de dados que consistem em itens de dados do mesmo tipo. Os arrays são entidades "estáticas", pois, uma vez criados, eles permanecem do mesmo tamanho.

7.2 Arrays

Um array é um grupo de posições de memória adjacentes que têm o mesmo nome e tipo. Para nos referimos a uma posição ou elemento particular no array, especificamos o nome do array e o número da posição do elemento ao qual nos referimos.

O número da posição entre colchetes é chamado mais formalmente de índice. Um índice deve ser um inteiro ou uma expressão inteira.

7.3 Declarando e Alocando Array

Os arrays ocupam espaço na memória. O programador especifica o tipo dos elementos e usa o operador new para alocar dinamicamente o número de elementos exigidos por cada array.
Os arrays são alocados com new porque são objetos, e todos os objetos dever ser criados com new.

A declaração

int[] c = new int[12];

aloca 12 elementos para o array inteiro c. A instrução também pode ser executada em dois passos, como segue:

int[] c;
c = new int[12];

Quando os arrays são alocados, os elementos são inicializados como zero para as variáveis numéricas de tipo de dados primitivo, como false para variáveis bool, e como null para tipos de referência.

string[] b = new string[100], x = new string[27];

double[]  array1 = new double[10],
          array1 = new double[20];

7.4 Exemplos Usando Arrays

Esta apresenta vários exemplos usando arrays. Por simplicidade, os exemplos desta seção usam arrays que contêm elementos do tipo int.

7.4.1 Alocando um Array e Inicializando seus Elementos

  • Fig. 7.03: InitArray.cs
    Diferentes maneiras de inicializar arrays.

7.4.2 Totalizando os Elementos de um Array

  • Fig. 7.04: SumArray.cs
    Calculando a soma dos elementos em um array.

7.4.3 Usando Histogramas para Apresentar os Dados do Array Graficamente

  • Fig. 7.05: Histogram.cs
    Usando dados para criar um Histograma.

7.4.4 Usando os Elementos de um Array como Contadores

7.4.5 Usando Arrays para Analisar Resultados de Levantamento

7.5 Passando Arrays a Métodos

Para passar um argumento array para um método, especifique o nome do array sem usar colchetes.

  • Fig. 7.08: PassArray.cs
    Passando arrays e elementos individuais a métodos.

7.6 Passando Arrays por Valor e por Referência

Em C#, uma variável que "armazena" um objeto, como um array, não armazena realmente o objeto em si. Em vez disso, tal variável armazena uma referência para o objeto. A distinção entre variáveis de referência e variáveis de tipo de dados primitivo levanta alguns problemas sutis que os programadores devem entender para criar programas seguros e estáveis.

  • Fig. 7.09: ArrayReferenceTest.cs
    Testando os efeitos da passagem de referência de array por valor e por referência.

7.7 Ordenando Arrays

Ordenar dados é uma das aplicações mais importantes da computação. Ordenar dados é um problema intrigante que tem atraído alguns dos esforços de pesquisa mais intensos no setor da ciência da computação

  • Fig. 7.10: BubbleSorter.cs
    Ordenando os valores de um array em ordem crescente.

A vantagem da ordenação "bolha" é que ela é fácil de programar. Entretanto, a ordenação "bolha" é executada lentamente, o que se torna aparente na ordenação de arrays grandes.

(Bom para pesquisar: Estruturas de Dados, Algoritmos e Complexidade Computacional)

7.8 Pesquisando Arrays: Pesquisa linear e pesquisa binária

Determinar se um array contém um valor que corresponde a determinado valor de chave. O processo de localizar um valor de elemento em particular em um array é chamado de pesquisa. Nesta seção discutiremos duas técnicas de pesquisa.

7.8.1 Pesquisando um Array com Pesquisa Linear

7.8.2 Pesquisando um Array Ordenado com Pesquisa Binária

O método de pesquisa linear funciona bem para array pequenos ou não ordenados. Entretanto, para arrays grandes, a pesquisa linear é ineficiente. Se o array estiver ordenado, a técnica de pesquisa binária de alta velocidade pode ser usada. O algoritmo de pesquisa binária elimina metade dos elementos do array que está sendo pesquisado, após cada comparação. O algoritmo localiza o elemento do meio do array e o compara com a chave de busca.

7.9 Arrays Multidimensionais

Os arrays que exigem dois índices para identificar um elemento em particular normalmente são chamados de arrays bidimensionais. Existe dois tipos de arrays bidimensionais (retangulares e irregulares).

Os arrays multidimensionais podem ser inicializado em declarações como os arrays de um índice. Um array bidimensional b, com duas linhas e duas colunas, poderia ser declarado em inicializado com

int[,] b = new int[2, 2];

ou poderia ser escrito em uma única linha usando-se uma lista inicializadora, como se vê a seguir:

int[,] b = {{1, 2}, {3, 4}};

Os arrays irregulares são mantidos como arrays de arrays. Ao contrário dos arrays retangulares, os arrays que compõem os arrays irregulares pode ser de tamanhos diferentes. A declaração

int[][] c = new int[2][]; // Aloca linhas.
// Aloca e inicializa elementos na linha 0.
c[0] = new int[] {1, 2};
// Aloca e inicializa elementos na linha 0.
c[1] = new int[] {3, 4, 5};

cria o array inteiro c com a linha 0 contendo dois elementos, e a linha 1 contendo três elementos.

7.10 Estrutura de Repetição foreach

O C# fornece a estrutura de repetição foreach para se fazer a iteração por valores em estruturas de dados, como arrays. Quando usado com arrays unidimensionais, foreach se comporta como estrutura for que percorre o intervalo de índices de de 0 ao tamanho do array. Em vez de um contador, foreach usa uma variável para representar o valor de cada elemento.