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; }