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);
}
Pergunta
kullas1
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
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.