Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct {
- int item;
- struct lista_elemen *prox;
- }lista_elem;
- typedef struct {
- lista_elem *inicio;
- lista_elem *fim;
- }lista;
- void create(lista *l)
- {
- l->inicio = NULL;
- l->fim = NULL;
- }
- void retirar_fim(lista *l)
- {
- int valor;
- lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
- aux = l->inicio;
- if (lista_vazia(l))
- {
- printf("Lista vazia!");
- }
- else
- {
- if (aux != l->fim)
- {
- while(aux->prox != l->fim)
- {
- aux = aux->prox;
- }
- l->fim = aux;
- aux = aux->prox;
- l->fim->prox = NULL;
- valor = aux->item;
- free(aux);
- printf("O %d foi removido com sucesso!", valor);
- }
- else
- {
- valor = aux->item;
- l->inicio = NULL;
- l->fim = NULL;
- free(aux);
- printf("O %d foi removido com sucesso!", valor);
- }
- }
- }
- void retirar_comeco(lista *l)
- {
- int valor;
- lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
- aux = l->inicio;
- if (lista_vazia(l))
- {
- printf("Lista vazia!");
- }
- else
- {
- if (aux != l->fim)
- {
- valor = aux->item;
- l->inicio = aux->prox;
- aux->prox = NULL;
- free(aux);
- printf("O %d foi removido com sucesso!", valor);
- }
- else
- {
- valor = aux->item;
- l->inicio = NULL;
- l->fim = NULL;
- free(aux);
- printf("O %d foi removido com sucesso!", valor);
- }
- }
- }
- void retirar_meio(lista *l, int retirar)
- {
- int valor;
- lista_elem *ant = (lista_elem *)malloc(sizeof(lista_elem));
- lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
- ant = l->inicio;
- aux = ant->prox;
- while(aux->item != retirar)
- {
- ant = ant->prox;
- aux = ant->prox;
- }
- aux = ant->prox;
- valor = aux->item;
- ant->prox = aux->prox;
- aux->prox = NULL;
- free(aux);
- printf("O valor %d foi removido com sucesso!", valor);
- }
- void add_final(lista *l)
- {
- int valor = receber_valor();
- lista_elem *novo = (lista_elem *)malloc(sizeof(lista_elem));
- novo->prox = NULL;
- novo->item = valor;
- if (lista_vazia(l))
- {
- l->inicio = novo;
- }
- else
- {
- l->fim->prox = novo;
- }
- l->fim = novo;
- printf("O valor %d foi listado com sucesso!", l->fim->item);
- }
- void add_comeco(lista *l)
- {
- int valor = receber_valor();
- lista_elem *novo = (lista_elem *)malloc(sizeof(lista_elem));
- novo->item = valor;
- if(lista_vazia(l))
- {
- novo->prox = NULL;
- l->fim = novo;
- }
- else
- {
- novo->prox = l->inicio;
- }
- l->inicio = novo;
- printf("%d adicionado com sucesso!", valor);
- }
- void add_meio(lista *l, int antecessor)
- {
- int valor = receber_valor();
- lista_elem *novo = (lista_elem*)malloc(sizeof(lista_elem));
- novo->item = valor;
- lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
- aux = l->inicio;
- while(aux->item != antecessor)
- {
- aux = aux->prox;
- }
- if (aux == NULL)
- {
- printf("Antecessor invalido!");
- }
- else
- {
- novo->prox = aux->prox;
- aux->prox = novo;
- printf("%d colocado com sucesso!", novo->item);
- }
- }
- int lista_vazia(lista *l)
- {
- if (l->inicio == NULL)
- return 1;
- else
- return 0;
- }
- void mostrar(lista *l)
- {
- if(lista_vazia(l))
- {
- printf("Lista vazia!");
- }
- else
- {
- lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
- aux = l->inicio;
- while(aux != NULL)
- {
- printf("%d ", aux->item);
- aux = aux->prox;
- }
- }
- }
- int receber_valor()
- {
- int valor;
- printf("Digite o valor para ser listado: ");
- fflush(stdin);
- scanf("%d", &valor);
- return valor;
- }
- void menu(lista *l)
- {
- int opc;
- int antecessor;
- do
- {
- system("cls");
- printf("1 - Adicionar no final\n");
- printf("2 - Adicionar no comeco\n");
- printf("3 - Adicionar no meio\n");
- printf("4 - Remover do final\n");
- printf("5 - Remover do comeco\n");
- printf("6 - Remover do meio\n");
- printf("7 - Mostrar a lista\n");
- printf("8 - Sair\n");
- printf("\nDigite a opcao: ");
- fflush(stdin);
- scanf("%d", &opc);
- system("cls");
- switch(opc)
- {
- case 1:
- add_final(l);
- break;
- case 2:
- add_comeco(l);
- break;
- case 3:
- if (lista_vazia(l))
- {
- add_final(l);
- }
- else
- {
- printf("Digite o antecessor: ");
- fflush(stdin);
- scanf("%d", &antecessor);
- add_meio(l, antecessor);
- }
- break;
- case 4:
- retirar_fim(l);
- break;
- case 5:
- retirar_comeco(l);
- break;
- case 6:
- if (lista_vazia(l))
- {
- retirar_fim(l);
- }
- else
- {
- printf("Digite o valor que deseja retirar: ");
- fflush(stdin);
- scanf("%d", &antecessor);
- retirar_meio(l, antecessor);
- }
- break;
- case 7:
- mostrar(l);
- break;
- }
- if (opc != 8)
- getch();
- }while(opc != 8);
- }
- int main()
- {
- lista *l = (lista*)malloc(sizeof(lista));
- create(l);
- menu(l);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement