Abr 29 2009

Lista com ponteiros, Estrutura de Dados.

Boa noite a todos,

Como ainda não produzi nada muito bom hoje em casa (no lab produzi algo relaciona a xml-rpc que pretendo postar em breve), resolvi postar mais um dos 198578951 exercicios que estou tendo que fazer para estrutura de dados. O Exercicio de hoje é nada mais nada menos que uma implementação de uma Lista com Ponteiros, ou seja, ela não tem limite de elementos (é claro, se a memoria for infinita).

Como no exercicio anterior, o enunciado fica para a pagina inteira pois é muito grande.

O exercicio resolvido você encontra aqui.

Uma lista ordenada pode conter Strings de qualquer comprimento < 10000;
• esta lista tem um número de elementos máximo fixo (100) e é implementada como um vetor de ponteiros para Strings;
– utilize as rotinas de lista com vetor que você implementou para a agenda.
• Um novo String é lido primeiramente para dentro de uma variável auxiliar qualquer;
– então é alocada memória para exatamente o seu tamanho e ele é copiado para esta área. Para copiar um String utilize strcpy();
– por fim um lugar na lista é encontrado para ele. A posição escolhida do vetor de ponteiros da lista é instanciada através da atualização dos valores do ponteiro da posição do String na lista com o endereço do string.

Pseudo-código:
constantes MAXLISTA = 100;
tipo tLista {
// Vetor de ponteiros para caracter.
caracter *dados[MAXLISTA];
inteiro último;
};

• Importante: observe que criando uma variável do tipo tLista você não vai estar alocando memória para os strings a serem lidos, apenas para os ponteiros para eles.
Para verificar o comprimento de um String:
– utilize a função strlen();
– esta função devolve o comprimento (em caracteres imprimíveis) de um string.
– Protótipo: int strlen(char *p);

#include
#include
#include
char p[90] = “Carro”;
main() {
printf(“%i”, strlen(p));
}

• Imprime: 5
• Para copiar um String:
– utilize a função strcpy();
– esta função copia o conteúdo de um string (dado por um apontador) para a posição de memória dada por outro apontador.
– Protótipo: char *strcpy(char *destino, char *fonte);

#include
#include
#include
char p[90] = “Carro”;
char lata[20];
main() {
strcpy(lata, p));
printf(“s%”, lata);
}
• Imprime: Carro

Detalhes:

• Como você não sabe o comprimento do String que o usuário vai digitar, use primeiro uma variável auxiliar grande (10000 posições) para guardar o que foi
digitado;
• todas as funções de lista ordenada implementadas anteriormente devem ser reimplementadas para utilizar estes Strings;
• para a leitura de um String utilize scanf(“%s”, entrada).

No Comments

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment