Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com pilha em lista em C


kullas1

Pergunta

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 para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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?

Editado por britivaldo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...