Upload
carlossilvaferreira
View
25
Download
3
Embed Size (px)
Citation preview
Estruturas LinearesEstruturas Lineares
ListasListas
Uma lista é um conjunto de dados ordenados e de Uma lista é um conjunto de dados ordenados e de número variável de elementos. número variável de elementos.
Há 2 tipos de listas:Há 2 tipos de listas:
Lista seqüencialLista seqüencial
Lista encadeadaLista encadeada
Lista seqüencial Lista seqüencial
Uma lista seqüencial é um conjunto de Uma lista seqüencial é um conjunto de nn nós nós (n ≥ 0; (n ≥ 0;
XX11, X, X22,..., X,..., Xn n )) com as seguintes propriedades: com as seguintes propriedades:
Se Se n > 0n > 0, então , então XX11 é o primeiro nó da lista e é o primeiro nó da lista e XXn n é o último;é o último;
Para Para 1 < k < n1 < k < n, , XXkk é precedido por é precedido por XXk-1k-1 e sucedido por e sucedido por
XXk+1 k+1 ;;
Se Se n = 0n = 0, então a lista é vazia., então a lista é vazia.
Lista seqüencial Lista seqüencial Representação por contigüidadeRepresentação por contigüidade
Uma lista seqüencial aproveita a seqüencialidade da memória. Uma lista seqüencial aproveita a seqüencialidade da memória.
Uma lista Uma lista LL (com (com nn nós e todos os nós de mesmo tamanho) ocupa um nós e todos os nós de mesmo tamanho) ocupa um espaço consecutivo na memória equivalente a n*tamanho do nó.espaço consecutivo na memória equivalente a n*tamanho do nó.
A lista seqüencial é um vetor .A lista seqüencial é um vetor .
11 22 33 44 ...... nn ...... ...... mm
L(n) =L(n) =
m – número máximo de elementos que a lista L pode armazenar;
n – número de elementos existentes em um determinado momento.
Lista seqüencial Lista seqüencial
OperaçõesOperações Acesso a um determinado elemento. Acesso a um determinado elemento. Inserção de um novo elemento.Inserção de um novo elemento. Remoção de um elemento.Remoção de um elemento. Concatenação de duas ou mais listas lineares.Concatenação de duas ou mais listas lineares. Separação de uma lista em duas ou mais listas.Separação de uma lista em duas ou mais listas. Ordenação.Ordenação. Contagem de elementos.Contagem de elementos.
Listas encadeadas Listas encadeadas As listas encadeadas permitem a utilização de estruturas flexíveis em relação à As listas encadeadas permitem a utilização de estruturas flexíveis em relação à sua quantidade de elementos, tendo em vista sua característica dinâmica.sua quantidade de elementos, tendo em vista sua característica dinâmica.
Cada elemento é um nó composto por uma parte que armazena dados e outra que Cada elemento é um nó composto por uma parte que armazena dados e outra que armazena campos de ligação com outros nós.armazena campos de ligação com outros nós.
O campo de ligação dos nós contém o endereço de memória onde o próximo nó O campo de ligação dos nós contém o endereço de memória onde o próximo nó está armazenado.está armazenado.
A passagem de um nó para outro da estrutura encadeada é realizada através dos A passagem de um nó para outro da estrutura encadeada é realizada através dos endereços de outros nós.endereços de outros nós.
Os nós podem estar em qualquer lugar na memória.Os nós podem estar em qualquer lugar na memória.
As estruturas encadeadas podem ser implementadas de diferentes modos, no As estruturas encadeadas podem ser implementadas de diferentes modos, no entanto, a implementação mais flexível é por meio de ponteiros.entanto, a implementação mais flexível é por meio de ponteiros.
Listas encadeadas Listas encadeadas As listas encadeadas permitem fácil inserção e remoção de As listas encadeadas permitem fácil inserção e remoção de elementos sem um impacto global na estrutura.elementos sem um impacto global na estrutura.
Uma desvantagem da lista encadeada é o acesso seqüencial. Uma desvantagem da lista encadeada é o acesso seqüencial.
Para acessar um nó no meio da lista, todos os nós anteriores (ou Para acessar um nó no meio da lista, todos os nós anteriores (ou posteriores) devem ser visitados.posteriores) devem ser visitados.
Outra desvantagem é a necessidade de armazenar informações Outra desvantagem é a necessidade de armazenar informações adicionais, no caso, os ponteiros para outros nós.adicionais, no caso, os ponteiros para outros nós.
A lista encadeada é vantajosa quando há elementos que apresentam A lista encadeada é vantajosa quando há elementos que apresentam prioridade de acesso.prioridade de acesso.
Listas simplesmente encadeadas Listas simplesmente encadeadas
Se um nó tem um vínculo somente para o seu sucessor na Se um nó tem um vínculo somente para o seu sucessor na seqüência, a lista é simplesmente encadeada.seqüência, a lista é simplesmente encadeada.
Os nós são formados por um registro que possui pelo menos 2 Os nós são formados por um registro que possui pelo menos 2 campos, a informação e o endereço de memória onde está campos, a informação e o endereço de memória onde está armazenado o próximo elemento da lista.armazenado o próximo elemento da lista.
InfoInfo InfoInfo InfoInfo InfoInfo NULL
Listas simplesmente encadeadas Listas simplesmente encadeadas
O nó pode ser declarado por meio da O nó pode ser declarado por meio da seguinte estrutura:seguinte estrutura:
struct nodestruct node{{ int info;int info; struct node *proximo;struct node *proximo;}}
Listas simplesmente encadeadas Listas simplesmente encadeadas Para criar uma lista encadeada deve-se manter uma variável armazenando sempre o endereço do Para criar uma lista encadeada deve-se manter uma variável armazenando sempre o endereço do primeiro elemento da lista. primeiro elemento da lista.
aloca(primeiro)aloca(primeiro) se (primeiro) <> nulose (primeiro) <> nulo primeiro->dados = 10primeiro->dados = 10 primeiro->proximo=nuloprimeiro->proximo=nulo
Para o segundo elemento da lista. Para o segundo elemento da lista.
aloca(n)aloca(n) se (n) <> nulose (n) <> nulo n->dados = 8n->dados = 8 n->proximo=nulon->proximo=nulo
←←
Listas simplesmente encadeadasListas simplesmente encadeadas
Generalizando:Generalizando:aloca(p)aloca(p)se (p<>nulo)se (p<>nulo) p->dados = valorp->dados = valor p->proximo=nulop->proximo=nulo se (topo==nulo) (se a lista estiver vazia)se (topo==nulo) (se a lista estiver vazia) topo =p topo =p senão (a lista contém nós)senão (a lista contém nós) fim->proximo = pfim->proximo = p fim=pfim=p
Listas simplesmente encadeadas Listas simplesmente encadeadas
OperaçõesOperações Inserção de um nó no início da lista.Inserção de um nó no início da lista. Inserção de um nó no fim da lista.Inserção de um nó no fim da lista. Inserção de um nó antes de um nó endereçado por k.Inserção de um nó antes de um nó endereçado por k. Remoção de um nó do início da lista.Remoção de um nó do início da lista. Remoção de um nó do fim da lista.Remoção de um nó do fim da lista. Remoção de um nó antes de um nó endereçado por k.Remoção de um nó antes de um nó endereçado por k. Remoção de um nó com um valor determinado.Remoção de um nó com um valor determinado. Busca.Busca...
Listas simplesmente encadeadas Listas simplesmente encadeadas
Inserção de um novo elemento no início da lista.Inserção de um novo elemento no início da lista.
A adição de um nó no início de uma lista é realizada em 4 etapas.A adição de um nó no início de uma lista é realizada em 4 etapas.
1.1. Um nó vazio é criado.Um nó vazio é criado.
2.2. O membro info do nó é inicializado com um valor particular.O membro info do nó é inicializado com um valor particular.
3.3. Como o nó é incluído no início da lista, o membro próximo se torna um Como o nó é incluído no início da lista, o membro próximo se torna um ponteiro para o atual primeiro nó da lista.ponteiro para o atual primeiro nó da lista.
4.4. O novo nó precede todos os nós da lista de forma que o endereço do topo O novo nó precede todos os nós da lista de forma que o endereço do topo deve ser atualizado.deve ser atualizado.
Listas simplesmente encadeadas Listas simplesmente encadeadas topo
51. 8 3
54. 8 3
topo
53. 8 3
topo
52. 8 3
\
\
\
\
6
6
6
topo
Listas simplesmente encadeadas Listas simplesmente encadeadas
Inserção de um novo elemento no fim da lista.Inserção de um novo elemento no fim da lista.
A adição de um nó no fim de uma lista é realizada em 4 etapas.A adição de um nó no fim de uma lista é realizada em 4 etapas.
1.1. Um nó vazio é criado.Um nó vazio é criado.
2.2. O membro info do nó é inicializado com um valor particular.O membro info do nó é inicializado com um valor particular.
3.3. Como o nó é incluído no final da lista, o membro próximo deste novo nó se Como o nó é incluído no final da lista, o membro próximo deste novo nó se torna nulo.torna nulo.
4.4. O novo nó é incluído no fim lista de forma que o membro proximo do nó O novo nó é incluído no fim lista de forma que o membro proximo do nó anterior deverá apontar para o novo nó.anterior deverá apontar para o novo nó.
Listas simplesmente encadeadas Listas simplesmente encadeadas
1.
4.
3.
2.
topo
5 8 3\
topo
5 8 3\
10
topo
5 8 3\
10
\
topo
5 8 3\
10
\
Listas simplesmente encadeadas Listas simplesmente encadeadas
Inserção de um novo elemento no fim da lista.Inserção de um novo elemento no fim da lista.
Para evitar percorrer toda a lista, pode-se armazenar o Para evitar percorrer toda a lista, pode-se armazenar o endereço do último elemento da lista.endereço do último elemento da lista.
#include <iostream.h>#include <iostream.h>#include <stdio.h>#include <stdio.h>struct nodestruct node{{ int info;int info; struct node *proximo;struct node *proximo;};};
void main( )void main( ){{ char opcao;char opcao; dodo {{ novodado( );novodado( ); cout <<“n Inserir outro cout <<“n Inserir outro
dado”;dado”; cin >> opcao;cin >> opcao; } while (opcao==‘s’);} while (opcao==‘s’);}}
void novodado( )void novodado( ){{node *novo = new node;node *novo = new node;cin >> novo->info;cin >> novo->info;fim->proximo = novo;fim->proximo = novo;fim=novo;fim=novo;novo->proximo=NULL;novo->proximo=NULL;}}
Listas simplesmente encadeadas Listas simplesmente encadeadas A função novodado( ) adiciona um nó à lista.A função novodado( ) adiciona um nó à lista.
O novo nó é inserido no final da lista.O novo nó é inserido no final da lista.
Primeiramente, uma nova estrutura do tipo node é criada pela instrução:Primeiramente, uma nova estrutura do tipo node é criada pela instrução: node *novo = new node;node *novo = new node;
A instrução reserva memória para armazenar a estrutura e atribui o endereço desta memória ao ponteiroA instrução reserva memória para armazenar a estrutura e atribui o endereço desta memória ao ponteiro novo.novo.
Em seguida, a informação da nova estrutura é preenchida pelo usuário.Em seguida, a informação da nova estrutura é preenchida pelo usuário.
Finalmente o novo endereço é atribuído ao ponteiro pela instruçãoFinalmente o novo endereço é atribuído ao ponteiro pela instrução ::
fim = novo;fim = novo;
Listas simplesmente encadeadas Listas simplesmente encadeadas
RemoçãoRemoção
Uma operação de remoção consiste em remover um nó Uma operação de remoção consiste em remover um nó da lista e retornar o valor armazenado neste nó.da lista e retornar o valor armazenado neste nó.
A operação de remoção permite liberar o espaço em A operação de remoção permite liberar o espaço em memória referente ao nó especificado.memória referente ao nó especificado.
Há dois casos especiais a serem tratados:Há dois casos especiais a serem tratados:
Remoção de um nó de uma lista vaziaRemoção de um nó de uma lista vazia
Remoção de um nó de uma lista com somente um nóRemoção de um nó de uma lista com somente um nó
Listas simplesmente encadeadas Listas simplesmente encadeadas
Remoção de um nó do início da lista.Remoção de um nó do início da lista.
se (topo==nulo) status=falso se (topo==nulo) status=falso // a lista está vazia// a lista está vaziasenao{senao{ aux=topoaux=topo valor = aux->dadosvalor = aux->dados topo=topo->proximotopo=topo->proximo se topo = nulo fim=nulose topo = nulo fim=nulo libera (aux)libera (aux) status = verdadeirostatus = verdadeiro }}retorna valorretorna valor
Listas simplesmente encadeadas Listas simplesmente encadeadas
Remoção de um nó do fim da lista. Remoção de um nó do fim da lista. Para remover um nó do fim da lista deve-se considerar 3 Para remover um nó do fim da lista deve-se considerar 3
situações:situações:Lista VaziaLista Vazia: Para verificar se a lista está vazia basta verificar : Para verificar se a lista está vazia basta verificar a variável topo, se o conteúdo for nulo, a lista está vazia.a variável topo, se o conteúdo for nulo, a lista está vazia.
Lista com apenas um elementoLista com apenas um elemento: Neste caso, verifica-se o : Neste caso, verifica-se o conteúdo do campo próximo do primeiro nó da lista, se o conteúdo do campo próximo do primeiro nó da lista, se o conteúdo for nulo, a lista possui apenas um elemento.conteúdo for nulo, a lista possui apenas um elemento.
Lista com dois ou mais elementosLista com dois ou mais elementos: Se nenhuma das : Se nenhuma das situações anteriores for verdadeira, a lista possui dois situações anteriores for verdadeira, a lista possui dois elementos ou mais.elementos ou mais.
Listas simplesmente encadeadas Listas simplesmente encadeadas Remoção de um nó do fim da lista.Remoção de um nó do fim da lista.
se (topo==nulo) status=falso se (topo==nulo) status=falso // a lista está vazia// a lista está vaziasenao{senao{ se (topo->proximo == nulo){ se (topo->proximo == nulo){ // a lista tem um único nó// a lista tem um único nó valor = topo->dadosvalor = topo->dados libera (topo)libera (topo) fim = nulofim = nulo topo = nulotopo = nulo }} p= topop= topo enquanto (p->proximo <> nulo) {enquanto (p->proximo <> nulo) { aux=paux=p p=p->proximop=p->proximo }} valor=p->dadosvalor=p->dados aux->proximo=nuloaux->proximo=nulo fim=auxfim=aux libera(p)libera(p) status = verdadeirostatus = verdadeiro }} retorna valorretorna valor}}
Listas encadeadas com headerListas encadeadas com header
Para facilitar a gerência de informações de início e fim da lista pode-Para facilitar a gerência de informações de início e fim da lista pode-se reunir as referências em uma única estrutura chamada descritor, se reunir as referências em uma única estrutura chamada descritor, líder ou header da lista.líder ou header da lista.
O acesso aos elementos da lista é sempre realizado por meio do O acesso aos elementos da lista é sempre realizado por meio do header.header.
O header pode conter informações como: início e fim da lista, O header pode conter informações como: início e fim da lista, quantidade de nós da lista e outras informações que se deseje.quantidade de nós da lista e outras informações que se deseje.
Lista
3
Listas duplamente encadeadas Listas duplamente encadeadas
Nas listas duplamente encadeadas, os nós contêm Nas listas duplamente encadeadas, os nós contêm dois ponteiros um para o sucessor e outro para o dois ponteiros um para o sucessor e outro para o predecessor.predecessor.
Lista
22 33 42
Listas duplamente encadeadas Listas duplamente encadeadas
Definição da lista duplamente ligada com Definição da lista duplamente ligada com estruturasestruturas
struct Node{struct Node{
struct Node *prev;struct Node *prev;
int dados;int dados;
struct Node *proximo;struct Node *proximo;
};};
struct Node *topo=NULL, *fim=NULL;struct Node *topo=NULL, *fim=NULL;
Listas duplamente encadeadas Listas duplamente encadeadas
Inserção de um nó no final da listaInserção de um nó no final da lista
1.1. O nó é criado.O nó é criado.
2.2. Insere-se o dado.Insere-se o dado.
3.3. O ponteiro para próximo torna-se nulo.O ponteiro para próximo torna-se nulo.
4.4. O ponteiro para prev deve apontar para o último nó da O ponteiro para prev deve apontar para o último nó da lista (fim).lista (fim).
5.5. O valor de fim é ajustado para o novo nó .O valor de fim é ajustado para o novo nó .
6.6. O ponteiro proximo do nó anterior toma o endereço do O ponteiro proximo do nó anterior toma o endereço do novo nó.novo nó.
Listas duplamente encadeadas Listas duplamente encadeadas topo
\ 6 5 8 \
fim
topo\ 6 5 8 \ 10
fim
topo\ 6 5 8 \ 10
topo\ 6 5 8 \ 10 \
fim
topo\ 6 5 8 \ 10
topo\ 6 5 8 \ 10 \
fim
topo\ 6 5 8 \ 10
topo\ 6 5 8 \ 10 \
fim
topo\ 6 5 8 10
topo\ 6 5 8 10 \
fim
1.
3.
2.
6.
4.
1.
5.
Listas duplamente encadeadas Listas duplamente encadeadas Inserção de um nó no final da listaInserção de um nó no final da lista
aloca (p)aloca (p)
se (p<> nulo)se (p<> nulo)
p->dados = valorp->dados = valor
p->prev=fimp->prev=fim
p->prox = nulop->prox = nulo
fim->prox = pfim->prox = p
fim = pfim = p
se (topo == nulo)se (topo == nulo)
topo = fimtopo = fim
Listas duplamente encadeadas Listas duplamente encadeadas Inserção de um nó no início da listaInserção de um nó no início da lista
aloca (p)aloca (p)
se (p<> nulo)se (p<> nulo)
p->dados = valorp->dados = valor
p->prox=topop->prox=topo
topo->prev=ptopo->prev=p
p->prev = nulop->prev = nulo
topo = ptopo = p
se (fim == nulo)se (fim == nulo)
fim=topofim=topo
Listas duplamente encadeadas Listas duplamente encadeadas
topo\ 6 5 8 10
topo\ 6 5 8 10 \
fim1.
3.
2.
4.
topo\ 6 5 8 10
topo\ 6 5 8 10 \
fim
fimtopo
\ 6 5 8topo
\ 6 5 8
fimtopo
\ 6 5 8topo
\ 6 5 8 \
Remoção de um nó do fim da lista
Listas duplamente encadeadas Listas duplamente encadeadas Remoção de um nó do fim da listaRemoção de um nó do fim da lista
se (topo <> nulo)se (topo <> nulo)
aux = fimaux = fim
fim = aux->prevfim = aux->prev
se (fim == nulo)se (fim == nulo)
topo = nulotopo = nulo
senão fim->prox = nulosenão fim->prox = nulo
valor = aux->dadosvalor = aux->dados
libera (aux)libera (aux)
status=verdadeirostatus=verdadeiro
retorna valorretorna valor
senãosenão
status=falso status=falso
Listas duplamente encadeadas Listas duplamente encadeadas Remoção de um nó do início da listaRemoção de um nó do início da lista
se (topo <> nulo)se (topo <> nulo)
aux = topoaux = topo
topo = aux->proxtopo = aux->prox
se (topo == nulo)se (topo == nulo)
fim = nulofim = nulo
senão topo->prev = nulosenão topo->prev = nulo
valor = aux->dadosvalor = aux->dados
libera (aux)libera (aux)
status=verdadeirostatus=verdadeiro
retorna valorretorna valor
senãosenão
status=falso status=falso
Listas circulares Listas circulares Em uma lista circular os nós formam um anel.Em uma lista circular os nós formam um anel.
Um exemplo da utilização das listas circulares é quando diversos processos Um exemplo da utilização das listas circulares é quando diversos processos estão usando os mesmos recursos simultaneamente.estão usando os mesmos recursos simultaneamente.
Deve-se assegurar que os processos sigam uma ordem de utilização do Deve-se assegurar que os processos sigam uma ordem de utilização do recurso.recurso.
Coloca-se os recursos em uma lista circular acessíveis através do ponteiro Coloca-se os recursos em uma lista circular acessíveis através do ponteiro “corrente”.“corrente”.
Depois que o processo é ativado o ponteiro se move para o próximo nó Depois que o processo é ativado o ponteiro se move para o próximo nó para ativar o processo seguinte.para ativar o processo seguinte.
Na implementação de uma lista simplesmente encadeada circular usa-se Na implementação de uma lista simplesmente encadeada circular usa-se apenas um ponteiro permanente.apenas um ponteiro permanente.
Listas circulares Listas circulares
Lista circular simplesmente encadeadaLista circular simplesmente encadeada
Lista circular duplamente encadeadaLista circular duplamente encadeada
corrente
6 5 8
6 5 8 10
corrente6 5 8 10
Listas circularesListas circularesInserção de um nó antes do nó correnteInserção de um nó antes do nó corrente
aloca (p)aloca (p) se (p<> nulo){se (p<> nulo){ p->dados = valorp->dados = valor se (corrente == nulo){se (corrente == nulo){ corrente = pcorrente = p p->prox = pp->prox = p }} senao{senao{ aux = correnteaux = corrente enquanto (aux->prox <> corrente) aux = aux->proxenquanto (aux->prox <> corrente) aux = aux->prox aux->prox=paux->prox=p p->prox=correntep->prox=corrente }} } }
Listas circularesListas circularesInserção de um nó antes do nó corrente (o novo nó se torna o nó Inserção de um nó antes do nó corrente (o novo nó se torna o nó corrente)corrente)
aloca (p)aloca (p) se (p<> nulo){se (p<> nulo){ p->dados = valorp->dados = valor se (corrente == nulo){se (corrente == nulo){ corrente = pcorrente = p p->prox = pp->prox = p }} senao{senao{ aux = correnteaux = corrente enquanto (aux->prox <> corrente) aux = aux->proxenquanto (aux->prox <> corrente) aux = aux->prox aux->prox=paux->prox=p p->prox=correntep->prox=corrente corrente=pcorrente=p }} } }
Listas circulares Listas circulares Remoção do nó do correnteRemoção do nó do corrente
se (corrente <> nulo){se (corrente <> nulo){ aux = correnteaux = corrente se (aux->prox)<> corrente{ se (aux->prox)<> corrente{ enquanto (aux->prox <> corrente) aux = aux->proxenquanto (aux->prox <> corrente) aux = aux->prox aux ->prox = corrente->proxaux ->prox = corrente->prox valor = corrente->dados valor = corrente->dados libera(corrente)libera(corrente) corrente = aux->proxcorrente = aux->prox status=verdadeirostatus=verdadeiro retorna valorretorna valor }} senão{senão{ valor = corrente->dados valor = corrente->dados libera(corrente)libera(corrente) corrente = nulcorrente = nul status=verdadeirostatus=verdadeiro retorna valorretorna valor
}}senãosenão status=falso status=falso } }
Listas auto-organizadas Listas auto-organizadas As listas encadeadas exigem a busca seqüencial para localizar um elemento ou descobrir que As listas encadeadas exigem a busca seqüencial para localizar um elemento ou descobrir que ele não está na lista.ele não está na lista.
Pode-se melhorar a eficiência da busca organizando a lista dinamicamente.Pode-se melhorar a eficiência da busca organizando a lista dinamicamente.
Existem diferentes métodos de organização de listas.Existem diferentes métodos de organização de listas.
1.1. Método de mover para frente: O elemento localizado deve ser colocado no início da lista.Método de mover para frente: O elemento localizado deve ser colocado no início da lista.
2.2. Método da transposição: O elemento localizado deve ser trocado com seu predecessor, exceto se ele estiver no Método da transposição: O elemento localizado deve ser trocado com seu predecessor, exceto se ele estiver no topo da lista.topo da lista.
3.3. Método da contagem: A lista deve ser ordenada pelo número de vezes que os elementos são acessados.Método da contagem: A lista deve ser ordenada pelo número de vezes que os elementos são acessados.
4.4. Método da ordenação: A lista é ordenada de acordo com sua informação.Método da ordenação: A lista é ordenada de acordo com sua informação.
Os três primeiros métodos permitem colocar os elementos mais prováveis de serem acessados Os três primeiros métodos permitem colocar os elementos mais prováveis de serem acessados no início da lista.no início da lista.
O método da ordenação tem a vantagem na busca de informação, sobretudo se a informação O método da ordenação tem a vantagem na busca de informação, sobretudo se a informação não está na lista pois a busca pode terminar sem pesquisar toda a lista.não está na lista pois a busca pode terminar sem pesquisar toda a lista.
Listas auto-organizadas Listas auto-organizadas 1. Método de mover para frente
A DB C
Acesso → D
D CA B
2. Método da transposição
A DB C
Acesso → D
A CB D
Listas auto-organizadas Listas auto-organizadas 3. Método da contagem
Acesso → D
4. Método da ordenação
A DB C
Acesso → D
A DB C
A 3 C 1B 1 D 1
A 3 B 1D 2 C 1
ExercíciosExercícios
Criar um programa para manipular uma lista Criar um programa para manipular uma lista simplesmente encadeadasimplesmente encadeadaO programa deverá apresentar um menu com as O programa deverá apresentar um menu com as seguintes opções:seguintes opções:
1.1. Inclusão no início da listaInclusão no início da lista2.2. Inclusão no fim da listaInclusão no fim da lista3.3. Remoção do início da listaRemoção do início da lista4.4. Remoção do fim da listaRemoção do fim da lista5.5. Impressão da lista com valor do topo, e endereço e valor dos Impressão da lista com valor do topo, e endereço e valor dos
nós que compõe a lista.nós que compõe a lista.