100 likes | 191 Views
Estruturas de Dados. Listas. Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com. http://www.bolinhabolinha.com. Onde Estamos ?. Ementa Introdução à estrutura de dados. Alocação estática de memória. Alocação dinâmica de memória. Pilhas. Filas. Listas. Algoritmos recursivos.
E N D
Estruturas de Dados Listas Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com
Onde Estamos ? • Ementa • Introdução à estrutura de dados. • Alocação estática de memória. • Alocação dinâmica de memória. • Pilhas. • Filas. • Listas. • Algoritmos recursivos. • Árvores. • Grafos.
Listas • Consiste em uma seqüência de elementos composto de: • Um campo de dados • Uma referência para outro elemento (link) • A inserção e remoção tem tempo constante (complexidade) • NÃO consigo fazer acesso aleatório aos elementos • Diferença com vetores • Vetores alocam memória para todos os elementos • Na lista a memória é alocada para cada item criado
Listas • Podem ser implementadas em linguagem C, utilizando ponteiros e estruturas • Elementos (Estrutura) • Campo de referência para o outro elemento (ponteiro) struct lista { int valor; struct lista *proximo; };
Criando • Para poder acessar a lista, um elemento apontando para o elemento inicial é criado • Quando a lista é criada, o elemento inicial é criado valendo NULL • struct lista *inicio; • Inicio = NULL;
Inserindo no início • Para inserir um nó no início • Crie um novo nó e aloque memória • struct lista *aux; • aux=(struct lista*)malloc(sizeof(struct lista)); • Preencha os dados • aux->valor=10; • Manobre os ponteiro • Novo nó aponta para o início aux->proximo=inicio; • Nó inicial aponta para o novo nó inicio = aux;
Pesquisando • Copiar o valor do nó inicial para o valor do nó atual • Enquanto o atual não for NULL (isto é, ainda existem elementos na lista) • Verificar se o valor procurado está neste nó, caso contrário, pular para o próximo nó struct lista *atual; atual=(struct lista*)malloc(sizeof(struct lista)); atual = inicio; while (atual != NULL) { if (atual->valor == valorprocurado) printf(“Achou”); else atual= atual->proximo; }
Removendo • Localize o nó anterior ao nó que deve ser removido • Faça-o apontar para o nó apontado pelo nó que irá ser removido
Exercícios 1-) Crie funções para cada operação (adicionar, remover, procurar) 2-) Crie uma função que traga quantos elementos tem a lista. 3-) Escreva uma função para remover de uma lista encadeada todos os elementos que contêm o valor “y” (digitado pelo usuário). 4-) Faça uma função que insira o elemento no final da lista 4-) Faça uma função que remova o elemento no final da lista 4-) Faça uma função que remova o primeiro elemento da lista 5-) Crie uma função que crie uma lista ligada a partir de um vetor fornecido pelo usuário. 6-) Faça uma função que some todos os elementos de uma lista 7-) Crie uma função que troque dois elementos de uma lista de lugar.
Bibliografia • Livro texto • TENENBAUM, Aaron M; SOUZA, Tereza Cristina Félix de. Estruturas de Dados usando C. 1ª ed. São Paulo: Makron Books,1995. • PEREIRA, Silvio do Lago. Estrutura de Dados Fundamentais : conceitos e aplicações. 9ª ed. São Paulo: Érica, 2006. • VELOSO, Paulo A. S.. Estrutura de Dados. 1ª ed. São Paulo: Campus, 1983. • Complementar • VILLA, Marcos Vianna. Estrutura de Dados : conceitos e técnicas de implementação. 1ª ed. Rio de Janeiro: Campus, 1993. • WIRTH, Niklaus. Algoritmos e estruturas de dados. 1ª ed. Rio de Janeiro: LTC, 1999 • CORMEN, Thomas H.. ALGORITMOS : TEORIA E PRÁTICA. 2ª ed. Rio de Janeiro: CAMPUS, 2002 • SCHILDT, Herbert. C Completo e Total. 3ª ed. São Paulo: Pearson Education, 2005