====== O TAD Lista ======
Este trabalho visa implementar um Tipo Abstrato de dado (TAD) "lista de inteiros" usando [[listas encadeadas]].
===== Atividade =====
Você deve implementar um TAD "lista de números inteiros" usando lista encadeada dupla não-circular. Essa lista pode ser vista de forma abstrata como se fosse um vetor de N inteiros com posições de 0 a N-1.
As seguintes operações devem ser suportadas:
* ''cria (lista)'': cria uma nova lista
* ''destrói (lista)'': esvazia e destrói a lista
* ''insere (lista, elemento, posição)'': insere um novo elemento na posição indicada
* ''elemento = retira (lista, posição)'': retira o elemento da posição indicada
* ''elemento = consulta (lista, posição)'': informa o valor do elemento na posição indicada, sem retirá-lo
* ''posição = procura (lista, elemento)'': informa a posição da 1ª ocorrência do elemento informado
* ''vazia (lista)'' : informa se a lista está vazia
* ''tamanho (lista)'' : informa o número atual de elementos na lista
Os arquivos necessários para desenvolver este trabalho estão {{ :prog1:tp4.tgz |neste arquivo}}. Eles são:
* ''liblista.h'': arquivo de cabeçalho com os protótipos das funções (**não deve ser alterado**).
* ''liblista.c'': arquivo que implementa as operações sobre as listas ("esqueleto" a completar).
* ''tp4.c'': código que usa a biblioteca ("esqueleto" a completar).
* ''makefile'': arquivo do utilitário "make" para compilar seu código.
==== Exemplo de funcionamento ====
O programa de teste em ''tp4.c'' deve executar o seguinte algoritmo:
cria uma lista L vazia
imprime L
insere no final de L os valores 10, 11, 12, 13 e 14, nessa ordem
imprime L
insere no início de L o valor 32
insere no início de L o valor 64
imprime L
insere no meio de L o valor 103
insere no meio de L o valor 47
imprime L
imprime o conteúdo das posições início, 5, última e 100 de L
imprime as posições dos valores 5, 10 e 14 em L
retira de L os valores 12, 103 e 79
imprime L
enquanto L não estiver vazia
retira o primeiro valor de L e o imprime
retira o último valor de L e o imprime
imprime L
fim enquanto
destrói L
encerra
A saída correspondente na tela deve ser:
LISTA: [ ] (0 elementos)
LISTA: [ 10 11 12 13 14 ] (5 elementos)
LISTA: [ 64 32 10 11 12 13 14 ] (7 elementos)
LISTA: [ 64 32 10 103 47 11 12 13 14 ] (9 elementos)
VALOR NA POSICAO 0: 64
VALOR NA POSICAO 5: 11
VALOR NA POSICAO -1: 14
VALOR NA POSICAO 100 NAO ENCONTRADO
POSICAO DO VALOR 5: NAO ENCONTRADO
POSICAO DO VALOR 10: 2
POSICAO DO VALOR 14: 8
RETIRA VALOR 12 DA POSICAO 6
RETIRA VALOR 103 DA POSICAO 3
RETIRA VALOR 79 NAO ENCONTRADO
LISTA: [ 64 32 10 47 11 13 14 ] (7 elementos)
RETIRADO PRIMEIRO: 64
RETIRADO ULTIMO: 14
LISTA: [ 32 10 47 11 13 ] (5 elementos)
RETIRADO PRIMEIRO: 32
RETIRADO ULTIMO: 13
LISTA: [ 10 47 11 ] (3 elementos)
RETIRADO PRIMEIRO: 10
RETIRADO ULTIMO: 11
LISTA: [ 47 ] (1 elementos)
RETIRADO PRIMEIRO: 47
RETIRADO ULTIMO: NAO ENCONTRADO
LISTA: [ ] (0 elementos)
===== Entregáveis =====
Entregue um único arquivo ''tp4.tgz'' que contenha por sua vez os seguintes arquivos:
* ''liblista.h'': o mesmo arquivo fornecido, não o modifique
* ''liblista.c'': sua implementação das funções definidas em ''liblista.h''
* ''tp4.c'': implementa a função ''main'' que usa a lista
* ''makefile''
Critérios de avaliação:
* Funcionar corretamente m(
* Não ter problemas de memória (testar com Valgrind)
* Respeitar o conceito de TAD
* Usar funções para evitar repetição de blocos de código
* Respeitar estilo (endentação, espaçamento, nomes de variáveis)
* Usar comentários (nem demais, nem de menos)
* ... (outros que se fizerem necessários)