Problema con punteros
Problema con punteros
Tengo un problema, he hecho un ejercicio con punteros, la estructura es un
array de punteros a listas enlazadas, cada nodo de la lista tiene un
registro y un puntero al siguiente nodo, la practica esta casi entera hecha
solo que no ordena los nodos alfabéticamente me da un error de violación de
memoria o algo así, pasteo el subalgoritmo y los tipos:
A ver si m podéis ayudar
Gracias
Hasta pronto
//Tipos
const int MAX=10;
const int ENTER = '\n';
typedef char tcadena [MAX];
struct tdatos
{
tcadena nombre;
tcadena apellido;
int NSS;
int nomina;
};
struct nodolista
{
tdatos datos;
nodolista *sig;
};
typedef nodolista *tlista;
typedef tlista ttabla [MAX];
---
void ordenar (ttabla &t)
{
tlista ant, act, p;
int i;
for (i=0; i<MAX; i++)
{
if (t!=NULL)
ant = t;
act = t->sig;
p=NULL;
while (act != NULL)
{
if (comparag (ant->datos.nombre, act->datos.nombre))
{
intercambia (p, ant, act);
p=ant;
ant=act;
act=act->sig;
}
}
}
visualizar (t);
}
bool comparag (tcadena p, tcadena b) //da true si la primera cadena metida
como parametro
{ //es menor que la segunda
int i;
i=0;
while (i<MAX)
{
if (p==b)
{
i++;
}
else
{
return (p<b);
}
}
}
void intercambia (tlista &p, tlista &ant, tlista &act)
{
tlista aux;
aux = ant;
p->sig=act;
ant->sig = act->sig;
act->sig=ant;
}
Tengo un problema, he hecho un ejercicio con punteros, la estructura es un
array de punteros a listas enlazadas, cada nodo de la lista tiene un
registro y un puntero al siguiente nodo, la practica esta casi entera hecha
solo que no ordena los nodos alfabéticamente me da un error de violación de
memoria o algo así, pasteo el subalgoritmo y los tipos:
A ver si m podéis ayudar
Gracias
Hasta pronto
//Tipos
const int MAX=10;
const int ENTER = '\n';
typedef char tcadena [MAX];
struct tdatos
{
tcadena nombre;
tcadena apellido;
int NSS;
int nomina;
};
struct nodolista
{
tdatos datos;
nodolista *sig;
};
typedef nodolista *tlista;
typedef tlista ttabla [MAX];
---
void ordenar (ttabla &t)
{
tlista ant, act, p;
int i;
for (i=0; i<MAX; i++)
{
if (t!=NULL)
ant = t;
act = t->sig;
p=NULL;
while (act != NULL)
{
if (comparag (ant->datos.nombre, act->datos.nombre))
{
intercambia (p, ant, act);
p=ant;
ant=act;
act=act->sig;
}
}
}
visualizar (t);
}
bool comparag (tcadena p, tcadena b) //da true si la primera cadena metida
como parametro
{ //es menor que la segunda
int i;
i=0;
while (i<MAX)
{
if (p==b)
{
i++;
}
else
{
return (p<b);
}
}
}
void intercambia (tlista &p, tlista &ant, tlista &act)
{
tlista aux;
aux = ant;
p->sig=act;
ant->sig = act->sig;
act->sig=ant;
}
2 respuestas
Respuesta de molk
1
Respuesta