Releases: MrDave1999/LibraryList
LibraryList [v4.4]
-
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 comoArrayList
,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]
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]
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]
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]
-
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, devuelve0
. -
Se mejoró el rendimiento del bucle
foreach
. La implementación anterior hacía que la funcióngetNext()
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 delforeach
:
#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.
}
LibraryList [v3.5]
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 tipoArrayList
,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]
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]
Esta versión contiene lo siguiente:
- Una comprobación directa en las funciones
getLK
yiremoveLK
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
ysetAL
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 macroisRange
. - 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]
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]
En esta versión se agregó lo siguiente:
-
Una función para liberar la memoria de un objeto de tipo
ArrayList
oLinkedList
de forma individual. -
Se solucionó la fuga de memoria ocasionada por la función
removeLK
.