Skip to content

Commit

Permalink
modified: 3-lista-lig-din-v1.c
Browse files Browse the repository at this point in the history
  • Loading branch information
anabeatrizchagas committed Jan 5, 2023
1 parent 29c8285 commit 8f4f23b
Showing 1 changed file with 178 additions and 2 deletions.
180 changes: 178 additions & 2 deletions 3-lista-lig-din-v1.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,18 @@ void insercaoSimples(NO **p, int ch);
NO* primeiroElem(NO *p);
NO* ultimoElem(NO *p);
NO* enesimoElem(NO *p, int n);
NO* buscaSeq(NO *p, int ch, NO **ant);
NO* buscaSeqOrd(NO *p, int ch, NO **ant); // funciona para lista em ordem crescente e sem rep
NO* buscaSeqSimples(NO *p, int ch); // funciona para lista em qualquer ordem e sem rep
NO* elemComMaiorChave(NO *p); // funciona para lista em qualquer ordem e sem rep
NO* elemComMenorChave(NO *p); // funciona para lista em qualquer ordem e sem rep

int tam(NO *p);
int somaDasChaves(NO *p);

bool insercaoOrdSemRep(NO** p, int ch);
bool exclusaoCh(NO **p, int ch);
bool destruicaoLista(NO **p);


// implementando funcoes

Expand Down Expand Up @@ -124,7 +133,7 @@ int tam(NO *p)

}

NO* buscaSeq(NO *p, int ch, NO **ant)
NO* buscaSeqOrd(NO *p, int ch, NO **ant)
{
if (p == NULL) return (NULL); // lista vazia

Expand All @@ -145,6 +154,173 @@ NO* buscaSeq(NO *p, int ch, NO **ant)

}

bool insercaoOrdSemRep(NO** p, int ch)
{
NO **ant, *aux, *existe;
aux = *p;
existe = buscaSeqOrd(aux, ch, ant);

if(existe != NULL) return (false); // no ja existente na lista

NO *novo = (NO*) malloc(sizeof(NO));
novo->chave = ch;

if(*p == NULL)
{
*p = novo;
novo->prox = NULL;

} else {

if(*ant == NULL) // insercao no primeiro no
{
novo->prox = aux;
*p = novo;

} else { // insercao quando tem anterior

aux = *ant;
novo->prox = aux->prox;
aux->prox = novo;

}

}

return (true);

}

bool exclusaoCh(NO **p, int ch)
{
NO *existe, *aux, *ant;
aux = *p;
existe = buscaSeqOrd(aux, ch, &ant);

if(aux == NULL || existe == NULL) // lista vazia ou elem inexistente
{
return (false);

} else {

aux = existe;

if(ant == NULL) // elem e o primeiro da lista
{
*p = existe->prox;
free(aux);

} else { // elem possui anterior

ant->prox = existe->prox;
free(aux);

}

return (true);

}

}

bool destruicaoLista(NO **p)
{
NO *aux, *prox;
aux = *p;

if(*p == NULL)
{
return (false); // lista ja e vazia

} else { // lista tem elem

while(aux != NULL)
{
prox = aux->prox;
free(aux);
aux = prox;

}

inicializacaoLista(p);

return (true);

}

}

NO* buscaSeqSimples(NO *p, int ch)
{
NO *aux = p;

while(aux != NULL)
{
if(aux->chave == ch) return (aux);
aux = aux->prox;

}

return (NULL);

}

NO* elemComMaiorChave(NO *p)
{
if(p == NULL) return (NULL); // lista vazia;

NO *aux, *maior;
aux = p;
maior = p;

while(aux != NULL)
{
if(maior->chave < aux->chave) maior = aux;
aux = aux->prox;

}

return (maior);

}

NO* elemComMenorChave(NO *p)
{
if(p == NULL) return (NULL); // lista vazia

NO *aux, *menor;
aux = p;
menor = p;

while(aux != NULL)
{
if(menor->chave > aux->chave) menor = aux;
aux = aux->prox;

}

return (menor);

}

int somaDasChaves(NO *p)
{
if(p == NULL) return (-1); // lista vazia

NO *aux = p;
int soma = 0;

while (aux != NULL)
{
soma = soma + aux->chave;
aux = aux->prox;

}

return (soma);

}

// funcao main

int main()
Expand Down

0 comments on commit 8f4f23b

Please sign in to comment.