Вы находитесь на странице: 1из 4

#include<iostream> #include<conio.

h> struct nodo { int valor; struct nodo* siguiente; }; const int TRUE =1; const int FALSE =0; void insertar(struct nodo**,int); //Argumento void recorrer(struct nodo*); void borrar(struct nodo**,int); struct nodo* cabeza; using namespace std; int main()//3 { int opcion,numero; //CREAR UNA LISTA VACIA //Para crear una lista vacia hay que asignar NULL al encabezado de la li sta. //Apuntador utilizado para apuntar al primer elemento de la lista cabeza = NULL; //Crea una lista vacia do { //Interfaz de Usuario system("cls"); cout<<"Lista Enlazada"<<endl; cout<<"Men"<<endl; cout<<"1. Ingresar datos a la lista"<<endl; cout<<"2. Mostrar datos en la lista"<<endl; cout<<"3. Borrar datos de la lista"<<endl; cout<<"4. Salir"<<endl; cout<<"..............................Ingrese su opcion: "; cin>>opcion; switch(opcion) { case 1: system("cls"); cout<<"Ingtreso: "; cin>>numero; insertar(&cabeza,numero); break; case 2: system("cls"); recorrer(cabeza); break; case 3:

system("cls"); cout<<"Ingrese un Numero para borrarlo de la lista: "; cin>>numero; borrar(&cabeza,numero); getch(); break; default: cout<<"Opcin no valida"<<endl; } }while(opcion!=4); return 0; } void insertar(struct nodo **inicio, int item) { struct nodo *anterior, *actual, *NuevoNodo; int encuentra; cout<<"Ingrese los numeros para ingresarlo en la lista: "; cout<<"Para dejar de ingresar precione 0"<<endl; //INSERTAR EL PRIMER NODO EN UNA LISTA VACIA if(*inicio == NULL) { NuevoNodo = new nodo; //Asigna Memoria if (NuevoNodo == NULL) { cout<<"No hay espacio en memoria para asignar"<<endl; exit(1); } NuevoNodo->valor = item; NuevoNodo->siguiente=NULL; *inicio=NuevoNodo; //cout<< NuevoNodo->valor; } //EL ELEMENTO VINE ANTES DEL PRIMER NODO EN LA LISTA else if (item < (*inicio)->valor) { NuevoNodo= new nodo; if (NuevoNodo == NULL) { cout<<"No hay espacio en memoria para asignar"<<endl; exit(1); } NuevoNodo->valor = item;//Almacena el elemento en Nuevo Nodo NuevoNodo->siguiente= *inicio; // Nuevo Nodo apunta a la cabeza *inicio= NuevoNodo; //La cabeza apunta a Nuevo Nodo } //CASO GENERAL ENCUENTRA UN LUGAR PARA EL ELEMNTO else { NuevoNodo= new nodo; if (NuevoNodo == NULL) { cout<<"No hay espacio en memoria para asignar"<<endl; exit(1);

} NuevoNodo->valor= item;//Almacena un elemnto en Nuevo Nodo //El apuntador anterior comienza en la cabeza de la lista anterior=*inicio; //Actual apunta al segundo elemento de la lista actual =(*inicio)->siguiente; encuentra=FALSE; //Busca en la lista el punto de insercin while(actual != NULL && encuentra ==FALSE) { //Mientras se cumpla la condicin se buscar el punto de ins ercin if(item > actual->valor) { //anterior apunta ahora al proximo nodo anterior = actual; //actual apunta ahora al proximo nodo actual= actual->siguiente; } else //Cuando el elemento es mnor que el valor de act ual //se ha encontrado el punto de inseccin encuentra= TRUE; } //Modifica los apuntadores para efectuar la insercin NuevoNodo->siguiente= actual; anterior->siguiente= NuevoNodo; } return; } void recorrer(struct nodo *inicio) { struct nodo* actual; actual = inicio; //comienza al principio de la lista if(actual ==NULL) cout<<"La lista esta vacia"<<endl; //permanece en el ciclo hasta que encuentra el final de la lista while(actual != NULL) { cout<< actual->valor<<endl; actual= actual->siguiente; } getch(); return; } void borrar(struct nodo** inicio,int item) { struct nodo *temp, *anterior, *actual; actual=*inicio; if(actual == NULL) cout<<"La lista esta vacia"<<endl; //Borra el primer nodo de la lista else if( item == (*inicio)->valor) {

temp= *inicio; *inicio=(*inicio)->siguiente; delete temp; } else { //anterior debe apuntar al primer nodo de la lista anterior=*inicio; //actual apunta al segundo nodo de la lista actual = (*inicio)->siguiente ; //Busca el elemnto en la lista while(actual->valor !=item && actual != NULL) { actual = actual->siguiente; //apunta al siguiente nodo anterior = anterior->siguiente; //apunta al siguiente no do } if(actual != NULL) { //Modifica el apuntador en el punto borrado temp= actual; anterior->siguiente=actual->siguiente; delete(temp);//libera la memoria } else cout<<"Elemento no encontrado en la lista..."<<endl; } return; }

Вам также может понравиться