Escolar Documentos
Profissional Documentos
Cultura Documentos
Lista Linear
Estrutura de representao de informao em que os elementos so mantidos de forma linear, ou seja, dispostos um aps o outro
Ex.
Lista Linear
Operao Bsica em Listas: Busca
por
ordenadas
Definir(Lista *L);
Inserir(tipo_elem e, Lista *L);
Inserir elemento:
void
Localizar(tipo_elem e, Lista *L); a posio do elemento na lista retorna um valor invlido caso ele no esteja na lista
retorna
Apagar a lista:
void
Apagar(Lista *L);
Destruir(Lista *L);
Destruir a lista:
void
lista
Fim(Lista *L);
Encadeada:
seqncia
Encadeada:
de ponteiros unidirecional
Encadeamento
Duplamente
Encadeada:
de ponteiros bidirecional
Encadeamento
Implementao a Seguir:
Exemplo
typedef struct{ Tipo_1 chave; Tipo_2 info; } elem; typedef struct{ int nelem; elem A[MAX+1]; } Lista; Lista L;
}
int Tamanho(Lista *L){ /* O(1) */
elem* Buscar(int p, Lista *L){ /* Retorna elem. da posio p, ou elem. invlido se p invlida */ if (p >= Fim(L) || p < 1 || Lista_vazia(L)) return x; /* retorna elemento invlido */ else return &(L->A[p]); /* O(1) */
FALSE;
L->A[atual-1] = L->A[atual]; L->nelem--; } return TRUE; } /* O(L.nelem) no pior caso. Qual o pior caso? */
typedef struct{ int nelem; tipo_elem A[MAX+1]; } Lista; /* Tipo da Lista */ Lista L; /* Exemplo de Declarao*/
} /* Tipo do Elemento */ class List { int nelem; tipo_elem A[MAX+1]; } /* Tipo da Lista */
/*
O(1)
*/
int Lista::Tamanho(){
/*
O(1)
*/
elem* Buscar(int p, Lista *L){ /* Retorna elem. da posio p, ou elem. invlido se p invlida */ if (p >= Fim(L) || p < 1 || Lista_vazia(L)) return x; /* retorna elemento invlido */ else return L->A[p]; /* O(1) */
Elem* List::Buscar(int p){ /* Retorna elem. da posio p, ou elem. invlido se p invlida */ if (p >= Fim() || p < 1 || Lista_vazia()) return null; /* retorna invlido */ else return &A[p]; /* O(1) */
FALSE;
L->A[atual-1] = L->A[atual]; L->nelem--; } return TRUE; } /* O(L.nelem) no pior caso. Qual o pior caso? */
FALSE;
Checando
1.
2.
3.
4.
Modifique a operao Remover do TAD Lista Esttica Seqencial para que esta retorne o elemento removido e no um valor lgico. Modifique a operao Localizar do TAD Lista Esttica Seqencial para que esta receba apenas a chave do elemento procurado e no o elemento todo. Modifique a operao Localizar do TAD Lista Esttica Seqencial para que esta retorne um ponteiro para uma cpia do elemento localizado, cpia esta alocada dinamicamente em memria. Retorne NULL se o elemento no existir na lista. Implemente o TAD Lista Esttica Seqencial em C, de forma modular, com mdulos separados de interface (arquivo .h) e implementao (arquivo .c), e faa alguns testes.aula
Checando
5.
Modifique a oImplemente uma nova operao de insero para o TAD Lista Esttica Seqencial para substituir aquela que foi apresentada anteriormente nesses slides (Inserir). Essa nova operao deve inserir o novo elemento de forma a manter sempre a lista ordenadapelas chaves dos seus elementos.
5.
OBS: Como a lista deve ser mantida ordenada, essa operao deve determinar a posio de insero automaticamente, no receb-la como parmetro. Nesse exerccio, faa isso percorrendo um a um os elementos da lista a partir do incio (depois vide exerccio 7).
Checando
6.
Considerando que a operao de insero utilizada no TAD Lista Esttica Seqencial aquela implementada no exerccio 5, reimplemente tambm a operao Localizar do TAD para que esta faa uso do fato da lista estar ordenada para realizar uma busca muito mais eficiente (binria) pelo elemento desejado.
6.
Qual o tempo de execuo assinttico (BIG-O) de pior caso da operao acima ? Qual o pior caso? Justifique.
7.
Estando a nova operao de localizao via busca binria do exerccio 6 disponvel, possvel utiliz-la para simplificar a implementao da operao de insero ordenada do exerccio 5? Explique.
Bibliografia
N. Ziviani, Projeto de Algoritmos, Thomson, 2a. Edio, 2004 A. M. Tenembaum et al., Data Structures Using C, Prentice-Hall, 1990 J. L. Szwarcfiter & L. Markenzon, Estruturas de Dados e seus Algoritmos, LTC, 1994
Perguntas?