Estruturas de Dados Listas Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com
Introdução à estrutura de dados. Alocação estática de memória. 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 struct lista { int valor; struct lista *proximo; }; 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 Complementar 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