TDA Lista de enteros VI

TDA Lista de enteros VI

En éste artículo aprenderemos a dividir en dos la lista de enteros con la que estamos trabajando. El punto en el que dividiremos la lista vendrá dado por el argumento posicion.

Como ya vimos en el primer artículo de éste pequeño tutorial, es necesario comprobar una serie de precondiciones: que la lista exista y que haya disponible suficiente memoria para las dos sub-listas que vamos a generar.

El código fuente en si es bastante sencillo en comparación con los procedimientos de insertar o sacar un elemento de la lista. Veamos el código:

lista lista_corta ( lista c, int posicion ) {
	
	lista rep;
	
	if ( !c ) {
		fprintf ( stderr, "lista_corta: la lista no existe\n" );
		exit ( 1);
	}
	
	rep=(struct l_dir* ) malloc (sizeof (struct l_dir);
	if ( rep == NULL ) {
		fprintf ( stderr, "lista_corta: no hay memoria\n" );
		exit ( 1);
	}
	
	l_marc ( c, posicion );
	if  (c->indnodo == posicion) {
	
		rep->nodo = rep->prim = c->nodo->sig;
		rep->ulti = c->ulti;
		c->ulti = c->nodo;
		c->nodo->sig = NULL;
		rep->tam = c->tamp-posicion;
		rep->indnodo = 1;
		c->tam = c->tam-rep->tam;
		c->indnodo = c->tam;
	
	}
	
	else {
	
		free ( rep );
		rep = NULL;
		
	}
	
	return ( rep );
	
}

Os invito a que dejéis vuestra opinión en la caja de comentarios del blog o un código alternativo.

No Comments

Post a Comment