#include "stdafx.h"
#include "iostream"
#include <conio.h>
using namespace System;
using namespace std;
struct nodo
{
int codigo; // Nuevo
char *nombre; // Nuevo
int nivel; // Nuevo
nodo *sig; // Nuevo
};
nodo *inicial=NULL;
/////////////////////////////////////////////////////
void leer_nodo(nodo *nuevo)
{
cout<<"Entre codigo del estudiante"<<endl; // Nuevo
cin>>nuevo->codigo; // Nuevo
cout<<"Entre nombre del estudiante"<<endl; // Nuevo
cin.ignore(); // Nuevo
nuevo->nombre=new char[30]; // Nuevo
cin.getline(nuevo->nombre,30); // Nuevo
cout<<"Entre nivel del estudiante"<<endl; // Nuevo
cin>>nuevo->nivel; // Nuevo
}
/////////////////////////////////////////////////////
void crear_lista(nodo *anterior, nodo *nuevo)
{
if(anterior == NULL)
{
nuevo->sig = inicial;
leer_nodo(nuevo);
inicial = nuevo;
}
else
{
nuevo->sig = anterior->sig;
anterior->sig = nuevo;
leer_nodo(nuevo);
}
}
/////////////////////////////////////////////////////
void imprime_nodo(nodo *apun)
{
cout<<"-----------------------------"<<endl;
cout<<"El codigo es: "<<apun->codigo<<endl;
cout<<"El nombre es: "<<apun->nombre<<endl;
cout<<"El nivel es: "<<apun->nivel<<endl;
cout<<"-----------------------------"<<endl;
}
/////////////////////////////////////////////////////
void reco_recur(nodo *apun)
{
if (apun != NULL)
{
imprime_nodo(apun);
reco_recur(apun->sig);
}
}
/////////////////////////////////////////////////////
void borrar_lista(nodo *apun)
{
nodo *inicial;
while(apun != NULL)
{
inicial=apun->sig;
delete apun;
apun=inicial;
}
}
/////////////////////////////////////////////////////
nodo *buscar_nodo(nodo *apun,int &codigo)
{
while(apun != NULL)
{
if(apun->codigo==codigo)return apun;
else apun=apun->sig;
}
return NULL;
}
////////// INVENTADO ////////////////////////
nodo *eliminar_nodo(nodo *apun,int &codigo)
{
nodo *aux;
aux=inicial;
while(aux->sig != apun)aux=aux->sig;
aux->sig = apun ->sig;
delete apun;
return NULL;
}
/////////////////////////////////////////////////////
nodo *agregar_nodo(nodo *anterior,nodo *nuevo,int &codigo)
{
if(codigo == 0)
{
//agrega al inicio de la lista
nuevo->sig=anterior;
anterior=nuevo;
leer_nodo(nuevo);
return anterior;
}
else
{
//Agrega despues del primero, segundo,..., o último
//elemento de la lista
nuevo->sig=anterior->sig;
anterior->sig=nuevo;
leer_nodo(nuevo);
return anterior;
}
};
/////////////////////////////////////////////////////
void main()
{
nodo *anterior, *nuevo, *apun; char resp; anterior=NULL;
cout<<"EMPIEZA A CREAR LA LISTA ORIGINAL"<<endl<<endl;;
do
{
nuevo = new nodo;
crear_lista(anterior, nuevo);
anterior = nuevo;
cout<<endl ;
cout<<"DESEA CREAR OTRO NODO? (s/n) "<<endl<<endl;;
cin>>resp;
}while(resp != 'n');
//inicio del recorrido de la lista
cout<<"LA LISTA ORIGINALMENTE CREADA ES : "<<endl;
apun = inicial;
reco_recur(apun);
//inicio de la agregación de nuevos nodos
cout<<endl ;
cout<<"INICIO DE LA AGREGACION DE NUEVOS NODOS A LA LISTA ORIGINAL"<<endl;
int codigo;
apun=inicial;
do
{
cout<<endl;
cout<<"Entre codigo clave (Digite 0 si va agregar a la cabeza de la lista,"<<endl;
cout<<"en caso contrario digite el codigo del nodo anterior al que va a crear) "<<endl<<endl;
cin>>codigo ;
if(codigo==0)
{
nuevo =new nodo;
inicial = agregar_nodo(inicial,nuevo,codigo);
}
else
{
anterior=inicial;
anterior = buscar_nodo(anterior,codigo);
if(anterior!=NULL)
{
nuevo =new nodo;
anterior = agregar_nodo(anterior,nuevo,codigo);
}
else cout<<"El nodo no ha sido encontrado "<<endl;
}
cout<<"DESEA AGREGAR OTRO NODO (s/n)"<<endl;
cin>>resp;
}while(resp != 'n');
cout<< "LA LISTA COMPLETA ES: "<<endl;
apun = inicial;
reco_recur(apun);
//inicio de la agregación de nuevos nodos
cout<<endl ;
cout<<"INICIO DE LA ELIMINACION DE NODOS DE LA LISTA ACTUAL"<<endl;
apun=inicial;
do
{
cout<<endl;
cout<<"Entre codigo clave (Digite el codigo del estudiante que va a eliminar) "<<endl<<endl;
cin>>codigo ;
anterior=inicial;
anterior = buscar_nodo(anterior,codigo);
if(anterior!=NULL)
{
anterior = eliminar_nodo(anterior,codigo);
if ( anterior==NULL)
{
cout<<"El nodo ha sido eliminado existosamente "<<endl;
}
}
else cout<<"El nodo no ha sido encontrado "<<endl;
cout<<"DESEA ELIMINAR OTRO NODO (s/n)"<<endl;
cin>>resp;
}while(resp != 'n');
cout<< "LA LISTA COMPLETA ES: "<<endl;
apun = inicial;
reco_recur(apun);
borrar_lista(inicial);
}