Buscar

Adapte a Lista Simplesmente Encadeada desenvolvida em sala de aula (ou proponha a sua própria) e a transforme em uma Lista Circular.

Adapte a Lista Simplesmente Encadeada desenvolvida em sala de aula (ou

proponha a sua própria) e a transforme em uma Lista Circular. Uma Lista Circular

possui a característica de que o seu último elemento aponta para o primeiro. Adapte

todas as operações necessárias para que tal característica seja mantida

corretamente.

💡 4 Respostas

User badge image

Leonardo Pereira Dos Santos de Oliveira

Facilitaria muito se você postasse o que foi desenvolvido em sala de aula, ou pelo menos que linguage estamos falando.

0
Dislike0
User badge image

Andre Smaira

Para responder essa pergunta devemos colocar em prática nosso conhecimento sobre Algoritmo e Estrutura de Dados.


A estrutura utilizada em uma lista circular é do mesmo tipo de uma lista dinâmica encadeada comum, então será utilizada uma estrutura simples com dados em números inteiros.

struct no {

    int info;

    struct no * prox;

};

typedef struct no *Lista;

Quando um ponteiro deste tipo de lista está vazio ele deve valer "NULL", desta forma para poder inicializar uma lista nova deve-se sempre fazer com que esta seja nula.

void inicializa_lista(Lista *l)

{

    *l = NULL;

}

Este tipo de lista facilita a inserção no fim da lista, e deve-se sempre lembrar também que o ponteiro da lista deve apontar para o último elemento da lista, desta forma a operação de inserção fica conforme apresentado pela função a seguir.

int insere_elemento_fim(Lista *l, int elem)

{

    Lista aux;

    aux = (Lista) malloc(sizeof(struct no));

    if (aux == NULL)

        return 0;

    aux->info = elem;

    if(lista_vazia(*l))

    {

        *l = aux;

        (*l)->prox = *l;

        return 1;

    }

    aux->prox = (*l)->prox;

    (*l)->prox = aux;

    *l = aux;

    return 1;

}

Para remover um elemento deve-se verificar se a lista está vazia, pois neste caso não será possível remover nenhum elemento, além disto, deve-se verificar se a lista contém um único elemento, pois neste caso ao remove-lo a lista ficará vazia e deverá ser anulada, caso nenhum dos casos anteriores sejam verdadeiros deve-se fazer com que o último elemento da lista aponte para o segundo elemento e liberar o espeço de memória ocupado por ele. Sendo assim a função remove é apresentada a seguir.

int remove_elemento_inicio(Lista *l)

{

    Lista aux;

    if(lista_vazia(*l))

        return 0;

    aux = (*l)->prox;

    if(aux->prox == aux)

    {

        *l = NULL;

        free(aux);

        return 1;

    }

    (*l)->prox = aux->prox;

    free(aux);

    return 1;

}


Portanto, a partir de um código de uma lista encadeada foi adaptada para que ela fosse um código de uma lista circular. Desta forma, o que foi apresentado acima são as principais funções utilizadas neste tipo de lista.

0
Dislike0
User badge image

Andre Smaira

Para responder essa pergunta devemos colocar em prática nosso conhecimento sobre Algoritmo e Estrutura de Dados.


A estrutura utilizada em uma lista circular é do mesmo tipo de uma lista dinâmica encadeada comum, então será utilizada uma estrutura simples com dados em números inteiros.

struct no {

    int info;

    struct no * prox;

};

typedef struct no *Lista;

Quando um ponteiro deste tipo de lista está vazio ele deve valer "NULL", desta forma para poder inicializar uma lista nova deve-se sempre fazer com que esta seja nula.

void inicializa_lista(Lista *l)

{

    *l = NULL;

}

Este tipo de lista facilita a inserção no fim da lista, e deve-se sempre lembrar também que o ponteiro da lista deve apontar para o último elemento da lista, desta forma a operação de inserção fica conforme apresentado pela função a seguir.

int insere_elemento_fim(Lista *l, int elem)

{

    Lista aux;

    aux = (Lista) malloc(sizeof(struct no));

    if (aux == NULL)

        return 0;

    aux->info = elem;

    if(lista_vazia(*l))

    {

        *l = aux;

        (*l)->prox = *l;

        return 1;

    }

    aux->prox = (*l)->prox;

    (*l)->prox = aux;

    *l = aux;

    return 1;

}

Para remover um elemento deve-se verificar se a lista está vazia, pois neste caso não será possível remover nenhum elemento, além disto, deve-se verificar se a lista contém um único elemento, pois neste caso ao remove-lo a lista ficará vazia e deverá ser anulada, caso nenhum dos casos anteriores sejam verdadeiros deve-se fazer com que o último elemento da lista aponte para o segundo elemento e liberar o espeço de memória ocupado por ele. Sendo assim a função remove é apresentada a seguir.

int remove_elemento_inicio(Lista *l)

{

    Lista aux;

    if(lista_vazia(*l))

        return 0;

    aux = (*l)->prox;

    if(aux->prox == aux)

    {

        *l = NULL;

        free(aux);

        return 1;

    }

    (*l)->prox = aux->prox;

    free(aux);

    return 1;

}


Portanto, a partir de um código de uma lista encadeada foi adaptada para que ela fosse um código de uma lista circular. Desta forma, o que foi apresentado acima são as principais funções utilizadas neste tipo de lista.

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais

Outros materiais