Listas lineares Denise Guliato Faculdade de Computao UFU
- Slides: 17
Listas lineares Denise Guliato Faculdade de Computação – UFU www. facom. ufu. br/~guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura de Dados – Série de Livros Didáticos - Informática - UFRGS
Listas lineares duplamente encadeadas Crédito do slide para Nina Edelwais e Renata Galante Guliato Denise
LL duplamente encadeadas • Cada nodo tem 2 campos de elo • A lista pode ser percorrida nas duas direções Anterior Info Próximo Nodo genérico Pt. Lista L 1 L 2 Crédito do slide para Nina Edelwais e Renata Galante L 3 Guliato L 4 Denise
LL duplamente encadeadas Operações • Criar e inicializar uma lista • Inserir novo nodo • Remover um nodo Algoritmos • Consultar um nodo • Destruir lista Semelhantes a LL encadeada simples Tipo de nodo utilizado nos algoritmos: struct no { struct no* ant; int info; struct no* prox; } typedef struct no Lista;
Algoritmo: criar lista circular Lista* Cria_lista(void) { return NULL; }
LL duplamente encadeadas Inserção de um novo nodo no meio da lista Novo nodo Pt. Lista L 5 L 1 L 2 Pt. Lista L 4 L 3 L 5 L 1 L 2 Crédito do slide para Nina Edelwais e Renata Galante L 3 Guliato L 4 Denise
Inserção de um novo nodo no inicio da lista Pt. Lista L 5 L 1 L 2 L 4 L 3 Pt. Lista L 5 L 1 Adaptado de Nina Edelwais e Renata Galante L 2 L 3 L 4 Denise Guliato
Algoritmo: inserir um nodo no inicio da lista Lista* Insere_elem(Lista* Ptl, int elem) Lista* Insere_elem(Lista *Ptl, int elem) { Lista *Ptnodo; Ptnodo = (Lista*)malloc(sizeof(Lista)); if (Ptnodo == NULL) return Ptl; Ptnodo->info = elem; Ptnodo->prox = Ptl; Ptnodo->ant = NULL; if(Ptl != NULL) Ptl->ant = Ptnodo; Ptl = Ptnodo; return Ptl; }
Remoção de novo nodo Pt. Lista LL duplamente encadeadas Remover A B C D Pt. Lista Crédito do slide para Nina Edelwais e Renata Galante Guliato Denise
Algoritmo: Remover um nodo de LL Duplamente Encadeada Lista* Remove_elem(Lista *Ptl, int elem) { Lista *atual; if (Ptl == NULL) return Ptl; atual = Ptl; while (atual != NULL && elem != atual->info) { atual = atual->prox; } if (atual == NULL)// não achou return Ptl; if (atual == Ptl)// primeiro nodo a ser removido Ptl = atual->prox; else // nodo removido do meio ou do final da lista atual->ant->prox = atual->prox; } if (atual->prox != NULL) atual->prox->ant = atual->ant; free(atual); return Ptl;
Consulta à lista LL duplamente encadeadas • Acesso sempre pelo primeiro nodo da lista • A lista pode ser percorrida nas duas direções Adaptado de Nina Edelwais e Renata Galante Denise Guliato
Algoritmo: Consulta K-esimo nodo da Lista LL encadeada circular int Consulta_nodo(Lista Ptl, int pos, int *elem) int Consulta_nodo(Lista *Ptl, int pos, int *elem) { int cont = 1; Lista *pt; pt = Ptl; if (pos <= 0 || pt == NULL) return 0; while(pt != NULL && cont < pos) { pt=pt->prox; cont++; } if (pt == NULL) return 0; else { *elem=pt->info; return 1; } }
Algoritmo: destruir lista circular Lista* Libera_lista(Lista *Ptl) { Lista *aux; while (Ptl!= NULL) { aux = Ptl; Ptl = Ptl->prox; free(aux); } } return NULL;
lladae 2 d. h typedef struct no Lista; Lista* Cria_lista(void); Lista* Libera_lista(Lista* Ptl); int E_vazia(Lista* Ptl); int E_cheia(Lista* Ptl); Lista* Insere_elem(Lista* Ptl, int elem); Lista* Remove_elem(Lista* Ptl, int elem); int Tamanho_lista(Lista* Ptl); int Consulta_nodo(Lista* Ptl, int pos, int *elem);
#include <stdio. h> #include <stdlib. h> #include "lladae 2 d. h“ struct no { struct no* ant; int info; struct no* prox; }; Lista* Cria_lista(void) {……. . } Lista* Libera_lista(Lista *Ptl) {……. } int E_vazia(Lista *Ptl) {……. } int E_cheia(Lista *Ptl) {……. } Lista* Insere_elem(Lista *Ptl, int elem) {. . . . } Lista* Remove_elem(Lista *Ptl, int elem) {. . . . } int Tamanho_lista(Lista Ptl) {……. } int Consulta_nodo(Lista *Ptl, int pos, int *elem) {……} lladae 2 d. c
LL duplamente encadeada circular Considere uma Lista duplamente encadeada circular Pt. Lista L 1 L 2 L 3 L 4
Exercício Implemente o TAD Lista para a lista circular duplamente encadeada. Teste no programa do jogo baseado no problema de Josephus
- Listas lineares
- Prton
- Facom ufu
- Ufu 2003 assim a magia e a mitologia
- Facom ufu
- Escs uma abelha comum
- Siex ufu
- Sistemas lineares escalonamento
- Autovalores
- Regelungstechnik
- Lineares gleichungssystem
- Sistemas lineares 2 ano ensino médio
- Análise de sistemas lineares
- Anwendung pythagoras alltag
- Amplificadores diferenciais
- Listas enlazadas c#
- Tipos de listas
- Listas de despacho