Advertisement
feehgodoi08

Lista 1

Sep 23rd, 2019
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct {
  5.     int item;
  6.     struct lista_elemen *prox;
  7. }lista_elem;
  8.  
  9. typedef struct {
  10.     lista_elem *inicio;
  11.     lista_elem *fim;
  12. }lista;
  13.  
  14.  
  15. void create(lista *l)
  16. {
  17.     l->inicio = NULL;
  18.     l->fim = NULL;
  19. }
  20.  
  21.  
  22. void retirar_fim(lista *l)
  23. {
  24.     int valor;
  25.     lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
  26.     aux = l->inicio;
  27.  
  28.     if (lista_vazia(l))
  29.     {
  30.         printf("Lista vazia!");
  31.     }
  32.     else
  33.     {
  34.         if (aux != l->fim)
  35.         {
  36.             while(aux->prox != l->fim)
  37.             {
  38.                 aux = aux->prox;
  39.             }
  40.  
  41.             l->fim = aux;
  42.             aux = aux->prox;
  43.             l->fim->prox = NULL;
  44.             valor = aux->item;
  45.             free(aux);
  46.             printf("O %d foi removido com sucesso!", valor);
  47.         }
  48.         else
  49.         {
  50.             valor = aux->item;
  51.             l->inicio = NULL;
  52.             l->fim = NULL;
  53.             free(aux);
  54.  
  55.             printf("O %d foi removido com sucesso!", valor);
  56.         }
  57.     }
  58. }
  59.  
  60.  
  61. void retirar_comeco(lista *l)
  62. {
  63.     int valor;
  64.     lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
  65.     aux = l->inicio;
  66.  
  67.     if (lista_vazia(l))
  68.     {
  69.         printf("Lista vazia!");
  70.     }
  71.     else
  72.     {
  73.         if (aux != l->fim)
  74.         {
  75.             valor = aux->item;
  76.             l->inicio = aux->prox;
  77.             aux->prox = NULL;
  78.             free(aux);
  79.  
  80.             printf("O %d foi removido com sucesso!", valor);
  81.         }
  82.         else
  83.         {
  84.             valor = aux->item;
  85.             l->inicio = NULL;
  86.             l->fim = NULL;
  87.             free(aux);
  88.  
  89.             printf("O %d foi removido com sucesso!", valor);
  90.         }
  91.     }
  92. }
  93.  
  94.  
  95. void retirar_meio(lista *l, int retirar)
  96. {
  97.     int valor;
  98.  
  99.     lista_elem *ant = (lista_elem *)malloc(sizeof(lista_elem));
  100.     lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
  101.     ant = l->inicio;
  102.  
  103.     aux = ant->prox;
  104.  
  105.     while(aux->item != retirar)
  106.     {
  107.         ant = ant->prox;
  108.         aux = ant->prox;
  109.     }
  110.  
  111.     aux = ant->prox;
  112.     valor = aux->item;
  113.     ant->prox = aux->prox;
  114.     aux->prox = NULL;
  115.     free(aux);
  116.  
  117.     printf("O valor %d foi removido com sucesso!", valor);
  118. }
  119.  
  120.  
  121. void add_final(lista *l)
  122. {
  123.     int valor = receber_valor();
  124.  
  125.     lista_elem *novo = (lista_elem *)malloc(sizeof(lista_elem));
  126.  
  127.     novo->prox = NULL;
  128.     novo->item = valor;
  129.  
  130.     if (lista_vazia(l))
  131.     {
  132.         l->inicio = novo;
  133.     }
  134.     else
  135.     {
  136.         l->fim->prox = novo;
  137.     }
  138.     l->fim = novo;
  139.  
  140.     printf("O valor %d foi listado com sucesso!", l->fim->item);
  141. }
  142.  
  143.  
  144. void add_comeco(lista *l)
  145. {
  146.     int valor = receber_valor();
  147.  
  148.     lista_elem *novo = (lista_elem *)malloc(sizeof(lista_elem));
  149.  
  150.     novo->item = valor;
  151.  
  152.     if(lista_vazia(l))
  153.     {
  154.         novo->prox = NULL;
  155.         l->fim = novo;
  156.     }
  157.     else
  158.     {
  159.         novo->prox = l->inicio;
  160.     }
  161.  
  162.     l->inicio = novo;
  163.  
  164.     printf("%d adicionado com sucesso!", valor);
  165. }
  166.  
  167. void add_meio(lista *l, int antecessor)
  168. {
  169.     int valor = receber_valor();
  170.  
  171.     lista_elem *novo = (lista_elem*)malloc(sizeof(lista_elem));
  172.     novo->item = valor;
  173.  
  174.     lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
  175.     aux = l->inicio;
  176.  
  177.     while(aux->item != antecessor)
  178.     {
  179.         aux = aux->prox;
  180.     }
  181.  
  182.     if (aux == NULL)
  183.     {
  184.         printf("Antecessor invalido!");
  185.     }
  186.     else
  187.     {
  188.         novo->prox = aux->prox;
  189.         aux->prox = novo;
  190.         printf("%d colocado com sucesso!", novo->item);
  191.     }
  192. }
  193.  
  194.  
  195. int lista_vazia(lista *l)
  196. {
  197.     if (l->inicio == NULL)
  198.         return 1;
  199.     else
  200.         return 0;
  201. }
  202.  
  203.  
  204. void mostrar(lista *l)
  205. {
  206.     if(lista_vazia(l))
  207.     {
  208.         printf("Lista vazia!");
  209.     }
  210.     else
  211.     {
  212.         lista_elem *aux = (lista_elem *)malloc(sizeof(lista_elem));
  213.         aux = l->inicio;
  214.  
  215.         while(aux != NULL)
  216.         {
  217.             printf("%d ", aux->item);
  218.             aux = aux->prox;
  219.         }
  220.     }
  221. }
  222.  
  223.  
  224. int receber_valor()
  225. {
  226.     int valor;
  227.  
  228.     printf("Digite o valor para ser listado: ");
  229.     fflush(stdin);
  230.     scanf("%d", &valor);
  231.  
  232.     return valor;
  233. }
  234.  
  235.  
  236. void menu(lista *l)
  237. {
  238.     int opc;
  239.     int antecessor;
  240.  
  241.     do
  242.     {
  243.         system("cls");
  244.  
  245.         printf("1 - Adicionar no final\n");
  246.         printf("2 - Adicionar no comeco\n");
  247.         printf("3 - Adicionar no meio\n");
  248.         printf("4 - Remover do final\n");
  249.         printf("5 - Remover do comeco\n");
  250.         printf("6 - Remover do meio\n");
  251.         printf("7 - Mostrar a lista\n");
  252.         printf("8 - Sair\n");
  253.  
  254.         printf("\nDigite a opcao: ");
  255.         fflush(stdin);
  256.         scanf("%d", &opc);
  257.  
  258.         system("cls");
  259.         switch(opc)
  260.         {
  261.         case 1:
  262.             add_final(l);
  263.             break;
  264.  
  265.         case 2:
  266.             add_comeco(l);
  267.             break;
  268.  
  269.         case 3:
  270.             if (lista_vazia(l))
  271.             {
  272.                 add_final(l);
  273.             }
  274.             else
  275.             {
  276.                 printf("Digite o antecessor: ");
  277.                 fflush(stdin);
  278.                 scanf("%d", &antecessor);
  279.  
  280.                 add_meio(l, antecessor);
  281.             }
  282.  
  283.             break;
  284.  
  285.         case 4:
  286.             retirar_fim(l);
  287.             break;
  288.  
  289.         case 5:
  290.             retirar_comeco(l);
  291.             break;
  292.  
  293.         case 6:
  294.             if (lista_vazia(l))
  295.             {
  296.                 retirar_fim(l);
  297.             }
  298.             else
  299.             {
  300.                 printf("Digite o valor que deseja retirar: ");
  301.                 fflush(stdin);
  302.                 scanf("%d", &antecessor);
  303.  
  304.                 retirar_meio(l, antecessor);
  305.             }
  306.             break;
  307.  
  308.         case 7:
  309.             mostrar(l);
  310.             break;
  311.         }
  312.  
  313.         if (opc != 8)
  314.             getch();
  315.     }while(opc != 8);
  316. }
  317.  
  318.  
  319. int main()
  320. {
  321.     lista *l = (lista*)malloc(sizeof(lista));
  322.  
  323.     create(l);
  324.  
  325.     menu(l);
  326.  
  327.     return 0;
  328. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement