domingo, 31 de mayo de 2015

ARBOLES DE BUSCA EN C++


ARBOLES  EN C++


Un árbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios nodos.

Es una estructura de datos ampliamente usada que emula la forma de un árbol (un conjunto de nodos conectados). Un nodo es la unidad sobre la que se construye el árbol y puede tener cero o mas nodos hijos conectados a él. 






CODIGO ARBOLES EN C++

#include <iostream.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <conio.h> 
#include <windows.h> 

struct Nodo 
    int Cod; 
    char nombre[40]; 
    Nodo *HI; 
    Nodo *HD; 
}; 


Nodo* crearNodo(int id, char* n); 
Nodo* buscar (Nodo* p, int matricula); 
void insertar (Nodo** raiz, int matricula, char* nombre); 
void reemplazar(Nodo** act); 
void eliminar (Nodo** raiz, int matricula); 
void visualizar (Nodo* r, int x, int y); 
int profundidad (Nodo *raiz); 
void gotoxy(int x,int y);

int x=10, y=5;

Nodo* crearNodo(int id, char *n) 
        Nodo *t; 
        t = (Nodo*)malloc(sizeof(Nodo)); 
        t->Cod=id; 
        strcpy(t->nombre, n); 
        t->HI=NULL; 
        t->HD=NULL; 
        return(t); 

//Busca un nodo dado: ITERATIVO 
Nodo* buscar (Nodo* raiz, int matricula) 
      int encontrado = 0;

      while (!encontrado && raiz != NULL) 
      { 
            if (matricula == raiz->Cod) 
               encontrado = 1; 
            else if (matricula < raiz->Cod) 
                 raiz = raiz->HI; 
            else if (matricula > raiz->Cod) 
                 raiz = raiz->HD; 
      } 
      return raiz; 
/* 
//Busca un nodo dado: RECURSIVO 
Nodo* buscar (Nodo* raiz, int matricula) 
if(raiz ==NULL || raiz->Cod==matricula) 
return(raiz); 
else 
if(matricula < raiz->Cod) 
buscar(raiz->HD, matricula); 
else 
buscar(raiz->HD, matricula); 
*/ 
//Inserta un nodo con matricula en el lugar que le corresponde 
void insertar (Nodo** raiz, int matricula, char *nombre) 
   if (!(*raiz)) 
      *raiz = crearNodo(matricula, nombre); 
   else 
   if (matricula < (*raiz)->Cod) 
      insertar (&((*raiz)->HI),matricula, nombre); 
      else 
           insertar (&((*raiz)->HD),matricula, nombre); 
/** 
* Elimina un nodo dado 
* Presenta dos casos: 
* 1. El NODO a eliminar es una HOJA o tiene un UNICO descendientelo que hay que 
* hacer es asignar el enlace del NODO PADRE el descendiente del nodo a eliminar 
* 2. El NODO tiene las dos subarboles NO VACIOS, para mantener la estructura 
* de un ABB, se tienen dos alternativas: 
* - Reemplazar el NODO por la menor de las claves mayores en su Subarbol derecho 
* - Reemplazar el NODO por la mayor de las claves menores en su Subarbol izquierdo 
* Se elige la SEGUNDA alternativa.Como las claves menores estan en la rama 
* iquierda, se elige la clave de mas a la derecha (hoja) que es el MAYOR de 
* los menores y que reemplaza el NODO a eliminar. La Funcion reemplazar() 
* realiza esa tarea. 
*/ 
void eliminar (Nodo** r, int matricula) 
     if (!(*r)) 
        printf("!! Nodo no encontrado !!\n\n"); 
     else 
          if (matricula < (*r)->Cod) 
              eliminar(&(*r)->HI, matricula); 
          else 
             if (matricula> (*r)->Cod) 
                 eliminar(&(*r)->HD,matricula); 
             else // Nodo encontrado 
             { 
                   Nodo* q; // puntero al nodo a suprimir 
                   q = (*r); 
                   if (q -> HI == NULL) 
                      (*r) = q -> HD; 
                   else 
                        if (q -> HD == NULL) 
                           (*r) = q -> HI; 
                        else 
                        { // tiene rama izquierda y derecha 
                             reemplazar(&q); 
                        } 
                        free(q); 
                        printf("%d eliminado ...!!\n\n", matricula); 
             } 
//

void reemplazar(Nodo** act) 
     Nodo* a, *p; 

     p = *act; 
     a = (*act)->HI;// rama de menores 
     while (a->HD) 
     { 
           p = a; 
           a = a -> HD; 
     } 
     (*act)->Cod=a->Cod; 
     strcpy((*act)->nombre,a->nombre); 
     if (p == (*act)) 
        p->HI = a -> HI; 
     else 
        p->HD = a -> HI; 
        (*act) = a; 

//Visualiza utilizando recorrido inorden 
void visualizar (Nodo* r, int x, int y) 
     if (r) 
     { 
        /*gotoxy(x,y);    
        visualizar(r -> HI,x,y); 
        printf("k %d \t d %s \n",r->Cod,r->nombre); 
        visualizar(r -> HD,x,y); 
        */
        
        gotoxy(x,y);
        printf("k:%d, d:%s\n",r->Cod,r->nombre); 
        x=x-5;
        y=y+5;
        visualizar(r -> HI,x,y); 
        x=x+10;
        visualizar(r -> HD,x,y); 
        y=y-5;         
     } 

//Elimina cada uno de los nodos del arbol 
void eliminarbol(Nodo *r) 
     if (r != NULL) 
     { 
        eliminarbol(r -> HI); 
        eliminarbol(r -> HD); 
        printf("\tNodo borrado "); 
        free(r); 
     } 
//Determina la mayor profundidad entre sub arbol izquierdo y derecho 
int profundidad (Nodo *raiz) 
    if (!raiz) 
       return 0; 
    else 
    { 
         int profundidadI = profundidad (raiz->HI); 
         int profundidadD = profundidad (raiz->HD); 
         if (profundidadI > profundidadD) 
            return profundidadI + 1; 
         else 
            return profundidadD + 1; 
    } 

void gotoxy(int x,int y)
{  
      HANDLE hcon;  
      hcon = GetStdHandle(STD_OUTPUT_HANDLE);  
      COORD dwPos;  
      dwPos.X = x;  
      dwPos.Y= y;  
      SetConsoleCursorPosition(hcon,dwPos);  

int main() 
    int nm, i=1; 
    char nom[30]; 
    Nodo *Q, *raiz = NULL; 
    do{ 
            system("cls"); 
            printf("\t\tARBOL BINARIO DE BUSQUEDA\n\n"); 
            printf("\t1. Ingresar Registros\n"); 
            printf("\t2. Mostrar el árbol\n"); 
            printf("\t3. Buscar dato\n"); 
            printf("\t4. Eliminar un registro\n"); 
            printf("\t5. Altura del Arbol\n"); 
            printf("\t6. Salir\n "); 
            do{ 
                printf("\n\tDigite su opcion ---> "); 
                scanf("%d%*c", &nm); 
            }while(nm<1 || nm>6); 
            { 
                        if (nm == 1) 
                        { 
                           // Crea el árbol 
                           do{ 
                                system("cls"); 
                                printf("\t\tRUTINA DE INGRESO DE DATOS \n\n"); 
                                printf("\tRegistro %d\n", i); 
                                printf("Codigo(0:Fin)---> "); 
                                scanf("%d%*c",&nm); 
                                if (nm) 
                                { 
                                   printf("Nombre ---------> "); 
                                   gets(nom); 
                                   insertar(&raiz,nm,nom); 
                                } 
                                i=i+1; 
                           }while (nm); 
                        } 
                        if (nm == 2) 
                        { 
                            system("cls"); 
                            printf("\n\t RELACION DE ALUMNOS\n\n"); 
                            visualizar(raiz,x,y);
                            printf("\n\n\n"); 
                            system("pause"); 
                        } 
                        if (nm == 3) 
                        { 
                           int cl; 
                           system("cls"); 
                           printf("\n\t BUSCAR DATO\n\n"); 
                           printf("Codigo ---> "); 
                           scanf("%d",&cl); 
                           Q=buscar(raiz,cl); 
                           if(Q!=NULL) 
                           { 
                               printf("\nDato encontrato: %d %s\n\n",Q->Cod, Q->nombre); 
                           } 
                           else 
                           { 
                                printf("\n%d DATO NO encontrato...\n\n",cl); 
                           } 
                           system("pause"); 
                        } 
                        if (nm == 4) 
                        { 
                           int cl; 
                           system("cls"); 
                           printf("\n\t RUNTINA DE ELIMINACION\n\n"); 
                           printf("Codigo ---> "); 
                           scanf("%d",&cl); 
                           eliminar(&raiz,cl); 
                           system("pause"); 
                        } 
                        else 
                             if(nm == 5) 
                             { 
                                   system("cls"); 
                                   int Altura; 
                                   printf("\n\t RUNTINA DE CALCULO DEL ARBOL\n\n"); 
                                   Altura=profundidad(raiz); 
                                   printf("\nAltura del arbol ---> %d\n", Altura-1); 
                                   system("pause"); 
                             } 
            } 
    }while (nm != 6); 

    system("PAUSE"); 
    return (0); 


COLAS EN C++


COLAS EN C++


Es una estructura lineal de datos. Una cola es un  ordenado de elementos homogéneos en el que los nuevos elementos se añaden por un extremo (el final) y se quitan por el otro extremo (el frente). En las colas el elemento que entró primero, sale también primero.






CÓDIGO DE COLAS EN C++

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>

struct nodo
{
       int numero;    // en este caso es un numero entero
       
       struct nodo *siguiente;
};

struct cola
{
    nodo *delante;   //punteros que apuntan nodos de atras y adelante
    nodo *atras  ;
};


//Funciones con cola
  void Encolar( struct cola &q, int valor );
  int Desencolar( struct cola &q );
  void Mostrarcola( struct cola q );
  void Vaciacola( struct cola &q);
 
//*****************************

int main()
{
    struct cola q;
   
    q.delante = NULL;
    q.atras   = NULL;
   
    int dato;  // numero a encolar
    int op;    // opcion del menu
    int x ;    // numero que devuelve la funcon pop
    do
    {
 system("cls");
      printf("***MENU***\n\n");
      printf("1. Encolar\n");
      printf("2. Desencolar\n");
      printf("3. Mostrar cola\n");
      printf("4. Vaciar cols\n");
      printf("5. Salir\n\n");
      printf("Digite la opcion: ");
      scanf("%d",&op);

switch(op)
{
case 1:
    do 
            {
    system("cls");
    printf("Digite  Cero (0) para salir\n");
    printf("Digite el dato que desea agregar:");
    scanf("%d",&dato);
                if (dato!=0)
            Encolar(q,dato); //le  enviamos a la cola el dato
            }while (dato!=0);
            system("pause");
break;

       case 2:
            x = Desencolar(q);
            printf("El numero desencolado es %d ",x);
            system("pause");
  break;

case 3:
       printf("Mostrando la cola\n");
            if(q.delante!=NULL) Mostrarcola( q );
            else   printf("Cola vacia ... \n");
            system("pause");
break;

case 4:
             Vaciacola( q );
             printf("la cola ha sido vaciada ...\n");
             system("pause");
break;

case 5:
          printf("Ha salido del programa\n");
break;

default:
   printf("Opcion no valida!\n");
   getch();
   }


} while(op!=5);

    system("pause");
    return 0;
}

/*                        Encolar elemento      
------------------------------------------------------------------------*/

void Encolar( struct cola &q, int valor )
{
     struct nodo *aux = new(struct nodo);
     
     aux->numero = valor;
     aux->siguiente = NULL;
     
     if( q.delante == NULL)
         q.delante = aux;   // encola el primero elemento
     else
         (q.atras)->siguiente = aux;
         
     q.atras = aux;        // puntero que siempre apunta al ultimo elemento
}

/*                        Desencolar elemento      
------------------------------------------------------------------------*/
int Desencolar( struct cola &q )
{
     int num ;
     struct nodo *aux ;
     
     aux = q.delante;      // aux apunta al inicio de la cola
     num = aux->numero;
     q.delante = (q.delante)->siguiente;
     delete(aux);          // libera memoria a donde apuntaba aux
     
     return num;
}

/*                        Mostrar Cola      
------------------------------------------------------------------------*/
void Mostrarcola( struct cola q )
{
     struct nodo *aux;
     
     aux = q.delante;
         
     while( aux != NULL )
     {
            printf(" %d ",aux->numero);
            aux = aux->siguiente;
     }    
}

/*              Eliminar todos los elementos de la Cola      
------------------------------------------------------------------------*/
void Vaciacola( struct cola &q)
{
     struct nodo *aux;
     
     while( q.delante != NULL)
     {
            aux = q.delante;
            q.delante = aux->siguiente;
            delete(aux);
     }
     q.delante = NULL;
     q.atras   = NULL;
     
}

PILAS EN C++



PILAS
Son estructuras de datos que tienen dos operaciones básicas: push (para insertar un elemento) y pop (para extraer un elemento).

Su característica fundamental es que al extraer se obtiene siempre el último elemento que acaba de insertarse.








CODIGO DE PILAS EN C++

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>

struct nodo
{
       int nro;        // en este caso es un numero entero
       
       struct nodo *siguiente;
};

typedef struct nodo *Pila; //estamos  definiendo  tipo de  datos  a  struct nodo


//Funciones con pilas
  void push( Pila &p, int valor );
  int pop( Pila &p );
  void mostrarpila( Pila p );
  void destruirpila( Pila &p);

//*****************************

int main()
{
    Pila pila = NULL;//ya  aviamos  declarado el  tipo lista  y lo ponemos  null
int op,x,n,npop;

    do
    {
     system("cls");
          printf("***MENU***\n\n");
          printf("1. Apilar\n");
          printf("2. Desapilar\n");
          printf("3. Mostrar pila\n");     //menu para pilas
          printf("4. Destruir pila\n");
          printf("5. Salir\n\n");
          printf("Digite la opcion: ");
          scanf("%d",&op);
          switch(op)
     {
                case 1:
                    do 
                    {
          system("cls");
          printf("Digite  Cero (0) para salir\n");
          printf("Digite el dato que desea agregar:");
          scanf("%d",&x);
                       if (x!=0)
                  push(pila,x);//le  enviamos a apilar el valor de  (x)
                  printf("El dato ha sido apilado\n");
                    }while (x!=0);
                    system("pause");
           break;

               case 2:
                   mostrarpila(pila);
           npop=pop(pila); //para desapilar dato
           printf("El dato a sido desapilado\n");
           mostrarpila(pila);
           system("pause");
              break;

     case 3:
                   printf("Mostrando Pila\n");
              if(pila!=NULL)
                       mostrarpila(pila); //muestra el estado actual de la pila
                   else
                       printf("La Pila esta vacia...\n");
              system("pause");
              break;

     case 4:
                   mostrarpila(pila);
                   destruirpila(pila);
                   printf("La pila ha sido destruida");
          system("pause");
             break;
            
            case 5:
                  printf("HA SALIDO DEL PROGRAMA!\n");
            break;
            
   default:
   printf("Opcion no valida!\n");
   system("pause");
   }
} while(op!=5);


system("pause");
     return 0;
}

// PARA APILAR DATOS

void push( Pila &p, int valor )
{
     Pila aux;
     aux = new(struct nodo);  // apuntamos al nuevo nodo creado
     aux->nro = valor;
     
     aux->siguiente = p ;
     p = aux ;
}
// PARA DESAPILAR DATOS
int pop( Pila &p )
{
     int num ;
     Pila aux;
     
     aux = p ;
     num = aux->nro;   // asignamos el primer vamor de la pila
     
     p = aux->siguiente ;
     delete(aux);
     
     return num;
}

void mostrarpila( Pila p )
{
     Pila aux;
     aux = p;     // apunta al inicio de la lista
     
     while( aux !=NULL )
     {
            printf(" %d \t", aux->nro);
            aux = aux->siguiente;
     }    
}

/*                Eliminar todos los elementos de la pila      
------------------------------------------------------------------------*/
void destruirpila( Pila &p)
{
     Pila aux;
     
     while( p != NULL)
     {
           aux = p;
           p = aux->siguiente;
           delete(aux);
     }
}


LISTAS EN C++



LISTAS EN C++




LISTAS

Como sabemos en programación secuencial hay agrupaciones de datos limitadas como son los vectores o matrices, las listas cambian esto, ya que se pueden crear dinámica-mente y existen varios manejos y se pueden llevar mas datos.

Y estos datos se llevan en nodos los cuales son los que llevan los datos, un ejemplo seria un vehículo que seria la lista los nodos serian las personas dentro del carro y las datos serian la edad, nombre, teléfono de la persona.

A continuación se puede ver algunos ejemplos 


EXPLICACIÓN CÓDIGO

CÓDIGO EN EJECUCIÓN




CÓDIGO UTILIZADO

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
#include<iostream.h>
#include<string.h>

using namespace std;

struct nodo
{
       int posicion; //para indicar en que posicion se creo 
       int cedula;                          
       char nombre[20];                         
       char apellido[20];
       char sexo[20];  //cedula,nombre,apellido,sexo,edad,tel,correo,dir,semestre,programa
       int edad;
       int telefono;
       char correo[30];
       char direccion[30];
       char semestre[30];
       char programa[30];
       
       struct nodo *siguiente;
};

typedef struct nodo *TipoLista; //estamos  definiendo  tipo de  datos  a  struct nodo


//Funciones con listas
  int Insertar(TipoLista &lista, int pos, int c, char *nom,char *ape, char *se, int ed, int te, char *co, char *di, char *sem, char *pro);
int EliminarRegistro(TipoLista &l, int pos);
int  ListaVacia(TipoLista l);
void MostrarLista(TipoLista l);
void Modificar(TipoLista l, int d,int nd, char *cd, char *ncd, int bandera,int posi);
    void  borrar(TipoLista &l);

//*****************************

int main()
{
    TipoLista lista = NULL;//ya  habiamos  declarado el  tipo lista  y lo ponemos  null
int op,opc,pos=1,bpos; //op opc opciones de menus pos es la posicion en lista estudiante bpos posicion a buscar
int ced,ed,tel; 
                             // cedula,edad,telefono
    char nomb[20],apell[20],sexo[20],corr[30],dir[30],sem[30],pro[30];  //nombre,apellido,sexo,correo,dir,semestre,programa

    TipoLista p;
    do
    {
     system("cls");
          printf("***MENU***\n\n");
          printf("1. Agregar datos estudiante \n");
          printf("2. Modificar datos de estudiante\n");
          printf("3. Mostrar datos del estudiante\n");
          printf("4. Eliminar datos estudiante\n");
          printf("5. Vaciar lista\n");
          printf("6. Salir\n\n");
          printf("Digite la opcion: ");
          scanf("%d",&op);
    
             switch(op)
        {
        case 1:
                do 
                        {
                system("cls");
                printf("Digite  Cero (0) en la cedula del estudiante para salir\n");
                printf("Digite la cedula del estudiante # %d :",pos);  //se ingresa datos del estudiante
                scanf("%d",&ced); 
                if(ced==0) { printf("Digite una tecla para continuar..."); break; }
                fflush(stdin);
                            printf("Digite el nombre del estudiante # %d :",pos); 
                gets(nomb);
                            fflush(stdin); 
                            printf("Digite el apellido del estudiante # %d :",pos);
                gets(apell); 
                fflush(stdin);
                            printf("Digite el sexo del estudiante # %d :",pos) ;
                gets(sexo); 
                fflush(stdin);
                printf("Digite la edad del estudiante # %d :",pos);  
                scanf("%d",&ed);
                fflush(stdin);
                printf("Digite el telefono del estudiante # %d :",pos) ;
                scanf("%d",&tel); 
                fflush(stdin);
                printf("Digite el correo del estudiante # %d :",pos);
                gets(corr);
                fflush(stdin);
                printf("Digite el direccion del estudiante # %d :",pos) ;
                gets(dir);
                fflush(stdin);
                printf("Digite el semestre del estudiante # %d :",pos); 
                gets(sem);
                fflush(stdin);
                printf("Digite el programa del estudiante# %d :",pos); 
                gets(pro);
                fflush(stdin);
                           pos=Insertar(lista,pos,ced,nomb,apell,sexo,ed,tel,corr,dir,sem,pro);//le enviamos valores a lista
                            }while (ced!=0);
        break;
        
                case 2:
                     int dato,ndato;
                     char cdato[20], cndato[20];
                    MostrarLista(lista);
                    opc=0;
                    printf("\n Digite la posicion del estudiante en la lista:  ");
            scanf("%d",&bpos);
            printf("\n Digite 1 (uno) si el dato que desea modificar es un numero o digite 2 (dos) si son letras:  ");
            scanf("%d",&opc);
            if(opc==1)   
                     {
                            printf("\n Digite el dato a modificar: "); 
                            scanf("%d",&dato);  
                            printf("\n Digite el dato nuevo: ");
                   scanf("%d",&ndato); 
                            Modificar(lista,dato,ndato,"x","x",opc,bpos); 
                     }
                     if(opc==2)   
                     {
                            fflush(stdin);       
                            printf("\n Digite el dato a modificar: "); 
                            gets(cdato); 
                            fflush(stdin); 
                            printf("\n Digite el dato nuevo: ");
                   gets(cndato); 
                            fflush(stdin);  
                            Modificar(lista,0,0,cdato,cndato,opc,bpos);   
                     }
                     if(opc!=1 && opc!=2)   
                     {
                             printf("\n no ha elegido bien... debe ingresa de nuevo desde menu \n ");     
                     }     
            system("pause");
                break;
        
        case 3:
               MostrarLista(lista);
               system("pause");
        break;
        
        case 4:
                     MostrarLista(lista);
            printf("Digite la posicion del estudiante que desea eliminar:");
            scanf("%d",&bpos);
                     pos=EliminarRegistro(lista,bpos);
            system("pause");
        break;
        
        case 5:
                     printf("LA LISTA  SERA  BORRADA!\n");
                    borrar( lista);
                    MostrarLista(lista);
                    system("pause");
        break;
       
        case 6:
                     printf("ha salido del pograma\n");
                system("pause");
        break;
             
        default:
           printf("Opcion no valida!\n");
           system("pause");
              }


} while(op!=6);

    printf("ha salido del pograma\n");
system("pause");
    return 0;
}



//***********
//Lista Vacia
int ListaVacia(TipoLista lista)
{
return (lista == NULL);
}
 //**************************
//Insertar registro
int Insertar(TipoLista &lista, int pos, int c, char *nom,char *ape, char *se, int ed, int te, char *co, char *di, char *sem, char *pro)//estamos embiando nul y un  balor que  es (x)
{
    TipoLista nuevo , anterior;
    nuevo = new(struct nodo);
    nuevo->posicion=pos;
    nuevo->cedula = c;
    strcpy(nuevo->nombre,nom);
    strcpy(nuevo->apellido,ape);
    strcpy(nuevo->sexo,se);
    nuevo->edad = ed;
    nuevo->telefono = te;
    strcpy(nuevo->correo,co);
    strcpy(nuevo->direccion,di);
    strcpy(nuevo->semestre,sem);
    strcpy(nuevo->programa,pro);
    //ordeno los elementos  ingresados
    if (ListaVacia(lista) || lista->cedula > c)
    {
       nuevo->siguiente = lista;
       lista  = nuevo;
    }
    else
    {
        anterior= lista;
    
        while(anterior->siguiente  &&  anterior->siguiente->cedula <= c)
        anterior= anterior->siguiente;
        nuevo->siguiente=anterior->siguiente;
        anterior->siguiente=nuevo;   
    } 
    pos++;
    return pos; 
}
 //**************************
//Imprimir lista
void MostrarLista(TipoLista lista)
{
  //  int a[];
TipoLista nodo = lista;

   if(ListaVacia(nodo)) printf("Lista vacia\n");
   else 
   {
while(nodo) 
        {
              printf("posicion: %d \n", nodo->posicion);
              printf("cedula: %d \n", nodo->cedula); //cedula,nombre,apellido,sexo,edad,tel,correo,dir,semestre,programa
              printf("nombre: "); puts(nodo->nombre);
              printf("apellido: "); puts(nodo->apellido);
              printf("sexo: "); puts(nodo->sexo);
              printf("edad: %d \n", nodo->edad);
              printf("telefono: %d \n", nodo->telefono);
              printf("correo: ");puts(nodo->correo);
              printf("direccion: ");puts(nodo->direccion);
              printf("semestre: ");puts(nodo->semestre);
              printf("programa: ");puts(nodo->programa);
              printf("- - - - - - - - -\n");
              
              nodo = nodo->siguiente;
        }
        printf("\n");
   }
}
 //**************************
//Modificar
 void Modificar(TipoLista lista, int d,int nd, char *cd, char *ncd, int bandera, int posi)
{
TipoLista nodo;
int ban = 0, bane = 0;
nodo = lista;

while(nodo)
     {
         if(nodo->posicion == posi)  
         {      
                if(bandera==1)  //para modificar cedula edad telefono
                {        
                      if(nodo->cedula == d) 
                      {
                    nodo->cedula=nd;
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);
                            //break;
                      }
                      if(nodo->edad == d)
                      {
                    nodo->edad=nd;
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);
                            //break;
                      }
                      if(nodo->telefono == d) 
                      {
                    nodo->telefono=nd;
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);//estamos  mostrando la  lista
                            //break;
                      } 
               }
               if(bandera==2) //modifica nombre,apellido,sexo,correo,dir,semestre,programa
                {        
                      if(strcmp(nodo->nombre,cd)==0) 
                      {
                            strcpy(nodo->nombre,ncd);
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);
                            break;
                      }
                      if(strcmp(nodo->apellido,cd)==0) 
                      {
                            strcpy(nodo->apellido,ncd);
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);
                            break;
                      }
                      if(strcmp(nodo->sexo,cd)==0) 
                      {
                            strcpy(nodo->sexo,ncd);
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);
                            break;
                      }
                      if(strcmp(nodo->correo,cd)==0) 
                      {
                            strcpy(nodo->correo,ncd);
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);
                            break;
                      }
                      if(strcmp(nodo->direccion,cd)==0)
                      {
                            strcpy(nodo->direccion,ncd);
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);
                            break;
                      }
                      if(strcmp(nodo->semestre,cd)==0) 
                      {
                            strcpy(nodo->semestre,ncd);
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);
                            break;
                      }
                      if(strcmp(nodo->programa,cd)==0) 
                      {
                            strcpy(nodo->programa,ncd);
                    ban=1;
                    printf("Registro Modificado\n");
                            MostrarLista(lista);
                            break;
                      }
               }
               bane=1;
         }
       nodo = nodo->siguiente;//nod   es  igual al  nodo  digiente   ba  aumentando posiciones 
}
if(ban==0)
    printf("No se encontro el registro\n");
    if(bane==0)
    printf("No se encontro el estudiante\n");
}
 //**************************
//Eliminar
int EliminarRegistro(TipoLista &lista, int pos)//en la  lista  ba  a  borrar el  valor  ingresado que esta  guarado en v
{
    TipoLista nodo, anterior;//creamos  dos nodos
    nodo= lista;
    int ban =0;

    if(lista!=NULL)
    {
        while(nodo!=NULL)
        {
            if(nodo->posicion==pos)
            {
            ban=1;
               printf("Registro del estudiante Eliminado\n");
                if(nodo==lista)//para el ultimo  valor
                    lista = lista->siguiente;//es igual al  sigiente  valor y como es  el ultimo es null lista =null
                else
                    anterior->siguiente = nodo->siguiente;// anterio apunta a sigiente  y esto es  =  nodo sigiente apunta a  sigiente//elimina  la  posicion  y apunta a la  sigiente posicion
                delete(nodo);//y  borramos  nodo
                pos--;
                return pos;
            }
            anterior = nodo;// la posicion actual
            nodo =nodo->siguiente;//pasa  a la  sigiente posicion
        }
    }
    else
        printf(" Lista vacia..!\n");
if(ban==0)
    printf("No se encontro el registro del estudiante %d \n",pos);
    return pos;
}

 void  borrar(TipoLista &lista)
 {
    TipoLista  nodo , anterior;//creamos  dos nodos
    nodo= lista;
    if(lista!=NULL)
    {
        while(lista!=NULL)
       {      
               nodo=lista ;
               lista = lista->siguiente;  
               delete(nodo);//y  borramos  nodo                       
       }
    }
}