fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* Estrutura de um noh de uma lista encadeada */
  5. typedef struct no {
  6. int info;
  7. struct no *prox;
  8. } tipoNo;
  9.  
  10.  
  11. /* Percorre a lista (travessia), imprimindo seus elementos */
  12. void imprimir(tipoNo *lst) {
  13. tipoNo *p;
  14. p = lst->prox;
  15.  
  16. while (p != NULL) {
  17. printf("%4d", p->info);
  18. p = p->prox;
  19. }
  20.  
  21. printf("\n");
  22. }
  23.  
  24. /* Funcao para liberar espaco alocado via malloc
  25.  * para cada um dos elementos de uma lista encadeada */
  26. void liberar(tipoNo* lst) {
  27. tipoNo *f; /* Ponteiro auxiliar */
  28.  
  29. /* Faz a travessia da lista ateh encontrar o ultimo item. */
  30. while (lst != NULL) {
  31. f = lst;
  32. lst = lst->prox;
  33. free(f);
  34. }
  35. }
  36.  
  37. /* Insere noh em uma lista encadeada */
  38. void inserir(tipoNo *p, int y) {
  39. tipoNo *novonoh; /* Novo noh */
  40.  
  41. novonoh = (tipoNo*) malloc(sizeof(tipoNo)); /* Aloca espaco para novo noh */
  42.  
  43. novonoh->info = y; /* Armazena valor do novo noh */
  44. novonoh->prox = p->prox; /* Ajusta o campo prox do novo noh */
  45. p->prox = novonoh; /* Faz o noh antigo apontar para o novo noh */
  46. }
  47.  
  48. /* Esta função recebe uma lista encadeada lst,
  49.  * com cabeça, e remove da lista a primeira
  50.  * celula que contiver 'x', se tal celula existir. */
  51. void buscarremover(tipoNo *lst, int y) {
  52. tipoNo *p, *q;
  53. p = lst;
  54. q = lst->prox;
  55. while (q != NULL && q->info != y) {
  56. p = q;
  57. q = q->prox;
  58. }
  59. if (q != NULL) {
  60. p->prox = q->prox;
  61. free(q);
  62. }
  63. }
  64.  
  65. /* Funcao principal */
  66. int main() {
  67. printf("==========================================\n");
  68. printf(" INSERCAO de item em uma lista encadeada \n");
  69. printf("==========================================\n");
  70. printf("\n");
  71.  
  72. /* Declaracao de **ponteiros** para os nohs da lista encadeada */
  73. tipoNo *lista, *pt;
  74.  
  75. /* Criacao do noh cabeca */
  76. lista = (tipoNo*) malloc(sizeof(tipoNo));
  77. lista->prox = NULL;
  78.  
  79. /* Inicializa Lista Encadeada */
  80. inserir(lista, 76);
  81. inserir(lista, 34);
  82. inserir(lista, 65);
  83. inserir(lista, 45);
  84.  
  85. /* Imprime Lista ORIGINAL, *ANTES* da remocao */
  86. imprimir(lista);
  87.  
  88. /* Busca e remocao do elemento 34 */
  89. buscarremover(lista, 34);
  90. imprimir(lista);
  91.  
  92. /* Busca e remocao do elemento 88 (nao existe) */
  93. buscarremover(lista, 88);
  94. imprimir(lista);
  95.  
  96. /* Destroi lista encadeada, liberando espaco */
  97. liberar(lista);
  98.  
  99. return 0;
  100. }
Success #stdin #stdout 0s 5420KB
stdin
Standard input is empty
stdout
==========================================
 INSERCAO de item em uma lista encadeada  
==========================================

  45  65  34  76
  45  65  76
  45  65  76