Advertisement
pablosoares

lista par

Oct 22nd, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.59 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct Node{
  5.    
  6.     int n;
  7.     struct Node *prox;
  8.    
  9.     }typedef node;
  10.    
  11.    
  12. int vazia(node *lista){
  13.    
  14.     if(lista->prox==NULL) return 1;
  15.    
  16.     return 0;
  17.    
  18.     }
  19.    
  20.    
  21. node *aloca(){
  22.    
  23.     node *novo = (node*) malloc(sizeof(node));
  24.    
  25.     if(!novo){
  26.        
  27.             printf("Sem memoria disponivel!\n");
  28.             exit(1);
  29.            
  30.         }
  31.    
  32.     else{
  33.        
  34.             printf("Novo elemento: ");
  35.             scanf("%d",&novo->n);
  36.            
  37.             return novo;
  38.            
  39.         }
  40.        
  41.     }
  42.    
  43.  
  44. void insereFim(node *lista){
  45.    
  46.     node *novo=aloca();
  47.     novo->prox = NULL;
  48.    
  49.     if(vazia(lista))
  50.         lista->prox=novo;
  51.        
  52.     else{
  53.        
  54.         node *tmp = lista->prox;
  55.        
  56.         while(tmp->prox != NULL)
  57.               tmp = tmp->prox;
  58.        
  59.         tmp->prox = novo;
  60.     }
  61.    
  62. }
  63.  
  64.  
  65. void exibe(node *lista){
  66.  
  67.    
  68.     if(vazia(lista)){
  69.        
  70.         printf("Lista vazia!\n\n");
  71.         return;
  72.        
  73.       }
  74.  
  75.    
  76.     node *tmp;
  77.     tmp = lista->prox;
  78.  
  79.    
  80.     printf("Lista:");
  81.  
  82.    
  83.     while(tmp){
  84.        
  85.          printf("%5d", tmp->n);
  86.          tmp = tmp->prox;
  87.        
  88.          }
  89.  
  90.    
  91.     printf("\n");
  92.  
  93.    
  94. }  
  95.  
  96.  
  97. void libera(node *lista){
  98.    
  99.     if(!vazia(lista)){
  100.        
  101.         node *proxNode,*atual;
  102.        
  103.         atual = lista->prox;
  104.        
  105.         while(atual != NULL){
  106.            
  107.             proxNode = atual->prox;
  108.             free(atual);
  109.             atual = proxNode;
  110.            
  111.            }
  112.        
  113.     }
  114.    
  115. }
  116.  
  117. node *retiraInicio(node *lista){
  118.  
  119.    
  120.     if(lista->prox == NULL){
  121.  
  122.         printf("Lista ja esta vazia\n");
  123.        
  124.         return NULL;
  125.        
  126.        }
  127.  
  128.        
  129.     else{
  130.        
  131.         node *tmp = lista->prox;
  132.        
  133.         lista->prox = tmp->prox;
  134.        
  135.         return tmp;
  136.    
  137.     }
  138.        
  139.                
  140. }
  141.  
  142.  
  143. void insereInicio(node *lista){
  144.    
  145.     node *novo=aloca();
  146.     node *oldHead = lista->prox;
  147.    
  148.     lista->prox = novo;
  149.     novo->prox = oldHead;
  150.    
  151. }
  152.  
  153.  
  154. node *retiraFim(node *lista){
  155.    
  156.     if(lista->prox == NULL){
  157.        
  158.         printf("Lista ja vazia\n\n");
  159.         return NULL;
  160.        
  161.     }
  162.    
  163.    
  164.     else{
  165.        
  166.         node *ultimo = lista->prox,
  167.              *penultimo = lista;
  168.              
  169.         while(ultimo->prox != NULL){
  170.            
  171.             penultimo = ultimo;
  172.             ultimo = ultimo->prox;
  173.        
  174.         }
  175.              
  176.         penultimo->prox = NULL;
  177.        
  178.         return ultimo;     
  179.     }
  180.    
  181. }
  182.  
  183.  
  184. int menu(){
  185.    
  186.     int opc;
  187.    
  188.     printf(" _________________________\n");
  189.     printf("|__________|Menu|_________|\n");
  190.     printf("|0-Sair.                  |\n");
  191.     printf("|1-Inserir inicio.        |\n");
  192.     printf("|2-Inserir fim.           |\n");
  193.     printf("|3-Remover inicio.        |\n");
  194.     printf("|4-Remover fim.           |\n");
  195.     printf("|5-Mostrar.               |\n");
  196.     printf("|_________________________|\n");
  197.    
  198.     printf("Digite uma opcao: ");
  199.     scanf("%d",&opc);
  200.    
  201.     return opc;
  202.    
  203. }
  204.  
  205.  
  206. int main(){
  207.    
  208.    int opc;
  209.    
  210.    node l,*tmp;
  211.    
  212.    l.prox=NULL;
  213.    
  214.    do{
  215.        
  216.        opc=menu();
  217.        
  218.        switch(opc){
  219.            
  220.            case 0:
  221.                  
  222.                  printf("Obrigado por usar o programa.\n");
  223.                  
  224.                  break;
  225.                  
  226.             case 1:
  227.                  
  228.                   insereFim(&l);
  229.                  
  230.                  break;
  231.                  
  232.             case 5:
  233.            
  234.                    exibe(&l);
  235.                    
  236.                   break;
  237.                  
  238.              case 3:
  239.              
  240.                    tmp=retiraInicio(&l);
  241.                    printf("Retirado: %3d\n\n", tmp->n);
  242.                    
  243.                    break;
  244.                  
  245.              case 2:
  246.                    
  247.                   insereInicio(&l);
  248.                    
  249.                    break;
  250.                    
  251.                    
  252.              case 4:
  253.              
  254.                    tmp=retiraFim(&l);
  255.                    printf("Retirado: %3d\n\n", tmp->n);
  256.                    
  257.                    break;
  258.                    
  259.              default:
  260.            
  261.                  printf("Obrigado por usar o programa.\n");
  262.                  
  263.                  break;
  264.            
  265.            }
  266.          system("pause");
  267.          system("cls");  
  268.        }while(opc!=0);
  269.        
  270. return 0;
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement