fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct No
  5. {
  6. int dado;
  7. struct No *prox;
  8. };
  9. typedef struct No No;
  10.  
  11. struct lista
  12. {
  13. struct No *inicio;
  14. struct No *fim;
  15. };
  16. typedef struct lista lista;
  17.  
  18. //----------- FUNCOES ----------//
  19.  
  20. lista* cria_lista();
  21. void insere_inicio_lista(lista *li);
  22. void insere_fim_lista(lista *li);
  23. void imprime_lista(lista *li);
  24. void esvazia_lista(lista *li);
  25.  
  26. //---------- MAIN ----------//
  27.  
  28. int main()
  29. {
  30. No *aux;
  31. No *anterior;
  32. lista *li = cria_lista();
  33. imprime_lista(li);
  34. insere_inicio_lista(li);
  35. insere_inicio_lista(li);
  36. insere_inicio_lista(li);
  37. imprime_lista(li);
  38.  
  39.  
  40. return 0;
  41. }
  42.  
  43. //---------- FUNCOES ----------//
  44.  
  45. lista* cria_lista()
  46. {
  47. lista* li = (lista*) malloc(sizeof(lista));
  48. if(li != NULL)
  49. {
  50. li->fim = NULL;
  51. li->inicio = NULL;
  52. }
  53. return li;
  54. }
  55.  
  56. void insere_inicio_lista(lista *li)
  57. {
  58. No *novo = (No*) malloc(sizeof(No));
  59. scanf("%d", &novo->dado);
  60. if(li->inicio == NULL)
  61. {
  62. li->inicio = novo;
  63. novo->prox = NULL;
  64. li->fim = novo;
  65. }
  66. else
  67. {
  68. novo->prox = li->inicio;
  69. li->inicio = novo;
  70. }
  71. }
  72.  
  73. void insere_fim_lista(lista *li)
  74. {
  75. No *novo = (No*)malloc(sizeof(No));
  76. scanf("%d", &novo->dado);
  77. if(li->inicio == NULL)
  78. {
  79. li->inicio = novo;
  80. novo->prox = NULL;
  81. li->fim = novo;
  82. }
  83. else
  84. {
  85. li->fim->prox = novo;
  86. li->fim = novo;
  87. li->fim->prox = NULL;
  88. }
  89. }
  90.  
  91. void imprime_lista(lista *li) {
  92. if(li->inicio == NULL) {
  93. printf("Lista vazia!!\n");
  94. }
  95. else {
  96. No *aux = li->inicio;
  97.  
  98. while(aux != NULL) { //while normal aqui garante que não usa o nó com NULL
  99. printf(" %d ", aux->dado);
  100. aux = aux->prox;
  101. }
  102. }
  103. }
  104.  
  105. void esvazia_lista(lista *li)
  106. {
  107. if(li->inicio == NULL)
  108. {
  109. printf("Lista vazia!!\n");
  110. }
  111. else
  112. {
  113. No *aux = li->inicio;
  114. while(aux != NULL)
  115. {
  116. li->inicio = li->inicio->prox;
  117. free(aux);
  118. aux = li->inicio;
  119. }
  120. printf("Lista esvaziada!\n");
  121. }
  122. }
  123.  
Success #stdin #stdout 0s 10320KB
stdin
10
20
30
stdout
Lista vazia!!
 30  20  10