Advertisement
KDOXG

Prova_2

Dec 9th, 2018
422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.82 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /**
  4.  * Implemente as seguintes funções onde a função “crialista” cria uma lista
  5.  * duplamente ligada onde cada nó contém uma das letras da string passada por parâmetro e
  6.  * retorna um ponteiro para o primeiro nó. Já a função “inverte” recebe a lista criada pela
  7.  * função anterior e inverte a ordem que as palavras estão na string retornando o ponteiro
  8.  * para o primeiro nó da lista. Exemplo: entrada “Algoritmos e Estrutura de Dados 1” saída:
  9.  * “1 Dados de Estrutura e Algoritmos”
  10.  */
  11.  
  12. typedef char TipoChave;
  13.  
  14. typedef struct Registro {
  15. TipoChave Chave;
  16. } Registro;
  17.  
  18. typedef struct No {
  19. Registro Reg;
  20. Apontador pEsq, pDir;
  21. } No;
  22.  
  23. typedef struct No* Apontador;
  24.  
  25. Apontador crialista(char *string);
  26.  
  27. Apontador inverte(Apontador pCabeca);
  28.  
  29. void main()
  30. {
  31. }
  32.  
  33. Apontador crialista(char *string)
  34. {
  35.     Apontador prox, pCabeca=malloc(sizeof(struct No));
  36.     pCabeca->Reg.Chave = string[0];
  37.     pCabeca->pEsq=NULL;
  38.     if (strlen(string) > 1)
  39.     {
  40.         pCabeca->pDir=malloc(sizeof(struct No));
  41.         pCabeca->pDir->pEsq=pCabeca;
  42.     }
  43.     else
  44.         pCabeca->pDir=NULL;
  45.     prox=pCabeca->pDir;
  46.     for (int i=1; i<strlen(string); i++)
  47.     {
  48.         prox->Reg.Chave=string[i];
  49.         if (string[i+1] != '\0')
  50.         {
  51.             prox->pDir=malloc(sizeof(struct No));
  52.             prox->pDir->pEsq=prox;
  53.             prox=prox->pDir;
  54.         }
  55.         else
  56.             prox->pDir=NULL;
  57.     }
  58.     return pCabeca;
  59. }
  60.  
  61. Apontador inverte(Apontador pCabeca)
  62. {
  63.     int i=0;
  64.     Apontador aux1, aux2, aux3, salvaEspaco, novaLista=malloc(sizeof(struct No));
  65.     aux1=pCabeca;
  66.     while (aux1 != NULL)
  67.     {
  68.         if (aux1->pEsq->Reg.Chave == ' ')
  69.             salvaEspaco=aux1;                       //No final, salvaEspaco vai ser o primeiro no
  70.         aux1=aux1->pDir;
  71.     }
  72.     //aux1=pCabeca;
  73.     novaLista->Reg.Chave = salvaEspaco->Reg.Chave;
  74.     novaLista->pEsq=NULL;
  75.     novaLista->pDir=salvaEspaco->pDir;
  76.     aux1=novaLista;
  77.     aux2=salvaEspaco->pEsq;
  78.     aux3=salvaEspaco->pEsq;
  79.     while (aux1->pDir != NULL && aux2 != pCabeca)
  80.     {   //Necessita percorrer pela direita com o aux1 ate chegar ao fim da palavra, depois percorrer pela esquerda ate o comeco usando aux2 ou aux3, salvando as palavras a seguir do aux1 toda vez que achar um espaco
  81.         aux1=aux1->pDir;
  82.         while (aux1 == NULL && aux2 != NULL /*aux2 != pCabeca->pEsq*/)
  83.         {
  84.             aux2=aux2->pEsq;
  85.             aux3=aux2;
  86.             while (aux2->pEsq.Reg.Chave == ' ' && aux3->pDir != aux1)
  87.             {
  88.                 i=1;
  89.                 aux1=aux3;
  90.                 aux1=aux1->pDir;
  91.                 aux3=aux3->pDir;
  92.             }
  93.             if (i==1)
  94.                 aux1=aux2;
  95.             i=0;
  96.         }
  97.     }
  98.     return pCabeca;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement