Manejo de listas - Itsp

Anuncio
Manejo de listas
Estructura de Datos y Algoritmos
Mtr. Ing. Nancy López
Definiciones
typedef struct nodo{
int valor; //dato a guardar en la lista
struct nodo *siguiente; //puntero a nodo
}tipoNodo;
typedef tipoNodo *pNodo; //tipo para declarar
nodos
typedef tipoNodo *Lista; //tipo para declarar listas
Definición de variables
• Dentro del main()
• Lista lista = NULL; //Defino una nueva Lista
• nodo datos;
//defino una estructura
Agregar un nodo
do
{ cout<<"Ingrese valor ";
cin>>datos.valor;
cout<<"Desea seguir ingresando datos?";
cin>>seguir;
Insertar (&lista, datos);
}while (seguir=='s');
//le paso la dirección de la lista que estoy usando y
el nuevo nodo (que es una estructura)
Insertar al inicio (una forma de hacerlo)
void InsertarInicio(Lista *, nodo);
void InsertarInicio(Lista *l, nodoLv)
{
pNodo aux=new tipoNodo;
aux
if (aux)
{ aux->valor=v.valor;
aux->siguiente=*l;
*l=aux;
}
}
Insertar al final
void InsertarFinal(Lista *l, nodo v)
{ pNodo n=new tipoNodo;
pNodo otroNodo;
if (n)
n->valor=v.valor;
if (ListaVacia(*l))
{
n->siguiente=*l;
*l=n; }
else
{ otroNodo=*l;
//otroNodo apunta a la lista
while (otroNodo->siguiente)
//acá paro en el último
{otroNodo=otroNodo->siguiente;} //recorro la lista
n->siguiente=otroNodo->siguiente; //el nodo a insertar apunta a donde
//apunta el último nodo
otroNodo->siguiente=n;
//el último nodo apunta a n
} }
Insertar Ordenado
void InsertarOrdenado(Lista *lista, nodo v) {
pNodo nuevo, anterior;
nuevo = new tipoNodo;
nuevo->valor = v.valor;
if(ListaVacia(*lista) || (*lista)->valor > v.valor) {
nuevo->siguiente = *lista;
*lista = nuevo; }
else {
anterior = *lista;
while(anterior->siguiente && anterior->siguiente->valor <= v.valor)
{anterior = anterior->siguiente;}
nuevo->siguiente = anterior->siguiente;
anterior->siguiente = nuevo;
}
}
Mostrar Lista
void MostrarLista(Lista l);
void MostrarLista(Lista lista) {
pNodo aux= lista;
if(ListaVacia(lista)) cout<< "Lista vacía\n";
else {
while(aux) {
cout<<" -> "<< aux->valor;
aux = aux->siguiente;
}
cout<<endl;
}
}
Borrar Lista
void BorrarLista(Lista *);
void BorrarLista(Lista *lista) {
pNodo aux;
while(*lista) {
aux = *lista;
*lista = aux->siguiente;
delete aux;
}
}
Buscar Valor
int BuscarValor(Lista, int);
int BuscarValor(Lista l, int valor)
{
Lista lista=l;
int iguales=0;
while (lista)
{
if (lista->valor==valor)
{iguales++;}
lista=lista->siguiente;
}
return iguales;
}
Descargar