TDA Cola con puntero al primer elemento IV

TDA Cola con puntero al primer elemento IV

Con éste artículo terminamos la serie dedicada al tipo de dato abstracto con el puntero apuntando al primer elemento. Ahora veremos como crear una copia de la cola. Es una función en la que se le pasa como argumento una cola por valor, y se devuelve una copia de esa cola. Es un código bastante útil y bastante común.

Quizás ésta será la función más complicada que veremos en ésta serie. Comenzamos, como siempre, ver el código y luego dedicaremos un tiempo a explicarlo.

c_int c_int_copy ( c_int c ) {

	c_int b, corr, nuevo;
	
	b = NULL;
	
	if ( c ) {
		
		nuevo = ( struct c_int_ele* ) malloc ( sizeof struct c_int_nuevo ));
		if ( !nuevo ) {
			fprintf ( stderr, "c_int_copy: No hay memmoria suficiente\n" );
			exit(1);
		}
		
		nuevo->val = c->val;
		b = corr = nuevo;
		c = c->sig;
		
		while ( c ) {
			
			nuevo = ( struct c_int_nuevo* ) malloc ( sizeof ( struct c_int_nuevo ));
			if ( !nuevo ) {
				fprintf ( stderr, "c_int_copy: No hay memoria suficiente\n" );
				exit (1);
			}
			
			nuevo->val = c->val;
			corr = corr->sig = nuevo;
			c = c->sig;
		}
		
		corr->sig = NULL;
	}
	
	return (b);
}

Como siempre, comenzamos comprobando si la cola existe, si tiene algún elemento. En caso contrario, no tiene sentido seguir.

En caso contrario tomamos referencia al primer elemento de la cola y comenzamos un bucle en el que se va recorriendo la cola hasta llegar al final. En cada ciclo, se reserva memoria para el nuevo elemento de la cola y, se comprueba si existe memoria para el nuevo elemento. En caso de que se produzca un error, automáticamente se sale de la función.

Como siempre, ésto no es más que una propuesta para éste tipo de estructura de datos. En cualquier caso, siempre animo a los que estéis leyendo éste artículos a que proporcioneis alternativas.

No Comments

Post a Comment