#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