sábado, 14 de fevereiro de 2009

1.4 Tipos de Dados Elementares

Estruturas de dados simples, tais como matrizes têm uma importante vantagem sobre estruturas de dados mais sofisticadas, tais como listas ligadas: são simples. Muitos tipos de erros nas estruturas de base ponteiro simplesmente não pode acontecer com matrizes estáticas.

O sinal de uma maturidade profissional é manter os empregos simples. Isto é especialmente desafiador para aqueles que estão apenas aprendendo um novo assunto. Estudantes de Medicina fornecem um exemplo clássico deste problema. Após a sessão através de algumas palestras sobre doenças tropicais obscuro, um jovem médico teme que qualquer paciente com um sniffle e uma erupção cutânea pode ter o vírus Ébola ou peste bubónica, embora um pouco mais experiente médico envia-los em casa com uma garrafa de aspirina.

Igualmente, você pode ter aprendido recentemente equilibrada sobre pesquisa árvores binária, com exceção de manuseamento, processamento paralelo, e diversos modelos de objeto herança. Estes são todos úteis e importantes temas. Mas eles não são necessariamente a melhor maneira de obter um programa correto de trabalho para uma tarefa simples.

Então, sim, estruturas de ponteiro são bases muito poderosas se você não sabe o tamanho máximo do problema com antecedência, ou no apoio à pesquisa e atualização operações rápida. No entanto, muitos dos problemas que resolveremos aqui têm tamanhos máximos especificados. Além disso, o robô permite julgar normalmente alguns segundos para o seu trabalho para concluir, que é um monte de computação tempo quando você parar para pensar nisso. Você não obtem pontos extras para acabamento mais rápido.

Então, qual é a simples, maduro abordagem de estruturas de dados? Em primeiro lugar, estar familiarizado com os tipos de dados básicos primitivos construídos em sua linguagem de programação. Em princípio, você pode construir praticamente qualquer coisa que você quiser a partir de apenas estes:

• Arrays - workhorse Este tipo de dados permite o acesso aos dados por posição ou índices, e não conteúdo, tal como os números de casa numa rua permitir o acesso por endereço, nem nome. Eles são usados para armazenar seqüências de um único tipo de elementos, tais como números inteiros, reais, compostos ou objetos, tais como registros. Arrays de caracteres pode ser usado para representar uma string (texto), enquanto arranjos de string podem ser usados para representar apenas sobre qualquer coisa.

Sentinelas pode ser uma técnica útil para simplificar a matriz à base de programação. Um sentinela é um elemento guarda, implicitamente verificar que o programa não é executado para além dos limites do array sem realizar um teste explícito. Considere o caso de inserir elemento x em uma boa posição entre os n elementos de um array ordenadas a. Podemos testar explicitamente cada passo, para ver se temos atingido o fundo do array como à esquerda:



ou, podemos ter certeza de que um falso elemento a[0] é menor do que qualquer coisa que se defrontarão como à direita. Utilização adequada de sentinelas, e tendo a certeza que sua matriz é um pouco maior do que o que provavelmente deve ser, pode ajudar a evitar muitos erros fronteira.

• Arrays Multidimensionais - Grade de estruturas retangulares, tais como imagens e chessboards primeiro vem à mente quando se pensa matrizes bidimensionais, mas de um modo mais geral, podem ser usados para agrupar registro de dados homogéneos. Por exemplo, um conjunto de n pontos no x - y avião pode ser pensado como uma matriz n × 2, quando o segundo argumento (0 ou 1) de A[i] [j] ditames se estamos nos referindo ao x ou y coordenadas do ponto.

• Registros (Records/Structs) - Estes são utilizados para agrupar os registos de dados heterogêneos. Por exemplo, um conjunto de pessoas, registros podem fixos em conjunto do povo nomes, números de ID, alturas e pesos em um simples pacote. Os registos são importantes para a clareza conceitual em grandes programas, mas muitas vezes esses campos podem ser representados válvula usando arrays separados em programas de dimensão modesta.

Se é melhor usar registros ou arrays multidimensionais em um problema nem sempre é uma clara decisão. Pense no problema de representar os pontos em x - y plano discutido acima. A representação óbvia seria um registro ou a estrutura, tais como:

struct point {
int x, y;
};

em vez de um array de dois elemento. Uma grande vantagem para registros é que a notação p.x e p.y estão mais próximas da nossa notação natural para trabalhar com os pontos. No entanto, uma desvantagem da representação em registro é que você não pode ciclo longo variáveis individuais, como você pode elementos em um array.

Suponha que você quis mudar um programa para trabalhar com geométrica tridimensional pontos em vez de dois, ou mesmo em dimensões arbitrárias. Claro que você pode facilmente adicionar novos campos para o registro, mas todos os locais onde você fez cálculos sobre x e y agora você deve replicar-los para z. Mas, usando a matriz representação, alterando computações distância de dois a três dimensões pode ser tão simples como mudar uma constante:

typedef int point[DIMENSION];
double distance(point a, point b)
{
int i;
double d=0.0;
for (i=0; i < DIMENSION; i++)
d = d + (a[i]-b[i]) * (a[i]-b[i]);
return( sqrt(d) );
}


No capítulo 2 iremos analisar estruturas de dados mais avançadas que podem ser construídas a partir destas tipos básicos primitivas. Estes vão deixar-nos trabalhar com níveis mais altos de abstração, mas não ter medo de usar tecnologia simples quando basta para o trabalho.

Nenhum comentário:

Postar um comentário