Buscar

Prévia do material em texto

Tipo de Dados Lista
Lista Circular
ESTRUTURA DE DADOS
Objetivos de Aprendizagem
 Reconhecer o conceito de circular, 
identificando suas peculiaridades;
 Examinar as principais diferenças para 
uma lista simplesmente encadeada;
 Construir uma lista circular a partir do 
entendimento do conceito;
 Analisar operações que compõem uma 
lista circular.
Agenda
 Conceitos;
 Aplicação prática.
Operações
 Construção da lista;
 Inserção de um nó;
 Remoção de um nó;
 Percurso por todos os 
nós;
 Busca de um nó 
◦ consultar e/ou alterar;
 Obter cópia de uma lista
 Determinar o total de nós 
da lista;
 Ordenar os nós da lista;
 Destruição da lista
 Inversão de uma lista;
 E outras
Realizando em Linguagem C
Listas Lineares encadeadas Circular
 Suponha uma estrutura para os seguintes dados:
typedef struct no{
int idade;
char nome[50]; 
struct no *proximo = NULL;
} nodo;
idade
nome
*proximo
nodo
Isto não é uma variável apenas 
Um tipo (identificador alternativo) 
para estrutura no
Listas Lineares encadeadas Circular
 Inicializando um ponteiro
nodo *cabeca = NULL; 
cabeca
Nulo ou 
vazio
Listas Lineares encadeadas Circular
 Criando um nodo para a lista
nodo *cabeca = (nodo *) malloc (sizeof(nodo));
cabeca
.....
*proximo=largato
Lixo
Listas Lineares encadeadas Circular
 Criando um novo nodo
nodo *noatual = NULL; 
nodo *novono = NULL;
*noatual
*novono
Listas Lineares encadeadas Circular
 Se cabeça diferente de NULL
noatual = cabeca;
*cabeca
...
*proximo=NULL*noatual
Listas Lineares encadeadas Circular
 Criando um novo nodo para encadear
novono = (nodo*) malloc(sizeof(nodo));
*novono
...
*proximo=largato
Listas Lineares encadeadas Circular
 Encadeando o novono
novono->... = ...
novono->proximo = NULL;
noatual->proximo = novono;
*cabeca
....
*proximo=NULL
noatual *novono
....
*proximo=noatual
Listas Lineares encadeadas Circular
 Encadeando o novono
novono->... = ...
novono->proximo = (*cabeca)...;
noatual->proximo = novono;
*cabeca
...
*proximo=(*cabeca)->proximo
noatual
*novono ...
*proximo=novono
Conclusão
 Na representação por encadeamento, 
acrescenta-se a cada elemento da lista 
apontadores que garantem a precedência 
entre os elementos
 Vantagens
Inserção e remoção mais rápida
Uso mais racional da memória disponível
 Desvantagens
Tamanho (espaço ocupado na memória) de um nó 
é maior do que em um vetor (array)
Ruim para listas com poucos elementos
Exercícios de Fixação
 Implementem em casa o seguinte problema:
◦ Faça um arquivo de cabeçalho que contenha os 
seguintes dados:
typedef struct nodo{
int idade;
char nome[50];
struct nodo *prox;
}no;
E as seguintes operações:
 Criar nodos;
 Inserir nodos
 E Imprimir nodos
Tipo de Dados Lista
Lista Circular
ESTRUTURA DE DADOS