From 2f52f552ca0dd854586dfafa7fc152f49978da5b Mon Sep 17 00:00:00 2001 From: "Ana Beatriz R. Chagas" <121564402+anabeatrizchagas@users.noreply.github.com> Date: Tue, 10 Jan 2023 16:16:51 -0300 Subject: [PATCH] new file: 6-lista-lig-din-cir-cab.c --- 6-lista-lig-din-cir-cab.c | 215 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 6-lista-lig-din-cir-cab.c diff --git a/6-lista-lig-din-cir-cab.c b/6-lista-lig-din-cir-cab.c new file mode 100644 index 0000000..fb0416a --- /dev/null +++ b/6-lista-lig-din-cir-cab.c @@ -0,0 +1,215 @@ +// importando pacotes + +#include +#include +#include +#include + +// implementando estrutura + +typedef struct str +{ + int chave; + struct str* prox; + +} NO; + +typedef struct +{ + NO *cabeca; + +} LISTA_CIRC_COM_CABECA; + +// declarando funcoes + +void inicializarLista(LISTA_CIRC_COM_CABECA *l); // ok +void exibirLista(LISTA_CIRC_COM_CABECA *l); // ok + +int tam(LISTA_CIRC_COM_CABECA *l); + +NO* retornaPrimeiroElem(LISTA_CIRC_COM_CABECA *l); // ok +NO* retornaEnesimoElem(LISTA_CIRC_COM_CABECA *l, int n); // ok +NO* retornaUltimoElem(LISTA_CIRC_COM_CABECA *l); // ok +NO* buscaSeqOrd(LISTA_CIRC_COM_CABECA *l, int ch, NO** ant); // ok + +bool insercaoOrdSemRep(LISTA_CIRC_COM_CABECA *l, int ch); // ok +bool exclusaoDeCh(LISTA_CIRC_COM_CABECA *l, int ch); // ok +bool destruirLista(LISTA_CIRC_COM_CABECA *l); + +// implementando funcoes + +void inicializarLista(LISTA_CIRC_COM_CABECA *l) +{ + l->cabeca = (NO*) malloc(sizeof(NO)); + l->cabeca->prox = l->cabeca; + +} + +void exibirLista(LISTA_CIRC_COM_CABECA *l) +{ + NO* aux = l->cabeca->prox; + + while(aux != l->cabeca) + { + printf("%d ", aux->chave); + aux = aux->prox; + + } + +} + +int tam(LISTA_CIRC_COM_CABECA *l) +{ + int tamanho = 0; + NO* aux = l->cabeca->prox; + + while(aux != l->cabeca) + { + aux = aux->prox; + tamanho++; + + } + + return (tamanho); + +} + +NO* retornaPrimeiroElem(LISTA_CIRC_COM_CABECA *l) +{ + if(l->cabeca == l->cabeca->prox) return (NULL); // lista vazia + else return (l->cabeca->prox); // lista tem elem e deve-se ignorar a cabecaeca + +} + +NO* retornaEnesimoElem(LISTA_CIRC_COM_CABECA *l, int n) // ? +{ + int cont = 1; + NO* aux = l->cabeca->prox; + + while(aux != l->cabeca && cont < n) + { + aux = aux->prox; + cont++; + + } + + if(l->cabeca != l->cabeca->prox && cont == n) return (aux); // achou o enesimo + else return (NULL); // lista vazia ou nao chega a ter n elems + +} + +NO* retornaUltimoElem(LISTA_CIRC_COM_CABECA *l) +{ + if(l->cabeca == l->cabeca->prox) + { + return (NULL); // lista vazia + + } else { + + NO* aux = l->cabeca->prox; + + while(aux->prox != l->cabeca) aux = aux->prox; + + return (aux); + + } + +} + +NO* buscaSeqOrd(LISTA_CIRC_COM_CABECA *l, int ch, NO** ant) +{ + + *ant = l->cabeca; + l->cabeca->chave = ch; + NO* aux = l->cabeca->prox; + + while(aux->chave < ch) + { + *ant = aux; + aux = aux->prox; + + } + + if(aux != l->cabeca && ch == aux->chave) return (aux); + else return (NULL); + +} + +bool insercaoOrdSemRep(LISTA_CIRC_COM_CABECA *l, int ch) +{ + NO *existe, *ant; + existe = buscaSeqOrd(l, ch, &ant); + + if(existe != NULL) + { + return (false); // elem ja existe + + } else { + + NO* novo = (NO*) malloc(sizeof(NO)); + novo->chave = ch; + + novo->prox = ant->prox; + ant->prox = novo; + + return(true); + + } + +} + +bool exclusaoDeCh(LISTA_CIRC_COM_CABECA *l, int ch) +{ + NO *existe, *ant, *aux; + existe = buscaSeqOrd(l, ch, &ant); + + if(l->cabeca == l->cabeca->prox || existe == NULL) + { + return (false); // lista vazia ou elem inexistente + + } else { + + aux = existe; + ant->prox = existe->prox; + free(aux); + + return (true); + + } + +} + +bool destruirLista(LISTA_CIRC_COM_CABECA *l) +{ + if(l->cabeca == l->cabeca->prox) + { + return (false); // lista ja esta vazia + + } else { + + NO *atual, *prox; + atual = l->cabeca->prox; + + while(atual != l->cabeca) + { + prox = atual->prox; + free(atual); + atual = prox; + + } + + l->cabeca->prox = l->cabeca; + + return (true); + + } + +} + +// funcao main + +int main() +{ + + return 0; +} \ No newline at end of file