dev c++ – agenda con punteros,arreglos y registros

me pueden ayudar a solucionar este problema? necesito crear una agenda en c++ con punteros,arreglos y registros. Termine de escribirlo,me compilo pero luego de introducir la primera opcion en el menu,se me cierra. ya intente buscar el problema pero no lo encuentro,agradeceria de mucho su ayuda.

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

typedef struct tjugador{
                   string nombre;
                   string apellido;
                   string apodo;
                   int puntaje;
};
typedef struct nodo *pnodo;
//<tipo de dato al que va a apuntar el puntero> *<nombre del puntero>

typedef struct nodo{
                     tjugador datos;
                     pnodo sig;
                     pnodo ant;
                     };
                     
typedef pnodo tpunteros (2);
//Posicion 0 es puntero de inicio
//Posicion 1 es puntero final
typedef struct tlista{
                       tpunteros indicadores;
                       char claves;
                       int cant;
                      };
typedef tlista tclaves (26);


void iniciarlistas(tclaves &claves);
void cargarjugador(tjugador &p);
void crearjugador(pnodo &nuevo);
void agregarordenxclave(tclaves &claves,pnodo nuevo);
void agregarorden (tlista &lista, pnodo nuevo1);
void tamanio (tclaves claves);
bool vacio(tlista lista); 
pnodo quitarespecifico(tlista &lista,tjugador p);
bool consultarclave (tlista lista, tclaves claves, string p);
bool consultarjugador(tlista lista, tjugador p);
void listar(tlista lista);

int main()
{
  tlista lista;
  tclaves claves;
  pnodo nuevo;
  int op;
  char rta;
  string c;
    
  void iniciarlistas(tclaves &claves);
  do{
      cout<<"................MENU.................."<<endl;
        cout<<"n1: Agregar persona a la agenda";
        cout<<"n2: Remover contacto";
        cout<<"n3: Numero de contactos";
        cout<<"n4: Consultar a la agenda si está vacía";
        cout<<"n5: Buscar contacto";
        cout<<"n6: Mostrar contactos según la clave ingresada";
        cout<<"n7: Mostrar agenda";
        cout<<"n0: Finalizar Porgrama";
        cout<<"nElija una opcion: ";
        cin>>op;
        cout<<"n";
    switch (op){
        
        case 1:
            do{
            crearjugador(nuevo);
            if (nuevo != NULL){
                agregarorden(lista,nuevo);
                cout<<"¿Desea agregar más jugadores a la lista?"<<endl;
                cout<<"presione S para agregar o N para salir de este menu"<<endl;
                cin>>rta;
            }
        }while (rta='S');
            system("pause");
            system("cls");
            break;
            
        case 2:
            {
            
                tjugador borrado;
                pnodo extraido;
                    
                cout<<"Ingrese el nombre del jugador que desea borrar";
                cin>>borrado.nombre;
                cout<<"Ingrese el apellido del jugador que desea borrar";
                cin>>borrado.apellido;
                    
                extraido = quitarespecifico(lista,borrado);
                    
                if(extraido==NULL){
                    cout<<"No se encuentra el jugador que desea borrar"; break;
                }else{
                    cout<<"Se borro con exito al jugador seleccionado"<<endl;
                    delete(extraido);
                    break;
                }
            system("pause");
            system("cls");
            break;
        }
        
        case 3:
            
            cout<<"El numero total de jugadores es:"<<endl;
            tamanio(claves);
            system("pause");
            system("cls");
            break;
            
        case 4: 
                    {
                    
                    bool band=vacio(lista);
                    
                    if(band==true){
                        cout<<"La agenda esta vacia"<<endl; 
                        break;
                    }else{
                        cout<<"La agenda no esta vacia"<<endl; 
                        break;
                    }
                }
            system("pause");
            system("cls");
            break;
            break;
            
        case 5:
        {
            
            tjugador buscado;
            
            cout<<"n Ingrese nombre de la persona que desea buscar"<<endl;
            cin>>buscado.nombre;
            
            cout<<"n Ingrese apellido de la persona que desea buscar"<<endl;
            cin>>buscado.apellido;
            
            bool band=consultarjugador(lista, buscado);
            
            if(band==true){
                cout<<"El jugador pertenece a la agenda"<<endl;
            }else{
                cout<<"El jugador no pertenece a la agenda"<<endl;
            }
            system("pause");
            system("cls");
            break;
            break;
        }
        case 6:
            {
            consultarclave(lista, claves, c);
            system("pause");
            system("cls");
            break;
        
            }
        case 7:
            listar(lista);
            system("pause");
            system("cls");
            break;
        case 0:
                cout<<"n Saliendo del Programa ..."<<endl;
        break;
        system("pause");
        system("cls");
        default:
            cout<<"n Opción Incorrecta"<<endl;
                    system("pause");
            system("cls");
            break;
    }
  }while (op!=0);
 system ("pause");
}
void iniciarlistas(tclaves &claves){
    
    int j=97;
    
    for (int i=0; i<26; i++){
        claves(i).indicadores (0)=NULL;
        claves(i).indicadores (1)=NULL;
        claves(i).claves=char (j+i);
    }
}

void crearjugador(pnodo &nuevo){
 
tjugador p;
nuevo=new nodo;
  
  if (nuevo!=NULL){
    
       cargarjugador(p);
       nuevo->datos=p;
       nuevo->sig=NULL;
       nuevo->ant=NULL;
  }
  
  else 
     cout << "MEMORIA INSUFICIENTE" << endl;    
}

void cargarjugador(tjugador &p){
    
    cout<<"***************CARGAR JUGADOR***************"<<endl;
    cout<<"Nombre"<<endl;
    cin>>p.nombre;
    cout<<"Apellido"<<endl;
    cin>>p.apellido;
    cout<<"Apodo"<<endl;
    cin>>p.apodo;
    cout<<"Puntaje"<<endl;
    cin>>p.puntaje;
    
} 


void agregarorden(tlista &lista, pnodo nuevo1 ){ 

    pnodo i;
    
  if (lista.indicadores (0)==NULL && lista.indicadores(1)==NULL){
    
    lista.indicadores(0)=nuevo1;
    lista.indicadores(1)=nuevo1;
  }
  
  else{
    
    if (nuevo1->datos.apellido <= lista.indicadores(0)->datos.apellido ){
        
        nuevo1->sig=lista.indicadores(0);
        (lista.indicadores(0))->ant=nuevo1;
        lista.indicadores(0)=nuevo1;
     }
     
     else{
        
         if(nuevo1->datos.apellido >= (lista.indicadores(1))->datos.apellido){
            
                  (lista.indicadores(1))->sig=nuevo1;
                  nuevo1->ant=lista.indicadores(1);
                  lista.indicadores(1)=nuevo1;
         }     
     
         else{
            
              i=lista.indicadores(0);
              while (i->sig!=NULL && nuevo1->datos.apellido > (i->sig)->datos.apellido){
                
                  i=i->sig;
              }
                   
              nuevo1->sig=i->sig;
              nuevo1->ant=i;
              (nuevo1->sig)->ant=nuevo1;
              i->sig=nuevo1;
              
         }
     }                  
  }
}
void agregarordenxclave(tclaves &claves,pnodo nuevo1){
    
    if (nuevo1==NULL){
        cout<<"AGENDA LLENA"<<endl; 
    }
    
    else{
        for (int i=0; claves(i).claves != nuevo1->datos.apellido(0);i++){
        agregarorden (claves(i), nuevo1);
    }
    }
}

pnodo quitarespecifico(tlista &lista,tjugador p){ 

pnodo borrado,i;

  if (lista.indicadores(0)==NULL && lista.indicadores(1)==NULL)
    borrado=NULL;
  else 
    if (lista.indicadores(0)->datos.nombre==p.nombre && lista.indicadores(0)->datos.apellido==p.apellido){   
        borrado=lista.indicadores(0);
        
        if (lista.indicadores(0)->sig==NULL){
           lista.indicadores(0)=NULL;
           lista.indicadores(1)=NULL;
        }
        
        else{
            
        if (lista.indicadores(1)->datos.nombre==p.nombre && lista.indicadores(1)->datos.apellido==p.apellido){
        borrado=lista.indicadores(1);
        if(lista.indicadores(0)->sig==NULL){
            lista.indicadores(0)==NULL;
            lista.indicadores(1)==NULL;
        }else{
            if(i->sig!=NULL){
                borrado=i->sig;
                i->sig=borrado->sig;
                (borrado->sig)->ant=i;
                borrado->sig=NULL;
                borrado->ant=NULL;
            }else{
                borrado=NULL;
            }
}
}
}
}
  return borrado;         
}
 
void tamanio (tclaves claves){
    int sumatotal=0;
    for (int i=0; i<26;i++){
        sumatotal=sumatotal+claves(i).cant;
    }
    cout<<"El tamaño es:"<<sumatotal<<endl;
}
bool vacio(tlista lista){
    
    bool band=false;
    
    if(lista.indicadores(0)!=NULL && lista.indicadores(1)!=NULL) 
    band=true;
    
    return band;
}
/*bool consultar_contacto(tlista lista, tpersona p){
pnodo i;
  bool encontrado=false;
  /*cout<<"Ingrese la clave del usuario que desea ver"<<endl;
  cin>>p;
  if (lista.indicadores(0)!=NULL)
  {
    for(i=lista.indicadores(0);i!=NULL && encontrado==false;i=i->sig);  
      if (i->dato==p)
        encontrado=true;
    }
  return encontrado;      
}*/
bool consultarjugador(tlista lista,tjugador p){
    
    bool band=false;
    pnodo i;
    
    for(i=lista.indicadores(0);i!=NULL && band!=true;i=i->sig){
        if(i->datos.nombre==p.nombre && i->datos.apellido==p.apellido){
            band=true;
        }
    }
    
    return band;
}

bool consultarclave (tlista lista, tclaves claves, string p){
    
    pnodo i;
    
    cout<<"Ingrese el apellido del jugador"<<endl;
    
    if (lista.indicadores(0)=NULL){
        cout<<"Primero registre un jugador"<<endl;
        }
        else{
        for (i=lista.indicadores(0); i!=NULL; i=i->sig){
            if (i->datos.apellido==p){
                cout<<"El jugador es: "<<i->datos.apellido<<endl;
            }
        }
    }
}
void listar(tlista lista){
    
    pnodo p;
    
    if (lista.indicadores(0)!=NULL){
        for (p=lista.indicadores(0); p!=NULL; p=p->sig){
            cout<<"El jugador es: "<<p->datos.nombre<<endl;
        }
    }else{
        cout<<"Agenda vacia"<<endl;
    }
}