#include <stdlib.h>
#include <stdio.h>
typedef struct _nodo { float valor;
struct _nodo *siguiente;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;
/* Funciones con listas: */
void Insertar(Lista *l, float v);
void Borrar(Lista *l, float v);
float ListaVacia(Lista l);
void BorrarLista(Lista *);
void MostrarLista(Lista l);
int main()
{ int opc;
float dato;
Lista lista = NULL;
pNodo p;
do{ printf("\n Menu Lista Ligada Ordenada"); printf("\n 1.Insertar"); printf("\n 2.Eliminar"); printf("\n 3.Mostrar"); printf("\n 4.Borrar lista"); printf("\n 5.Salir"); printf("\n Dame tu opcion:"); scanf("%d",&opc); switch(opc){ case 1:
printf("\n Dame el dato:"); scanf("%f",&dato); Insertar(&lista,dato);
break;
case 2:
printf("\n Dame el dato a eliminar:"); scanf("%f",&dato); Borrar(&lista,dato);
break;
case 3:
MostrarLista(lista);
break;
case 4:
BorrarLista(&lista);
break;
}
}while(opc!=5);
system("PAUSE"); return 0;
}
void Insertar(Lista *lista, float v)
{ pNodo nuevo, anterior;
/* Crear un nodo nuevo */
nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo->valor = v;
/* Si la lista está vacía */
if(ListaVacia(*lista) || (*lista)->valor > v) { /* Añadimos la lista a continuación del nuevo nodo */
nuevo->siguiente = *lista;
/* Ahora, el comienzo de nuestra lista es en nuevo nodo */
*lista = nuevo;
}
else { /* Buscar el nodo de valor menor a v */
anterior = *lista;
/* Avanzamos hasta el último elemento o hasta que el siguiente tenga
un valor mayor que v */
while(anterior->siguiente && anterior->siguiente->valor <= v)
anterior = anterior->siguiente;
/* Insertamos el nuevo nodo después del nodo anterior */
nuevo->siguiente = anterior->siguiente;
anterior->siguiente = nuevo;
}
}
void Borrar(Lista *lista, float v)
{ pNodo anterior, nodo;
nodo = *lista;
anterior = NULL;
while(nodo && nodo->valor < v) { anterior = nodo;
nodo = nodo->siguiente;
}
if(!nodo || nodo->valor != v){printf("El dato no esta en la lista...\n"); return;} else { /* Borrar el nodo */ if(!anterior) /* Primer elemento */
*lista = nodo->siguiente;
else /* un elemento cualquiera */
anterior->siguiente = nodo->siguiente;
free(nodo);
}
}
float ListaVacia(Lista lista)
{ return (lista == NULL);
}
void BorrarLista(Lista *lista)
{ pNodo nodo;
while(*lista) { nodo = *lista;
*lista = nodo->siguiente;
free(nodo);
}
}
void MostrarLista(Lista lista)
{ pNodo nodo = lista;
if(ListaVacia(lista)) printf("Lista vacia...\n"); else { while(nodo) { printf("%f -> ", nodo->valor); nodo = nodo->siguiente;
}
printf("NULL"); printf("\n"); }
}
Comentarios sobre la versión: 1.0 (0)
No hay comentarios