Guest User

Untitled

a guest
Mar 6th, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. /*-- tlista.h --- LISTA SIMPLU INLANTUITA cu elemente de tip intreg ---*/
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <time.h>
  6.  
  7.  
  8. #ifndef _LISTA_SIMPLU_INLANTUITA_
  9. #define _LISTA_SIMPLU_INLANTUITA_
  10.  
  11. typedef int TInfo; /* tipurile Element si Adresa_Element */
  12. typedef struct celula
  13. { TInfo info;
  14. struct celula * urm;
  15. } TCelula, *TLista, **ALista; /* tipurile Celula, Lista si Adresa_Lista */
  16.  
  17. #define VidaL(L) ((L) == NULL)
  18.  
  19. /*-- operatii elementare --*/
  20.  
  21. TLista AlocCelula(TInfo); /* adresa celulei create sau NULL */
  22. void DistrugeL (ALista); /* elimina toate celulele din lista */
  23.  
  24. void AfisareL (TLista L);
  25.  
  26. #endif
  27. //======================
  28. /*-- functiiLista.c --*/
  29. #include <ctype.h>
  30. #include "tlista.h"
  31.  
  32. /*--- operatii de baza pentru lista simplu inlantuita ---*/
  33.  
  34. TLista AlocCelula(TInfo e) /* adresa celulei create sau NULL */
  35. { TLista aux = (TLista)malloc(sizeof(TCelula)); /* (1) incearca alocare */
  36. if (aux) /* aux contine adresa noii celule */
  37. { aux->info = e; /* (2,3) completeaza noua celula */
  38. aux->urm = NULL;
  39. }
  40. return aux; /* rezultatul este adresa noii celule sau NULL */
  41. }
  42.  
  43. void AfisareL(TLista L)
  44. /* afiseaza valorile elementelor din lista */
  45. {
  46. printf("Lista: ["); /* marcheaza inceput lista */
  47. for (; L != NULL; L = L->urm) /* pentru fiecare celula */
  48. printf("%d ", L->info); /* afiseaza informatie */
  49. printf("]"); /* marcheaza sfarsit lista */
  50. }
  51.  
  52. void DistrugeL(ALista aL)
  53. {
  54. TLista aux;
  55. while(*aL)
  56. {
  57. aux = *aL;
  58. *aL = aux->urm;
  59. free(aux);
  60. }
  61. }
  62. //===================
  63. /*--- TestLista.c ---*/
  64. #include <ctype.h>
  65. #include <stdio.h>
  66. #include "tlista.h"
  67.  
  68. TLista CitireL(size_t *lg) /* construieste lista cu elemente citite */
  69. { TLista L = NULL, u, aux;
  70. TInfo x;
  71. char ch;
  72. for(*lg = 0; scanf("%i", &x) == 1; )
  73. {
  74. aux = AlocCelula(x); /* incearca inserarea valorii citite */
  75. if(!aux) return L; /* alocare esuata => sfarsit citire */
  76. if(L == NULL) L = aux;
  77. else u->urm = aux;
  78. u = aux;
  79. (*lg)++;
  80. }
  81.  
  82. while((ch=getchar()) != EOF && ch != '\n');
  83. return L; /* intoarce lista rezultat */
  84. }
  85.  
  86. int main ()
  87. { TLista x = NULL; /* Lista prelucrata */
  88. size_t lx; /* lungime lista */
  89.  
  90. for (;;)
  91. {
  92. /* citeste si afiseaza lista */
  93. printf("\nIntroduceti valori elemente terminate cu valoare nenumerica:\n");
  94. x = CitireL(&lx);
  95. AfisareL(x);
  96. if(!x) continue;
  97.  
  98. /* apeluri functii implementate */
  99.  
  100. DistrugeL(&x);
  101. printf ("\n Inca un test ? [d/n]");
  102. if (getchar() == 'n') break;
  103. }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment