listas encadeadas - plone · listas encadeadas características ... listas da abaixo, na primeira...
TRANSCRIPT
![Page 1: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/1.jpg)
Listas Encadeadas
David Menotti
Algoritmos e Estruturas de Dados II
DInf – UFPR
![Page 2: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/2.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Listas Encadeadas
Características:
Tamanho da lista não é pré-definido
Cada elemento guarda quem é o próximo
Elementos não estão contíguos na memória
info info
prox
info
NULL
info
NULL
info
NULL
prox
prox
![Page 3: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/3.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Sobre os Elementos da Lista
Elemento: guarda as informações sobre cada elemento.
Para isso define-se cada elemento como uma estrutura que possui:
campos de informações
ponteiro para o próximo elemento
info
prox
![Page 4: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/4.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Sobre a Lista
Uma lista pode ter uma célula cabeça
info
prox prox
info
prox
info
NULL
Uma lista pode ter um apontador para o último elemento
Último
![Page 5: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/5.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Cria Lista Vazia
NULL
Cabeça
Último
![Page 6: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/6.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Inserção de Elementos na Lista
info
prox prox
info
prox
info
NULL
Último
3 opções de posição onde pode inserir:
1ª. posição
última posição
Após um elemento qualquer E
![Page 7: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/7.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Inserção na Primeira Posição
info
prox prox
info
prox
info
NULL
Último
info
NULL prox
![Page 8: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/8.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Inserção na Última Posição
info
prox prox
info
prox
info
NULL
Último
info
NULL prox
![Page 9: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/9.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Inserção Após o Elemento E
prox
info
prox
info
NULL
Último
info
NULL prox
Elem E
info
prox
![Page 10: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/10.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Retirada de Elementos na Lista
info
prox prox
info
prox
info
NULL
Último
3 opções de posição de onde pode retirar:
1ª. posição
última posição
Um elemento qualquer E
![Page 11: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/11.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Retirada do Elemento na
Primeira Posição da Lista
info
prox prox
info
prox
info
NULL
Último
![Page 12: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/12.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Retirada do Elemento E da Lista
info
prox prox
info
prox
info
NULL
Último
Elem E
Anterior
![Page 13: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/13.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Retirada do Último Elemento da Lista
info
prox prox
info
prox
info
NULL
Último
Anterior
NULL
![Page 14: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/14.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Estrutura da Lista Usando Apontadores
typedef int TipoChave;
typedef struct {
TipoChave Chave;
/* outros componentes */
} TItem;
typedef struct Celula* Apontador;
typedef struct Celula {
TItem Item;
struct Celula* pProx; /* Apontador pProx; */
} TCelula;
typedef struct {
Apontador pPrimeiro;
Apontador pUltimo;
} TLista;
![Page 15: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/15.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Operações sobre Lista Usando
Apontadores (com Cabeça) void FLVazia(TLista* pLista)
{
pLista->pPrimeiro = (Apontador) malloc(sizeof(TCelula));
pLista->pUltimo = pLista->pPrimeiro;
pLista->pPrimeiro->pProx = NULL;
}
int LEhVazia(TLista* pLista)
{
return (pLista->pPrimeiro == pLista->pUltimo);
}
void LInsere(TLista *pLista,TItem* pItem)
{
pLista->pUltimo->pProx = (Apontador) malloc(sizeof(TCelula));
pLista->pUltimo = pLista->pUltimo->pProx;
pLista->pUltimo->Item = *pItem;
pLista->pUltimo->pProx = NULL;
}
![Page 16: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/16.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Operações sobre Lista Usando
Apontadores (sem Cabeça) void FLVazia(TLista *pLista)
{
pLista->pPrimeiro = NULL;
pLista->pUltimo = NULL;
}
int LEhVazia(TLista* pLista)
{ return (pLista->pUltimo == NULL); }
void LInsere(TLista* pLista,TItem* pItem)
{
if (pLista->pUltimo == NULL)
{ pLista->pUltimo = (Apontador) malloc(sizeof(TCelula));
pLista->pPrimeiro = pLista->pUltimo; }
else
{ pLista->pUltimo->pProx = (Apontador) malloc(sizeof(TCelula));
pLista->pUltimo = pLista->pUltimo->pProx;
}
pLista->pUltimo->Item = *pItem;
pLista->pUltimo->pProx = NULL;
}
![Page 17: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/17.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Operações sobre Lista Usando
Apontadores (com cabeça)
int LRetira(TLista* pLista, TItem* pItem)
{
TCelula* pAux;
if (LEhVazia(pLista))
return 0;
*pItem = pLista->pPrimeiro->pProx->Item;
pAux = pLista->pPrimeiro;
pLista->pPrimeiro = pLista->pPrimeiro->pProx;
free(pAux);
return 1;
}
![Page 18: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/18.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Operações sobre Lista Usando
Apontadores (sem cabeça)
int LRetira(TLista* pLista, TItem* pItem)
{
TCelula* pAux;
if (LEhVazia(pLista))
return 0;
*pItem = pLista->pPrimeiro->Item;
pAux = pLista->pPrimeiro;
pLista->pPrimeiro = pLista->pPrimeiro->pProx;
free(pAux);
if (pLista->pPrimeiro == NULL)
pLista->pUltimo = NULL; /* lista vazia */
return 1;
}
![Page 19: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/19.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Operações sobre Lista Usando
Apontadores (com cabeça)
void LImprime(TLista* pLista)
{
Apontador pAux;
pAux = pLista->pPrimeiro->pProx;
while (pAux != NULL)
{
printf("%d\n", pAux->Item.Chave);
pAux = pAux->pProx; /* próxima célula */
}
}
![Page 20: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/20.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Operações sobre Lista Usando
Apontadores (sem cabeça)
void LImprime(TLista* pLista)
{
Apontador pAux;
pAux = pLista->pPrimeiro;
while (pAux != NULL)
{
printf("%d\n", pAux->Item.Chave);
pAux = pAux->pProx; /* próxima célula */
}
}
![Page 21: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/21.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Operações sobre Lista Usando
Apontadores
Vantagens:
Permite inserir ou retirar itens do meio da lista a um custo
constante (importante quando a lista tem de ser mantida em
ordem).
Bom para aplicações em que não existe previsão sobre o
crescimento da lista (o tamanho máximo da lista não precisa ser
definido a priori).
Desvantagem:
Utilização de memória extra para armazenar os apontadores.
Percorrer a lista, procurando pelo i-ésimo elemento.
![Page 22: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/22.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Exemplo de Uso Listas - Vestibular
Num vestibular, cada candidato tem direito a três opções para tentar uma vaga em um dos sete cursos oferecidos.
Para cada candidato é lido um registro:
Chave: número de inscrição do candidato.
NotaFinal: média das notas do candidato.
Opção: vetor contendo a primeira, a segunda e a terceira opções de curso do candidato.
![Page 23: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/23.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Exemplo de Uso Listas - Vestibular
Problema: distribuir os candidatos entre os cursos, segundo a nota final e as opções apresentadas por candidato.
Em caso de empate, os candidatos serão atendidos na ordem de inscrição para os exames.
![Page 24: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/24.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Possível Solução
Ordenar registros pelo campo NotaFinal, respeitando a ordem de inscrição;
Percorrer cada conjunto de registros com mesma NotaFinal, começando pelo conjunto de NotaFinal 10, seguido pelo de NotaFinal 9, e assim por diante.
Para um conjunto de mesma NotaFinal tenta-se encaixar cada registro desse conjunto em um dos cursos, na primeira das três opções em que houver vaga (se houver).
![Page 25: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/25.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Possível Solução
Primeiro refinamento:
main()
{
ordena os registros pelo campo NotaFinal ;
for Nota = 10 até 0 do
while houver registro com mesma nota do
if existe vaga em um dos cursos de opcao do candidato
then insere registro no conjunto de aprovados
else insere registro no conjunto de reprovados;
imprime aprovados por curso ;
imprime reprovados;
}
![Page 26: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/26.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Classificação dos Alunos
Uma boa maneira de representar um conjunto de
registros é com o uso de listas.
Ao serem lidos, os registros são armazenados em
listas para cada nota.
Após a leitura do último registro os candidatos estão
automaticamente ordenados por NotaFinal.
Dentro de cada lista, os registros estão ordenados
por ordem de inscrição, desde que os registros
sejam lidos na ordem de inscrição de cada
candidato e inseridos nesta ordem.
![Page 27: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/27.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular – Representação da
Classificação dos Alunos
![Page 28: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/28.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Classificação dos Alunos por
Curso
As listas de registros são percorridas, iniciando-se
pela de NotaFinal 10, seguida pela de NotaFinal 9,
e assim sucessivamente.
Cada registro é retirado e colocado em uma das
listas da abaixo, na primeira das três opções em
que houver vaga.
Se não houver vaga, o registro é colocado em uma
lista de reprovados.
Ao final a estrutura acima conterá a relação de
candidatos aprovados em cada curso.
![Page 29: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/29.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Classificação dos Alunos por
Curso
![Page 30: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/30.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Segundo Refinamento
main()
{
lê número de vagas para cada curso;
inicializa listas de classificação de aprovados e reprovados;
lê registro;
while Chave != 0 do //Ou while Chave do
{
insere registro nas listas de classificação, conforme nota final;
lê registro;
}
}
![Page 31: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/31.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Segundo Refinamento
for Nota = 10 até 0 do
{
while houver próximo registro com mesma NotaFinal do
{
retira registro da lista;
if existe vaga em um dos cursos de opção do candidato
{
insere registro na lista de aprovados;
decrementa o número de vagas para aquele curso;
}
else insere registro na lista de reprovados;
obtém próximo registro;
}
}
imprime aprovados por curso;
imprime reprovados;
![Page 32: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/32.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Estrutura Final da Lista
#define NOpcoes 3
#define NCursos 7
#define FALSE 0
#define TRUE 1
typedef short TipoChave;
typedef struct TipoItem {
TipoChave Chave;
char NotaFinal;
char Opcao[NOpcoes];
} TipoItem;
typedef struct Celula {
TipoItem Item;
struct Celula *pProx;
} TipoCelula;
typedef struct TipoLista {
Celula *pPrimeiro, *pUltimo;
} TipoLista;
![Page 33: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/33.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Estrutura Final da Lista
TipoItem Registro;
TipoLista Classificacao[11];
TipoLista Aprovados[NCursos];
TipoLista Reprovados;
long Vagas[NCursos];
short Passou;
long i, Nota;
![Page 34: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/34.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Refinamento Final
Observe que o programa é completamente independente da implementação do tipo abstrato de dados Lista.
void LeRegistro(TipoItem *Registro)
{ /* os valores lidos devem estar separados por brancos */
long i;
int TEMP;
scanf("%hd %d", &(Registro->Chave), &TEMP);
Registro->NotaFinal = TEMP;
for (i = 0; i < NOpcoes; i++)
{
scanf("%d", &TEMP);
Registro->Opcao[i] = TEMP;
}
scanf(“%*[^\n]”); /* limpa buffer - fflush(stdin);*/
getchar();
}
![Page 35: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/35.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Refinamento Final
int main(int argc, char *argv[])
{ /*---Programa principal---*/
for (i = 1; i <= NCursos; i++)
scanf("%ld", &Vagas[i-1]);
scanf("%*[^\n]"); /* limpa buffer – fflush(stdin); */
getchar();
for (i = 0; i <= 10; i++)
FLVazia(&(Classificacao[i]));
for (i = 0; i < NCursos; i++)
FLVazia(&(Aprovados[i]));
FLVazia(&Reprovados);
LeRegistro(&Registro);
while (Registro.Chave != 0)
{
LInsere(&Classificacao[Registro.NotaFinal],&Registro);
LeRegistro(&Registro);
}
return 0;
}
![Page 36: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/36.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Refinamento Final for (Nota = 10; Nota >= 0; Nota--)
{ while (!LEhVazia(&Classificacao[Nota]))
{ LRetira(Classificacao[Nota].Primeiro, &Classificacao[Nota], &Registro);
i = 0;
Passou = FALSE;
while (i < NOpcoes && !Passou)
{ if (Vagas[Registro.Opcao[i]-1] > 0)
{ LInsere(&(Aprovados[Registro.Opcao[i]-1]), &Registro );
Vagas[Registro.Opcao[i]-1]--;
Passou = TRUE;
}
i++;
}
if (!Passou) LInsere(&Reprovados, &Registro);
}
}
for (i = 0; i < NCursos; i++)
{ printf("Relacao dos aprovados no Curso%ld\n", i+1);
Imprime(Aprovados[i]);
}
printf("Relacao dos reprovados\n");
Imprime(Reprovados);
return 0;
}
![Page 37: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/37.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Vestibular - Refinamento Final
O exemplo mostra a importância de utilizar tipos abstratos de dados para escrever programas, em vez de utilizar detalhes particulares de implementação.
Altera-se a implementação rapidamente. Não é necessário procurar as referências diretas às estruturas de dados por todo o código.
Este aspecto é particularmente importante em programas de grande porte.
![Page 38: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/38.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Exercícios
O que precisa ser feito para criar um novo
elemento para a lista?
Escreva uma função que receba uma lista
como parâmetro e retira o seu primeiro
elemento, apagando-o.
Escreva uma função que receba uma lista e
um ponteiro para uma célula como
parâmetros e insira a célula na primeira
posição da lista.
Imagine uma lista duplamente encadeada
![Page 39: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/39.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Pilhas e Filas
Pilha:
Fila:
Quem entra por último sai primeiro
Quem entra primeiro sai primeiro
![Page 40: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/40.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Pilha – Apontadores
#define max 10
typedef int TipoChave;
typedef struct {
int Chave;
/* --- outros componentes --- */
} TipoItem;
typedef struct Celula*Apontador;
typedef struct Celula {
TipoItem Item;
struct Celula* pProx;
} Celula;
typedef struct {
Apontador pFundo, pTopo;
int Tamanho;
} TipoPilha;
![Page 41: Listas Encadeadas - Plone · Listas Encadeadas Características ... listas da abaixo, na primeira das três opções em que houver vaga](https://reader031.vdocuments.pub/reader031/viewer/2022021521/5bea308909d3f28d5d8b624b/html5/thumbnails/41.jpg)
© David Menotti Algoritmos e Estruturas de Dados II
Fila – Apontadores
#include <stdlib.h>
#include <sys/time.h>
#include <stdio.h>
#define max 10
typedef int TipoChave;
typedef struct TipoItem {
TipoChave Chave;
/* outros componentes */
} TipoItem;
typedef struct Celula *Apontador;
typedef struct Celula {
TipoItem Item;
struct Celula *pProx;
} Celula;
typedef struct TipoFila {
Apontador pFrente;
Apontador pTras;
} TipoFila;