Void duplicar(TPila<T>*&pila){ _cima = duplicarRec( _cima ); } TnodoPila<T>* duplicarRec(TNodoPila<T>*act){ If (act = = NULL) return null; Else{ TNodoPila<T>*aux; aux= TNodoPila<T>(act->elem()); aux->_sig=act; duplicarRec( act->sig() ); return aux; } } Es un algoritmo voraz luego pasa una vez por cada valor original: Coste=n Class TAsignatura{ Public: -----------------------Private: TNombre asignatura; TGrupo grupo; TProfesor profesor; (pareja<nombreAlum,nota>*)*_listaAlumnos; Int tope; } Class Talumno{ Public: --------------------------Private: TNombreAlumno nombreAlum; TNota nota; } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Void TAsignatura<TElem>::insertar( const TAlumno& alumno){ //PRE: Array ordenado por orden alfabético de nombre de los alumnos if (tope==max) throw EAccesoIndebido(“ Clase esta llena ”); else { bool enc=false; int i=0; while((!enc)&&(i<tope)){ if (_listaAlumnos[i]->primero() > alumno){ for (int j=tope;j>i;j--){_listaAlumnos[j]= _listaAlumnos[j-1];} Enc=true; } _listaAlumnos[i++]=alumno; } } //POST: Si tope = MAX entonces error array lleno(clase esta llena). Devuelve el //array con los alumnos insertados y matriculados en una asignatura. } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Void TAsignatura<TElem>::suprimir ( const TAlumno& alumno){ //PRE: Array ordenado por orden alfabético de nombre de los alumnos Bool encontrado=false; int posición; buscarAlumno(alumno,encontrado,posicion); if (encontrado) { for (int j=posicion;i>tope;i++){_listaAlumnos[i]= _listaAlumnos[i+1];} } } Void TAsignatura<TElem>:: buscarAlumno(const TAlumno& alumno , bool& enc ,int& pos); buscarAlumnoRec(a,enc,pos,0,tope-1); } Void TAsignatura<TElem>:: buscarAlumnoRec(const TAlumno& alumno , bool& enc ,int& pos, int inicio, int fin); If (inicio>fin) throw EAI(“Vacia”); Else{ Int medio=(inicio+fin)/2; If ((_listaAlumnos[medio]->primero() == a) {enc=true; pos=medio;} Else { If ((_listaAlumnos[medio]->v1() > a) { buscarAlumnoRec( a , enc ,pos, 0, medio-1);} Else { buscarAlumnoRec( a , enc ,pos, medio+1, fin);} } } } char * convertir (char * v, int T){ Pila <char *> p =new Pila<char *>; for (int i=0;i<T;i++){ if esoperando(v[i]){ car[T] aux; inicializa(aux); aux[0]=v[i]; p.apila(aux); } else { char[T] aux = p.desapila(); char[T] aux2 = p.desapila(); strcpy (aux,'(',aux,v[i],aux2,')'); p.apila(aux); } return p.desapila(aux); } }