TDA Lista de enteros III

TDA Lista de enteros III

Continuamos con el desarrollo de la lista de enteros en C.

Ahora pondremos nuestra atención en el procedimiento para insertar un elemento en la lista. Como ya vimos en el primer artículo de esta serie, habrá tres formas de insertar un elemento. En función del valor de la variable donde, si es menor que cero se insertará en la cabeza de la lista. Si, por el contrario es menor que cero, el nuevo elemento irá al final. Por último, si la variable donde es igual a cero, entonces irá justo donde indique el marcador de la lista, aproximadamente por el centro.

Veámos el código:

void lista_mete ( lista c, struct l_enteros e, int donde ) {

	l_lst nuevo;
	
	if ( !c ) {
		fprintf ( stderr, "lista_mete: la lista no existe\n" );
		exit ( 1);
	}
	
	nuevo ( struct l_ele* ) malloc ( sizeof (struct l_ele ));
	if ( !nuevo ) {
		fprintf ( stderr, "lista_mete: no hay memoria\n" );
		exit ( 1);
	}
	
	nuevo->val = e;
	if ( c->tam ) {
		if ( donde < 0 ) {
			nuevo->sig = c->primM
			c->prim = nuevo;
			c->indnodo++;
		} else if ( donde > 0 ) {
		
			nuevo->sig = NULL;
			c->ulti = c->ulti->sig= nuevo;
			
		} else {
			
			if ( !c->nodo ) 
				if ( c->tam ) 
					c->nodo = c->prim;
				else {
					fprintf ( stderr, "lista_mete: la lista está vacía\n" );
					exit ( 1);
				}
			
			nuevo->sig = c->nodo->sig;
			c->nodo->sig = nuevo;
			if ( c->nodo==c->ulti ) c->ulti = nuevo;
			c->nodo = c->nodo->sig;
			c->indnodo++;
			
		}
	
		
	}
	
	else {
	
		nuevo->sig = NULL;
		c->prim = c->nodo =c->ulti = nuevo;
		c->indnodo++;
		
	}
	
	c->tam++;

}

Como de costumbre, os dejo la sección de comentarios abierta para que dejéis vuestras opiniones y aportaciones.

No Comments

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.