Advertisement
KDOXG

LinkedList-exercise.c

Nov 18th, 2018
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4.  
  5. typedef struct{
  6.   int cod;
  7.   char nome[40];
  8. }SDado;
  9.  
  10. typedef struct{
  11.   SDado info;
  12.   struct SNodo *pNext;
  13. }SNodo;
  14.  
  15. typedef struct{
  16.   Snodo *pFirst;
  17. }SLista;
  18.  
  19. void Reset(SLista *pLista)
  20. {
  21.     Clear(pLista);
  22.     pLista = (SLista *)malloc(sizeof(SLista));
  23. }
  24.  
  25. void Clear(SLista *pLista)
  26. {
  27.     SNodo *pAtual, *pAnterior;
  28.     int nPos;
  29.  
  30.     if (pLista->pFirst == NULL)
  31.         return;
  32.     if ()
  33. }
  34.  
  35. bool PUSH(SLista *pLista, SNodo *pNodo, unsigned int nIndex)
  36. {
  37.     SNodo *pAtual, *pAnterior;
  38.     int nPos;
  39.  
  40.     if (pLista->pFirst == NULL && nIndex !=0)
  41.         return 0; /* erro: nIndex invalido */
  42.     else
  43.     {
  44.         if (pLista->pFirst == NULL && nIndex == 0)
  45.         {
  46.             pLista->pFirst = pNodo;
  47.             pLista->pFirst->pNext = NULL;
  48.             return 1;            
  49.         }
  50.         else
  51.             if (nIndex == 0)
  52.             {
  53.             pNodo->pNext = pLista->pFirst;
  54.             pLista->pFirst = pNodo;
  55.             return 1;            
  56.             }
  57.     }
  58. }
  59.  
  60. bool POP(SLista *pLista, SNodo *pNodo, unsigned int nIndex)
  61. {
  62.     SNodo *pAnterior, *pAtual;
  63.     int nPos;
  64.    
  65.     if (pLista->pFirst == NULL) return 0; /* erro: lista vazia */
  66.  
  67.     if (nIndex == 0)
  68.     {
  69.         pNodo = pLista->pFirst;
  70.         pLista->pFirst = pLista->pFirst->pNext;
  71.         return 1;
  72.     }
  73.  
  74.     pAtual = pLista->pFirst;
  75.     for (nPos = 0; nPos < nIndex && pAtual != NULL; nPos++)
  76.     {
  77.         pAnterior =  pAtual;
  78.         pAtual = pAtual->pNext;      
  79.     }
  80.     if (!pAtual) return 0; // erro nIndex invalido
  81.     pAnterior->pNext = pAtual->pNext;    
  82.     pNodo = pAtual;
  83.     return 1;
  84. }
  85.  
  86. void main()
  87. {
  88.     SLista *Encadeada=malloc(sizeof(SLista));
  89.     Encadeada->pFirst=NULL;
  90.     SNodo *Nodo;
  91.     unsigned int i=0, j, a;
  92.     bool confere;
  93.     Inicio: printf("\nSelecione a sua escolha...\n0: Insere pessoa\n1: Deleta pessoa\n2: Limpa a lista\n3: Lista na tela as pessoas\n4: Sair do programa\nDigite: ");
  94.     scanf("%lu", &a);
  95.     switch(a)
  96.     {
  97.         case 0:
  98.             if (i > 0)
  99.             {
  100.                 printf("Digite o índice: ");
  101.                 scanf("%lu", &j);
  102.             }
  103.             Nodo=malloc(sizeof(SNodo));
  104.             printf("Digite o nome: ");
  105.             getchar();
  106.             fgets(Nodo->info.nome,40,stdin);
  107.             Nodo->info.cod = (int) *(Nodo->info.nome);
  108.             confere=PUSH(Encadeada,Nodo,j);
  109.             if (confere == true)
  110.             {
  111.                 printf("Adicionado com sucesso!\n");
  112.                 i++;
  113.             }
  114.             else
  115.                 printf("Erro.\n");
  116.             goto Inicio;
  117.         break;
  118.  
  119.         case 1:
  120.             if (i > 1)
  121.             {
  122.                 printf("Digite o índice: ");
  123.                 scanf("%lu", &j);
  124.             }
  125.             confere=POP(Encadeada,Nodo,j);
  126.             free(Nodo);
  127.             if (confere == true)
  128.             {
  129.                 printf("Removido com sucesso!\n");
  130.                 i--;
  131.             }
  132.             else
  133.                 printf("Erro.\n");
  134.             goto Inicio;
  135.         break;
  136.     }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement