-
Notifications
You must be signed in to change notification settings - Fork 0
/
lista.h
148 lines (122 loc) · 3.8 KB
/
lista.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#ifndef __LISTA_H__
#define __LISTA_H__
#include <stdbool.h>
#include <stddef.h>
typedef int (*lista_comparador)(void*, void*);
typedef void (*lista_liberar_elemento)(void*);
typedef struct lista lista_t;
typedef struct lista_iterador lista_iterador_t;
/*
* Crea la lista reservando la memoria necesaria.
* Devuelve un puntero a la lista creada o NULL en caso de error.
*/
lista_t* lista_crear(lista_comparador,lista_liberar_elemento);
/*
* Inserta un elemento al final de la lista.
* Devuelve 0 si pudo insertar o -1 si no pudo.
*/
int lista_insertar(lista_t* lista, void* elemento);
/*
* Inserta un elemento en la posicion indicada, donde 0 es insertar
* como primer elemento y 1 es insertar luego del primer elemento.
* En caso de no existir la posicion indicada, lo inserta al final.
* Devuelve 0 si pudo insertar o -1 si no pudo.
*/
int lista_insertar_en_posicion(lista_t* lista, void* elemento, size_t posicion);
/*
* Quita de la lista el elemento que se encuentra en la ultima posición.
* Devuelve 0 si pudo eliminar o -1 si no pudo.
*/
int lista_borrar(lista_t* lista);
/*
* Quita de la lista el elemento que se encuentra en la posición
* indicada, donde 0 es el primer elemento.
* En caso de no existir esa posición se intentará borrar el último
* elemento.
* Devuelve 0 si pudo eliminar o -1 si no pudo.
*/
int lista_borrar_de_posicion(lista_t* lista, size_t posicion);
/*
* Devuelve el elemento en la posicion indicada, donde 0 es el primer
* elemento.
*
* Si no existe dicha posicion devuelve NULL.
*/
void* lista_elemento_en_posicion(lista_t* lista, size_t posicion);
/*
* Devuelve el último elemento de la lista o NULL si la lista se
* encuentra vacía.
*/
void* lista_ultimo(lista_t* lista);
/*
* Devuelve true si la lista está vacía o false en caso contrario.
*/
bool lista_vacia(lista_t* lista);
/*
* Devuelve la cantidad de elementos almacenados en la lista.
*/
size_t lista_elementos(lista_t* lista);
/*
* Apila un elemento.
* Devuelve 0 si pudo o -1 en caso contrario.
*/
int lista_apilar(lista_t* lista, void* elemento);
/*
* Desapila un elemento.
* Devuelve 0 si pudo desapilar o -1 si no pudo.
*/
int lista_desapilar(lista_t* lista);
/*
* Devuelve el elemento en el tope de la pila o NULL
* en caso de estar vacía.
*/
void* lista_tope(lista_t* lista);
/*
* Encola un elemento.
* Devuelve 0 si pudo encolar o -1 si no pudo.
*/
int lista_encolar(lista_t* lista, void* elemento);
/*
* Desencola un elemento.
* Devuelve 0 si pudo desencolar o -1 si no pudo.
*/
int lista_desencolar(lista_t* lista);
/*
* Devuelve el primer elemento de la cola o NULL en caso de estar
* vacía.
*/
void* lista_primero(lista_t* lista);
/*
* Libera la memoria reservada por la lista.
*/
void lista_destruir(lista_t* lista);
/*
* Crea un iterador para una lista. El iterador creado es válido desde
* el momento de su creación hasta que no haya mas elementos por
* recorrer o se modifique la lista iterada (agregando o quitando
* elementos de la lista).
*
* Devuelve el puntero al iterador creado o NULL en caso de error.
*/
lista_iterador_t* lista_iterador_crear(lista_t* lista);
/*
* Devuelve true si hay mas elementos sobre los cuales iterar o false
* si no hay mas.
*/
bool lista_iterador_tiene_siguiente(lista_iterador_t* iterador);
/*
* Devuelve el próximo elemento disponible en la iteración.
* En caso de error devuelve NULL.
*/
void* lista_iterador_siguiente(lista_iterador_t* iterador);
/*
* Libera la memoria reservada por el iterador.
*/
void lista_iterador_destruir(lista_iterador_t* iterador);
/*
* Iterador interno. Recorre la lista e invoca la funcion con cada
* elemento de la misma.
*/
void lista_con_cada_elemento(lista_t* lista, void (*funcion)(void*, void*), void *contexto);
int lista_buscar(lista_t* lista,void* elemento);
#endif /* __LISTA_H__ */