Esempio n. 1
0
void Insertar(Lista *lista, int v) {
   pNodo nuevo, anterior;
 
   /* Crear un nodo nuevo */
   nuevo = (pNodo)malloc(sizeof(tipoNodo));
   nuevo->valor = v;
   
   /* Si la lista está vacía */ 
   if(ListaVacia(*lista) || (*lista)->valor > v) {
      /* Añadimos la lista a continuación del nuevo nodo */
      nuevo->siguiente = *lista; 
      /* Ahora, el comienzo de nuestra lista es en nuevo nodo */
      *lista = nuevo;
   } else {
      /* Buscar el nodo de valor menor a v */
      anterior = *lista;
      /* Avanzamos hasta el último elemento o hasta que el siguiente tenga 
         un valor mayor que v */
         printf("%p, %d", anterior->siguiente, anterior->valor);
         getchar();
      while(anterior->siguiente && anterior->siguiente->valor <= v) 
      {
         anterior = anterior->siguiente;
         printf("por qu'e co;os me ejecuto?");
         
      }
      /* Insertamos el nuevo nodo después del nodo anterior */
      nuevo->siguiente = anterior->siguiente;
      
   printf("1 %p", nuevo->siguiente);
   getchar();
      anterior->siguiente = nuevo;
   }
}
Esempio n. 2
0
// Elimina el primer elemento de la lista
void EliminarPrimero(Lista C)
{
	if (!ListaVacia(C))
	{
		C->inicio =(C->inicio+1) % C->Lmax;
		C->Nelem=C->Nelem-1;
	}
}
Esempio n. 3
0
//Pre: Lista C no está vacía, i: es un índice entre 0 y TamMax
//Post:Devuelve el elemento i-ésimo de la lista C (no lo elimina de la lista)
tElemento *ExtraerElem(Lista C,int i)
{
	if(ListaVacia(C))
		ERROR("ExtraerPrimero: No hay elementos");
	//SE AÑADE UNA VARIABLE DE RETORNO, PUESTO QUE return PUEDE PROVOCAR PÉRDIDA EN LA CONVERSIÓN DE TIPOS
	tElemento *retorno=(tElemento*) malloc(sizeof(tNodoBusqueda));
	*retorno = (C->elementos[i]);
	return retorno;//(tElemento *)(C->elementos[i]);
}
Esempio n. 4
0
void MostrarLista(Lista lista) {
   pNodo nodo = lista;

   if(ListaVacia(lista)) printf("Lista vacía\n");
   else {
      while(nodo) {
         printf("%d -> ", nodo->valor);
         nodo = nodo->siguiente;
     }
     printf("\n");
   }
}
Esempio n. 5
0
//Pre: Lista L1 no está vacía
//Post: Devuelve L1+L2
Lista Concatenar(Lista L1, Lista L2)
{
	//tElemento *e=(tElemento*) malloc(sizeof(tElemento));

	//if(!ListaVacia(L1))
		while(!ListaVacia(L2) && (!ListaLlena(L1)))
		{
			//e=(tElemento*) ExtraerPrimero(L2);
			InsertarUltimo(ExtraerPrimero(L2),L1);
			EliminarPrimero(L2);
		}
	return L1;
}
Esempio n. 6
0
//Pre: Lista C no está llena
//Post:Devuelve el ultimo elemento de la lista
void InsertarUltimo(tElemento *e, Lista C)
{
	//si inicio == fin estamos en el caso del primer nodo de la lista
	if(((C->fin == 0) && (C->inicio == 0)) && (ListaVacia(C)))
		InsertarPrimero(e,C);
	else
	{
		if(C->fin == C->Lmax-1)
			C->fin=0;
		else
			C->fin = (C->fin+1) % C->Lmax;

		C->elementos[C->fin] =  *e;//(tElemento) e;
		C->Nelem=C->Nelem+1;
	}
}
Esempio n. 7
0
//Pre: Lista C no está llena
//Post:Devuelve el elemento primero de la lista
void InsertarPrimero(tElemento *e, Lista C)
{
	//si inicio == fin estamos en el caso del primer nodo de la lista
	if(((C->inicio == 0) && (C->fin == 0)) && (ListaVacia(C)))
	{
		C->elementos[C->inicio] = *e;//(tElemento) e;
		C->Nelem=C->Nelem+1;
	}
	else
	{
		if(C->inicio>=0 && (C->inicio < C->Lmax-1))
			C->inicio = (C->inicio-1) % C->Lmax; //inserta antes que el primero
		if(C->inicio == C->fin)
			C->inicio = C->inicio-1;
		else
			C->inicio=C->Lmax-1;

		C->elementos[C->inicio] = *e;//(tElemento) e;
		C->Nelem=C->Nelem+1;
	}
}