Listas duplamente encadeadas - Prática
Contato
- Jean Paulo Martins (jeanmartins utfpr edu br)
- Sala 105, Bloco S (UTFPR - Campus Pato Branco)
Instruções
Baixar os arquivos em https://goo.gl/jxIq7t
- list.h
- dlist.c
- testaLista.c
Implementar as funções em dlist.c que ainda não estejam implementadas. Em seguida, compilar e executar testaLista.c.
Item* ponteiroParaPosicao(Lista* l, int pos);
Item* removerProximo(Lista* l, Item* anterior);
Item* removerDaPosicao(Lista* l, int pos);
void reverterLista(Lista* lista);
void freeLista(Lista* l);
bool verificarPalindromo(Lista* l)
Exercícios
##ex.1
/* [ 1 ]
Dada uma lista duplamente encadeada, percorrê-la e retornar o item na posição pos-1.
Caso pos < (l->tamanho)/2, então o percurso deve ser do início parra o fim
Caso contrário, o percurso deve ser feito do fim para o início.
*/
Item* ponteiroParaPosicao(Lista* l, int pos);
Exemplo:
pos = 3;
ponteiroParaPosicao(L, pos);
>> 0, 1, 2, 3, [4], 5, 6, 7; /* Ponteiro inicial aponta para o início */
0, 1, >> 2, 3, [4], 5, 6, 7; /* Percorre da esquerda para direita até a posição anterior */
pos = 5;
ponteiroParaPosicao(L, pos);
0, 1, 2, 3, [4], 5, 6, 7 <<; /* Ponteiro inicial aponta para o fim */
0, 1, 2, 3, [4] <<, 5, 6, 7; /* Percorre da direita para a esquerda até posição anterior */
##ex.2
/* [ 2 ]
Implementar o operador de remoção do próximo, o qual recebe um ponteiro para o item
anterior ao item a ser removido.
*/
void removerProximo(Lista* l, Item* i);
Exemplo:
0, 1, 2, 3, 4, >> 5, 6, 7; /* Neste exemplo i é um ponteiro para o item 5 */
0, 1, 2, 3, 4, 5, 7; /* Esta é a lista após a remoção do item i->proximo */
##ex.3
/* [ 3 ]
Dada uma lista duplamente encadeada, reverter a ordem de seus itens, sem a
utilização de uma nova lista.
*/
void reverterLista(Lista* l);
Exemplo:
0, 1, 2, 3, 4, 5, 6, 7;
7, 6, 5, 4, 3, 2, 1, 0;
##ex.4
/* [ 5 ]
Liberar memória de todos os itens armazenados na lista.
*/
void freeLista(Lista* l);
##ex.5
/*
Dara uma lista duplamente encadeada, verificar se ela representa um palíndromo
Definição:
Palíndromo é uma palavra, uma frase, ou lista qualquer que quando
percorrida da esquerda para direita, ou da direita para a esquerda
produza a mesma sequência.
Exemplo:
"Roma tem amor",
"Socorram-me, subi no ônibus em Marrocos",
"A mãe te ama".
*/
bool verificaPalindromo(Lista* l);
Exemplo:
L = 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1
true;
L = 1, 2, 3, 4, 5, 5, 4, 3, 2, 1
true;
L = 1, 2, 3, 4, 5, 6, 7, 4, 3, 2, 1
false;