Para a estruturacao de dados de forma sistematica e organizada existem varias estruturas de dados, cada qual com uma finalidade especifica. Alem das estruturas basicas, como os vetores, matrizes e structs ( registros ), e possivel combina-las, tal como um vetor de registros por exemplo, para formar uma estrutura de dados mais complexa. A maneira de organizar os dados de um programa pode ser modelado em termos dessas estruturas fornecidas pela linguagem.Para ir alem e construir estruturas mais eficazes e destinadas para cumprir determinadas tarefas de modo mais intuitivo para o programador, pode-se utilizar do conceito de ponteiros, vistos em C e C++.A fim de conferir maior entendimento na confeccao das estruturas de dados mais complexas e necessario esclarecer o conceito de ponteiros em C e C++. Assim, ponteiros consistem em variaveis de um tipo especifico com o operador * (asterisco ) precendendo o nome da variavel, que pode ser do tipo inteiro ( int ), ponto flutuante ( float ) ou double. O asterisco serve para diferenciar os ponteiros de outras variaveis, notacao esta conveniente para denotar uma referencia, assim como o operador -> (ponteiro para membro) que indexa a refencia de um ponteiro ao conteudo que referencia em uma struct.exemplos:int valor = 10;int *pont, **pont1; // ponteiro para ponteiro, no caso de **float *vetor;pont = &valor; printf("O ponteiro contem o valor: %d", *pont );// criacao de um vetor de tamanho N em tempo de execucaovetor =(float *) malloc(sizeof(float)*N); // uma outra maneira de criar um vetor a medida que o programa manipula dados e o valor de N seja conhecido;Ponteiros sao utilizados na confeccao das seguintes estruturas de dados, as quais sao as mais conhecidades:pilhas, filas, listas encadeadas, arvores ( binarias de busca, AVL, B ), alem de tecnicas de hashing.Nos proximos posts abordarei cada uma delas, exemplificando seus usos e como implementa-las em C. A medida que o tempo permitir vou postar tambem os codigos em C++ com as estruturas usando classes e objetos. Com os posts anteriores e possivel escrever algoritmos para uma ampla gama de problemas. No entando, as vezes, nos sentimos desnorteados quanto ao rumo que se deve tomar quando do desenvolvimento de um algoritmo para resolver um dado problema. Neste post vou abordar uma tecnica que utilizo quando escrevo meus algoritmos.Esta tecnica e denominada top-down, que consiste em um paradigma de atacar o problema de forma gradual. Apos o entendimento completo do problema, basta dividi-lo em partes menores para que os detalhes sejam tratados individualmente e a solucao como um todo seja alcancada com a uniao das resolucoes de todas as partes. Escrever algoritmos usando top-down facilita a maneira de encarar os problemas, pois dividir um problema inicialmente complexo em partes de solucao trivial, propicia 'insights' mentais que nos revelam o caminho que o algoritmo deve seguir.A estrategia por tras do metodo top-down(de cima para baixo) e a descrita abaixo:-ter uma visao geral do problema;-dividi-lo em partes menores;-resolver essas partes;-refinar as partes se uma solucao ainda nao foi encontrada;-unir todos os refinamentos;Assim, encarando o problema de uma especificacao geral ate suas minucias, a resolucao caminha