Advertisement
attackers

attac

Nov 23rd, 2011
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct registro_nodo {
  5. int valor;
  6. struct registro_nodo *siguiente;
  7.  
  8. } tipoNodo;
  9.  
  10.  
  11. typedef tipoNodo *pNodo;
  12. typedef tipoNodo *Lista;
  13.  
  14. /* Funciones con listas: */
  15. void Insertar(Lista *l, int v);
  16. void Borrar(Lista *l, int v);
  17.  
  18. int ListaVacia(Lista l);
  19.  
  20. void BorrarLista(Lista *l);
  21. void MostrarLista(Lista l);
  22.  
  23. int main() {
  24. Lista lista = NULL;
  25. pNodo p;
  26.  
  27. Insertar(&lista, 20);
  28. Insertar(&lista, 10);
  29. Insertar(&lista, 40);
  30. Insertar(&lista, 30);
  31.  
  32. MostrarLista(lista);
  33.  
  34. Borrar(&lista, 10);
  35. Borrar(&lista, 15);
  36. Borrar(&lista, 45);
  37. Borrar(&lista, 30);
  38. Borrar(&lista, 40);
  39.  
  40. MostrarLista(lista);
  41.  
  42. BorrarLista(&lista);
  43.  
  44. getchar();
  45. return 0;
  46. }
  47.  
  48. void Insertar(Lista *lista, int v) {
  49. pNodo nuevo, anterior;
  50.  
  51. /* Crear un nodo nuevo */
  52. nuevo = (pNodo)malloc(sizeof(tipoNodo));
  53. nuevo->valor = v;
  54.  
  55. /* Si la lista está vacía */
  56. if(ListaVacia(*lista) || (*lista)->valor > v) {
  57. /* Añadimos la lista a continuación del nuevo nodo */
  58. nuevo->siguiente = *lista;
  59. /* Ahora, el comienzo de nuestra lista es en nuevo nodo */
  60. *lista = nuevo;
  61. }
  62. else {
  63. /* Buscar el nodo de valor menor a v */
  64. anterior = *lista;
  65. /* Avanzamos hasta el último elemento o hasta que el siguiente tenga
  66. un valor mayor que v */
  67. while(anterior->siguiente && anterior->siguiente->valor <= v)
  68. anterior = anterior->siguiente;
  69. /* Insertamos el nuevo nodo después del nodo anterior */
  70. nuevo->siguiente = anterior->siguiente;
  71. anterior->siguiente = nuevo;
  72. }
  73. }
  74.  
  75. void Borrar(Lista *lista, int v) {
  76. pNodo anterior, nodo;
  77.  
  78. nodo = *lista;
  79. anterior = NULL;
  80. while(nodo && nodo->valor < v) {
  81. anterior = nodo;
  82. nodo = nodo->siguiente;
  83. }
  84. if(!nodo || nodo->valor != v){
  85. printf("El valor %d no existe en la lista",v);
  86. getchar();
  87. return;
  88. }
  89. else { /* Borrar el nodo */
  90. if(!anterior) /* Primer elemento */
  91. *lista = nodo->siguiente;
  92. else /* un elemento cualquiera */
  93. anterior->siguiente = nodo->siguiente;
  94. free(nodo);
  95. }
  96. }
  97.  
  98. int ListaVacia(Lista lista) {
  99. return (lista == NULL);
  100. }
  101.  
  102. void BorrarLista(Lista *lista) {
  103. pNodo nodo;
  104.  
  105. while(*lista) {
  106. nodo = *lista;
  107. *lista = nodo->siguiente;
  108. free(nodo);
  109. }
  110. }
  111.  
  112. void MostrarLista(Lista lista) {
  113. pNodo nodo = lista;
  114.  
  115. if(ListaVacia(lista)) printf("Lista vacía\n");
  116. else {
  117. while(nodo) {
  118. printf("%d -> ", nodo->valor);
  119. nodo = nodo->siguiente;
  120. }
  121. printf("\n");
  122. }
  123. }
  124.  
  125.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement