Skip to content

Releases: MrDave1999/LibraryList

LibraryList [v4.4]

26 Jul 00:01
b158228
Compare
Choose a tag to compare
  • Se cambió la declaración de la función freeAll, ahora recibe únicamente un argumento y sirve para poder liberar de la memoria todas las estructuras como ArrayList, LinkedList, etc.

  • Se agregó una función llamada rremove, en la cual sirve para eliminar elementos de una lista según su rango de índices.

LibraryList [v4.2]

02 Jul 00:40
46d07fb
Compare
Choose a tag to compare

1.- Se agregó una función llamada reverse en la cual servirá para invertir los elementos de una lista.

2.- Ahora la función sort sirve para ordenar elementos de un array o lista enlazada.

Ejemplo:

#include <lst/List.h>

int intCompare(const void* p1, const void* p2)
{
	return *(int*)p1 - *(int*)p2;
}

int main(void)
{
	int nums[] = {10, 5, 9, 1};
	ArrayList* list1 = newArrayList();
	LinkedList* list2 = newLinkedList();
	for(int i = 0; i != 4; ++i)
	{
		add(list1, nums[i]);
		add(list2, nums[i]);
	}
	
	/* Ordena el ArrayList con el algoritmo quicksort. */
	sort(list1, intCompare);
	/* Ordena el LinkedList con el algoritmo mergesort. */
	sort(list2, intCompare);
	
	delete(list1);
	delete(list2);
	return 0;
}

LibraryList [v4.0]

22 Jun 17:34
fec3a1f
Compare
Choose a tag to compare

Se incluyó una función en la cual maneja el algoritmo quicksort para ordenar los elementos de un array.

Ejemplo:

#include <stdio.h>
#include <lst/List.h>

int intCompare(const void* p1, const void* p2)
{
	return *(int*)p1 - *(int*)p2;
}

int main(void)
{
	int nums[] = {13, 5, 10, 20, 0, 3, -1, 0};
	ArrayList* listNums = newArrayList();
	for(int i = 0; i != 8; ++i)
		add(listNums, nums[i]);
	
	/* Ordena los elementos usando el algoritmo quicksort. */
	invoke_quicksort(listNums, intCompare);
	/* Imprime la lista ordenada. */
	foreach(int, num, listNums)
		printf("%d\n", *num);
		
	delete(listNums);
	return 0;
}

También se puede hacer uso de la macro sort para no tener que invocar invoke_quicksort de forma explícita:

sort(listNums, intCompare);

LibraryList [v3.9]

07 Jun 16:22
236f0ed
Compare
Choose a tag to compare

Se agregó una nueva función llamada remv, para poder eliminar un elemento de forma segura mientras recorres la lista. Aunque esta función solo funcionará para punteros que sean de tipo ArrayList o LinkedList.

Ejemplo:

ArrayList* listNames = newArrayList();
add(listNames, "MrDave1999");
add(listNames, "Guillem1999");
add(listNames, "Bob");

foreach(char, name, listNames)
{
	if(strcmp(name, "Guillem1999") == 0)
	{
		printf("El nombre %s pronto sera eliminado..", name);
		remv(listNames);
	}
}

El código de arriba es equivalente a esto:

ArrayList* listNames = newArrayList();
add(listNames, "MrDave1999");
add(listNames, "Guillem1999");
add(listNames, "Bob");

setDefault(listNames);
while(hasNext(listNames))
{
        char* name = getNext(listNames);
	if(strcmp(name, "Guillem1999") == 0)
	{
		printf("El nombre %s pronto sera eliminado..", name);
		remv(listNames);
	}
}

LibraryList [v3.7]

06 Jun 19:16
9f05bdb
Compare
Choose a tag to compare
  • Se cambió el significado del retorno de estas dos funciones: addLastAQ y addFirstAS. Ahora estas funciones retornan 1 si hubo una falla al momento de asignar el elemento en la cola o pila, de lo contrario, devuelve 0.

  • Se mejoró el rendimiento del bucle foreach. La implementación anterior hacía que la función getNext() haga una comprobación adicional para no pasarnos del tamaño de la lista y esto evitaba un posible fallo de segmentación. En esta nueva versión, esa comprobación ha sido anulada! y gracias a este nuevo diseño del foreach:

#define foreach(typeData, name, nameList) \
	setDefault(nameList); \
	for(typeData* name = NULL; hasNext(nameList) && (name = getNext(nameList)); )

El diseño de arriba es equivalente a esto:

setDefault(nameList);
while(hasNext(nameList))
{
      typeData* name = getNext(nameList);
      //more code.
}

Para más información leer sobre iterator y foreach.

LibraryList [v3.5]

05 Jun 18:05
719ea38
Compare
Choose a tag to compare

Esta versión contiene lo siguiente:

  • Funciones para manejar colas y pilas por medio de arrays.
  • Una función llamada setContainer, que servirá para activar o desactivar el contenedor (donde se guarden los objetos de tipo ArrayList, LinkedList, entre otros).
  • Un nuevo modelo del bucle foreach, en la cual cuenta con macros como: getDefault, hasNext, getNext.

El diseño es el siguiente:

#define foreach(typeData, name, nameList) \
	for(typeData* name = getDefault(nameList); hasNext(nameList); name = getNext(nameList))

LibraryList [v3.0]

30 May 21:22
ed2801f
Compare
Choose a tag to compare

Esta versión contiene lo siguiente:

  • Una función llamada addSorted, en la cual añade elementos de forma ordenada.
  • Una función llamada findSorted, en la cual servirá para buscar un elemento para poderlo modificar sin que la lista quede desordenada. Esta rutina se encargará en encontrar una nueva posición del elemento que se quiera actualizar.
  • Las funciones bsortLK y bsortAL ahora retornan un valor para poder detectar si la lista está vacía o no.
  • Se implementó colas y pilas tanto para listas enlazadas simples y dobles.

LibraryList [v2.5]

19 May 16:47
1d20438
Compare
Choose a tag to compare

Esta versión contiene lo siguiente:

  • Una comprobación directa en las funciones getLK y iremoveLK para saber si el índice está fuera de rango.
  • Una nueva función llamada isRange, para poder verificar si una posición está en el rango establecido.
  • Una función bSearch_i (búsqueda binaria-index) en la cual retorna el índice donde se encuentre el elemento en la lista.
  • En las funciones setLK y setAL se agregó una característica para que solo puedan tratar únicamente un error, es decir, cuando haya una falla en la asignación de memoria. Por lo tanto, antes de invocar esta función, se deberá de verificar si la posición/índice está afuera de rango con la macro isRange.
  • Una nueva función llamada add_i, en la cual servirá para poder añadir un elemento en una determinada posición de la lista.

LibraryList [v2.0]

08 May 01:18
9ec9219
Compare
Choose a tag to compare

Esta versión contiene lo siguiente:

  • Ahora puedes usar el mismo nombre para hacer operaciones en la lista, ya sea para una lista enlazada o array (como por ejemplo, la función add sirve tanto para un LinkedList y ArrayList).

  • Al segundo parámetro de la función add puedes pasarle literales (o expresiones constantes), como por ejemplo, un número entero, decimal, una cadena, etc.

  • Ahora se puede recorrer la lista usando únicamente el bucle “foreach”, por lo tanto, no necesitas usar forAL o forLK.

  • Se agregó dos tipos de operaciones nuevas: Stack y Queue.

  • Se agregó una función para hacer búsqueda binaria en un ArrayList y una rutina para ordenar elementos (también hay una versión para el LinkedList).

  • Nueva función para poder obtener el valor mínimo y máximo de un LinkedList o ArrayList.

  • Se corrigió las fugas de memoria que ocurría en la función setAL y setLK, ya que al asignar un nuevo objeto, se perdía el anterior.

LibraryList [v1.5]

03 Feb 22:52
93d05fd
Compare
Choose a tag to compare

En esta versión se agregó lo siguiente:

  • Una función para liberar la memoria de un objeto de tipo ArrayList o LinkedList de forma individual.

  • Se solucionó la fuga de memoria ocasionada por la función removeLK.