Advertisement
mdlib

Lista

May 4th, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef long long int cod;
  5. typedef short int qnt;
  6.  
  7. typedef struct listaDeCompras compras;
  8.  
  9. struct listaDeCompras{
  10.     cod codigo;
  11.     qnt quantidade;
  12.     compras *proximo;
  13. };
  14.  
  15. compras *alocaNo(){
  16.     compras* no=(compras*)malloc(sizeof(compras));
  17.     return no;
  18. }
  19.  
  20. void insereLista(compras **lista, compras **fimlista, cod codigo, qnt quantidade){
  21.     compras *fim=NULL;
  22.  
  23.     fim=alocaNo();
  24.  
  25.     fim->codigo=codigo;
  26.     fim->quantidade=quantidade;
  27.  
  28.     if((*lista)==NULL){
  29.         fim->proximo=NULL;
  30.         (*lista)=fim;
  31.         (*fimlista)=fim;
  32.     }
  33.     fim->proximo=NULL;
  34.     (*fimlista)->proximo=fim;
  35.     (*fimlista)=fim;
  36.  
  37. }
  38.  
  39. void removeLista(compras **lista, compras **fimlista){
  40.  
  41.     compras *aux=*lista, *aux2=*lista;
  42.  
  43.     aux2=aux2->proximo;
  44.  
  45.     if(aux2 == NULL){
  46.         *lista=NULL;
  47.         printf("AAAAAAAAAAAAAAAAAAAAA");
  48.     }
  49.  
  50.     do{
  51.         if(aux2->proximo == NULL)
  52.             aux->proximo = NULL;
  53.         else{
  54.             aux2=aux2->proximo;
  55.             aux=aux->proximo;
  56.         }
  57.     }while(aux2->proximo != NULL);
  58.  
  59.     (*fimlista)=aux;
  60.     free(aux->proximo);
  61.     aux->proximo = NULL;   
  62.    
  63. }
  64.  
  65. void contaTamanho(compras **lista, cod *cont){
  66.     compras *aux=*lista;
  67.     *cont=1;
  68.  
  69.     if((*lista)==NULL){
  70.         *cont=0;
  71.         return;
  72.     }
  73.  
  74.     while(aux->proximo!=NULL){
  75.         aux=aux->proximo;
  76.         (*cont)+=1;
  77.     }
  78. }
  79.  
  80. void imprimeLista(compras **lista){
  81.     compras *aux=*lista;
  82.  
  83.     if((*lista)==NULL)
  84.         return;
  85.     while(aux!=NULL){
  86.         printf("%lld %hd\n", aux->codigo, aux->quantidade);
  87.         aux=aux->proximo;
  88.     }
  89.  
  90. }
  91.  
  92. int main(){
  93.     compras *lista=NULL, *fimlista=NULL;
  94.     int escolha;
  95.     cod codigo;
  96.     qnt quantidade;
  97.     char enter;
  98.     do{
  99.         system("clear");
  100.         printf("1 - Inserir na lista\n2 - Remover da lista\n3 - Checar quantidade de Nós\n4 - Ver lista\n5 - sair\n\n");
  101.         setbuf(stdin, NULL);
  102.         scanf("%d", &escolha);
  103.  
  104.         switch(escolha){
  105.             case 1:{
  106.                
  107.                 printf("\nDigite o codigo do produto: ");
  108.                 scanf("%lld", &codigo);
  109.                 while(codigo < 0);
  110.                 do{
  111.                     printf("\n\nDigite a quantidade de produtos: ");
  112.                     scanf("%hd", &quantidade);
  113.                 }while(quantidade > 65535);
  114.  
  115.                 if(quantidade<0)
  116.                     break;
  117.  
  118.                 insereLista(&lista, &fimlista, codigo, quantidade);
  119.                 break;
  120.             }
  121.             case 2:{
  122.                 if(lista==NULL)
  123.                     break;
  124.                 else
  125.                     if(lista->proximo == NULL){
  126.                         free(lista);
  127.                         lista==NULL;
  128.                         break;
  129.                     }else{
  130.                         removeLista(&lista, &fimlista);            
  131.                         break;
  132.                     }
  133.                 }
  134.  
  135.                 case 3:{
  136.                     cod cont=0;
  137.                     contaTamanho(&lista, &cont);
  138.  
  139.                     printf("Tamanho da lista = %lld\n", cont);
  140.                     break;
  141.                 }
  142.  
  143.                 case 4:{
  144.                     system("clear");
  145.                     if(lista==NULL){
  146.                         printf("NaN");
  147.                         break;
  148.                     }
  149.                     imprimeLista(&lista);
  150.                     break;
  151.                 }
  152.  
  153.                 case 5:{
  154.                     exit(0);
  155.                     break;
  156.                 }
  157.                 default:{
  158.                     system("clear");
  159.                     printf("NaN\n");
  160.  
  161.                     printf("Tecle ENTER para continuar!!!");
  162.                 }
  163.             }
  164.  
  165.             if(escolha == 3 || escolha == 4 || escolha == 6){
  166.                 printf("\nTecle ENTER para continuar!!!");
  167.                 setbuf(stdin, NULL);
  168.                 scanf("%c", &enter);
  169.             }
  170.         }while(escolha!=5);
  171.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement