[Utu-emt-prog2-info] listas
Federico Kouyoumdjian
fedekp en autistici.org
Lun Ago 22 01:52:26 CEST 2011
//lista.cpp
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct nodo
{
int elem;
struct nodo *sig;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *lista;
lista l;
void insertar(int n, lista* l);
void borrar(int n, lista* l);
int listaVacia(lista* l);
void borrarLista(lista* l);
void mostrarLista(lista* l);
int main()
{
l=NULL;
char opcion='1';
int n;
while (opcion!='t')
{
printf("\n");
printf("Manejo de listas\n\n");
printf("(i) insertar en la lista\n");
printf("(l) listar elementos\n");
printf("(b) borrar uno\n");
printf("(t) terminar\n");
printf("Elija una opción:\n");
scanf("%c",&opcion);
printf("\n");
switch(opcion)
{
case 'i':
printf("Ingrese el dato a insertar: ");
scanf("%i",&n);
insertar(n,&l);
break;
case 'b':
printf("Ingrese un dato a borrar: ");
scanf("%i",&n);
borrar(n,&l);
getch();
break;
case 'l':
printf("Contenido de la lista:\n");
mostrarLista(&l);
getch();
break;
case 't':
borrarLista(&l);
break;
}
}
return 0;
}
void insertar(int n, lista* l)
{
pNodo nuevo=(pNodo)malloc(sizeof(tipoNodo));
nuevo->elem=n;
if ((*l==NULL)|| (((*l)->elem) > n))
{
nuevo->sig=*l;
*l=nuevo;
}
else
{
pNodo anterior=*l;
while(anterior->sig && anterior->sig->elem <= n)
anterior = anterior -> sig;
nuevo -> sig = anterior -> sig;
anterior -> sig= nuevo;
}
}
void borrar (int n, lista*l)
{
pNodo anterior;
pNodo nodo;
nodo=*l;
anterior=NULL;
while (nodo && nodo->elem<n)
{
anterior=nodo;
nodo = nodo-> sig;
}
if (!nodo || nodo-> elem !=n)
{
printf("No fue encontrado");
return;
}
else
{
if (!anterior)
*l=nodo->sig;
else
anterior->sig=nodo->sig;
free(nodo);
}
}
int listaVacia(lista*l)
{
return (*l==NULL);
}
void borrarLista (lista*l)
{
pNodo nodo;
while (*l)
{
nodo=*l;
*l=nodo->sig;
free(nodo);
}
}
void mostrarLista(lista* l)
{
pNodo nodo=*l;
if (listaVacia(l))
printf("Lista vacia\n");
else
{
while (nodo)
{
printf ("%i,", nodo->elem);
nodo=nodo->sig;
}
}
}
//Ejercicios:
//1) hacer una función que halle el máximo de una lista
//2) hacer una función que devuelva el penúltimo elemento de la lista,
si no existe que imprima "la lista tiene menos de dos elementos"
//3) hacer una función que devuelva la cantidad de elementos de una lista
//4) hacer una función que intercambie los dos primeros elementos si es
que la lista tiene por lo menos dos elementos, sino imprime "la lista
tiene menos de dos elementos"
//5) hacer una función que borre el primer elemento de una lista. Si no
tiene elementos imprime "la lista no tiene elementos"
Más información sobre la lista de distribución Utu-emt-prog2-info