Jump to content
Fórum Script Brasil
  • 0

Ajuda com pilha em lista em C


Question

Tenho esse código em C que permite adicionar no inicio e no fim da lista e remover do inicio da lista, precisava criar um método para remover do fim da lista, porém não estou conseguindo, alguém pode me ajudar?

    
   

 typedef struct abstracao
    {
        int valor;
        struct abstracao *prox;
    }lista;
    
    lista *inicio;
    lista *aux;
    lista *fim;
    
    int op, x, contador;
    
    void InserirInicio(int a)
    {
        printf(" ---- -INSERIR- ----");
        struct abstracao *novo = malloc(sizeof(struct abstracao));
    
        novo->valor = a;
    
        if (inicio ==NULL)
        {
            inicio = novo;
            fim = novo;
            fim->prox = NULL;
        }
        else
        {
            novo->prox = inicio;
            inicio = novo;
        }
        contador++;
    }
    
    void Apresentar()
    {
        if(inicio == NULL)
            printf("Lista esta VAZIA.\n");
        else
        {
            aux = inicio;
            printf("\n");
    
            while(aux!=NULL)
            {
                printf(" %d - ", aux->valor);
                aux = aux->prox;
            }printf("\n");
            printf("Quantidade de elemento da lista: %d\n", contador);
        }
    }
    
    void RemoverInicio()
    {
        aux = inicio;
        inicio = aux->prox;
        free(aux);
        aux = inicio;
    }
    
    void InserirFinal(int a)
    {
        printf(" ---- - INSERIR- ----\n");
            struct abstracao *novo = malloc(sizeof(struct abstracao));
    
            novo->valor = a;
    
            if(inicio==NULL)
            {
                inicio = novo;
                fim = novo;
                fim->prox = NULL;
            }
            else
            {
                fim->prox = novo;
                fim=novo;
                fim->prox = NULL;
            }
    }
    
    void main()
    {
        inicio = NULL;
        aux = NULL;
    
        do
        {
            printf(" --- Digite uma opção para lista --- \n");
            printf("1 - Inserir no INICIO\n");
            printf("2 - Apresentar\n");
            printf("3 - Remover\n");
            printf("4 - Inserir FINAL\n");
            printf("5 - Remover FINAL\n");
            scanf("%d", &op);
    
            switch(op)
            {
                case 1:
                {
                    printf("Digite um valor para inserir na lista: \n");
                    scanf("%d", &x);
                    InserirInicio(x);
                }break;
    
                case 2:
                {
                    Apresentar();
                }break;
    
                case 3:
                {
                    RemoverInicio();
                }break;
    
                case 4:
                {
                    printf("Digite um valor para inserir na lista: \n");
                    scanf("%d", &x);
                    InserirFinal(x);
                }break;
    
                case 5:
                {
                    RemoverFinal();
                }
            }
    
        }while (op<6);
    }

 

Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Não entendi!

 

Entretanto,

os diferentes tipos de estrutura de dados tem operações que diferentes entre elas, essa regrinha é tudo que nos permite identificar uma fila, uma pilha, e uma lista.

Uma pilha que também é uma fila é, por conta, uma lista.

A únicas operações comuns de lista permitida a pilhas e filas é:  listar e riscar (no fim).

 

Nas Pilhas

struct LISTA  *minha_pilha = NULL;

listar( &minha_pilha , 10 , FIM ); // equivalente à empilhar( x )
listar( &minha_pilha , 11 , FIM ); //
listar( &minha_pilha , 12 , FIM ); //

int numero = 0;
riscar( &minha_pilha , &numero , FIM ); // equivalente à desempilhar( x )

 

O resultado é numero com : 12,

e a Pilha com : { 10 , 11 }.

Se desempilhar em seguida terá 11 e { 10 }, respectivamente.

 

Entendeu?

Edited by britivaldo
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      149403
    • Total Posts
      645891
×
×
  • Create New...