How do I leave this list double-chained and circular?

2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Tipo_Lista{
    char cod[50] ;
    struct Tipo_Lista *Prox;
    struct Tipo_Lista *Ant;
};
struct Tipo_Lista *Primeiro;
struct Tipo_Lista *Ultimo;

void FLVazia(){
    struct Tipo_Lista *aux;
    aux = (struct Tipo_Lista*)malloc(sizeof(struct Tipo_Lista));
    Primeiro = aux;
    Ultimo = Primeiro;
    Primeiro->Ant = NULL;

}
void Insere(char *x){
    struct Tipo_Lista *aux;
    aux = (struct Tipo_Lista*)malloc(sizeof(struct Tipo_Lista));
    strcpy(aux->cod,x);
    Ultimo->Prox = aux;
    aux->Ant = Ultimo;
    Ultimo = Ultimo->Prox;
    aux->Prox = NULL;
}
void Imprime(){
    struct Tipo_Lista *aux;
    aux = Primeiro->Prox;
    while(aux != NULL){
        printf("Item = %s\n",aux->cod);
        aux = aux->Prox;
    }
}
void Imprime_Atras(){
    struct Tipo_Lista *aux;
    aux = Ultimo;
    while(aux->Ant != NULL){
        printf("Item = %s\n",aux->cod);
        aux = aux->Ant;
    }
}
void Pesquisa(char *x){
    struct Tipo_Lista *aux;
    struct Tipo_Lista *aux2;

    int flag = 0;
    aux = Primeiro->Prox;
    while(aux != NULL){



        if(strcmp (aux->cod,x) == 0){
            aux2 = aux->Ant;
            aux = aux->Prox;
            printf("Achou item %s seu anterior é %s seu próximo é %s ", x,aux2->cod,aux->cod);
            flag = 1;
            aux = NULL;
        }
        else 
        aux = aux->Prox;
    }
    if(flag == 0){
        printf("Item %s Não se encontra nesta Lista!!!!",x);
    }
}

void Remove(char *x){
    int retorno;
    struct Tipo_Lista *aux;
    int flag = 0;
    aux = Primeiro->Prox;
    while(aux != NULL){
        retorno = strcmp (aux->cod,x);
        if(retorno == 0){
            if(aux->Prox == NULL){
                Ultimo = aux->Ant;
                aux->Ant->Prox = NULL;
                aux = NULL;
                flag = 1;
            }
            else{

            printf("Removeu item %s\n",x);
            aux->Ant->Prox = aux->Prox;
            aux->Prox->Ant = aux->Ant;
            aux = NULL;
            flag = 1;
        }
        }
        else
        aux = aux->Prox;
    }
    free(aux);
    if (flag == 0){
        printf("Item %s Não se encontra nesta Lista!!",x);
    }
}


int main(int argc, char *argv[]) {
    char op = '2';
    int i;
    char codigo[50];
    FLVazia();
    while(op != '0'){
        printf("Encontre com o codigo: ");
        gets(codigo);
        Insere(codigo);
        printf("\n\n\nContinuar com o cadastro? 1 = sim 0 = Não: \n\n");
        op = getch();
    }
    Imprime();
    printf("\n\n Entre com um item para pesquisa: ");
    gets(codigo);
    Pesquisa(codigo);
    printf("Item a ser removido: ");
    gets(codigo);
    Remove(codigo);
    Imprime();
    getch();
    Imprime_Atras();
    getch();
        return 0;
}
    
asked by anonymous 11.08.2016 / 16:40

1 answer

1

Next the last element has to point to the list head and the list head to the last element, you can pick up the list head pointer by picking the field next to the penultimate element in the list.

    
01.09.2016 / 02:16