-
Notifications
You must be signed in to change notification settings - Fork 0
/
mod_lista_ligada.h
116 lines (84 loc) · 3.51 KB
/
mod_lista_ligada.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
/**
* @file mod_lista_ligada.h
* @brief Listas ligadas
* @details Define listas ligadas genéricas e as suas funções
* */
#ifndef MOD_LISTA_LIGADA_H_INCLUDED
#define MOD_LISTA_LIGADA_H_INCLUDED
/**
@brief Lista Ligada
@details Lista ligada que guarda um apontador para dados externos e um apontador para o elemento seguinte
@param extdata Apontador para dados externos
@param prox Apontador para elemento seguinte da lista
*/
typedef struct linkedList {
void *extdata; // Apontador para o elemento da lista
struct linkedList *prox; // Próximo elemento da lista
} *LinkedListPTR; // Apontador para a lista ligada
/**
@brief Estrutura de controlo de uma Lista Ligada
@details Estrutura que permite controlar uma lista ligada
@param elems Apontador para uma lista ligada
@param nelems Número de elementos contidos na lista ligada
@param func_compare Função de comparação de elementos da lista ligada
*/
typedef struct MainList {
LinkedListPTR elems; // Apontador para uma lista ligada
int nelems; // Numero de elementos da lista ligada
int (*func_compare)(void*,void*); // Função de comparação de elementos da lista ligada
} *MainListPTR; // Apontador para a estrutura de controlo
/**
@brief Cria a estrutura de controlo de uma lista ligada
@param func_compare Função de comparação
@return Apontador para a estrutura de controlo criada
*/
MainListPTR criaListaLigada(int(*func_compare)(void*,void*));
/**
@brief Insere um elemento na cabeça da lista
@param lista Estrutura de controlo da lista onde se irá inserir o elemento
@param externdata Apontador para os dados a inserir na lista
@return 0 em caso de falha
@return 1 em caso de sucesso
*/
int insereListaInicio(MainListPTR lista, void *externdata);
/**
@brief Insere um elemento na lista ordenadamente de forma crescente
@param lista Estrutura de controlo da lista onde se irá inserir o elemento
@param externdata Apontador para os dados a inserir na lista
@return 0 em caso de falha
@return 1 em caso de sucesso
*/
int insereListaOrdenado (MainListPTR lista, void *externdata);
/**
@brief Liberta um elemento da memória
@param elem Apontador para um apontador para uma lista ligada
*/
void apagaElemento (LinkedListPTR *elem);
/**
@brief Apaga um elemento de uma lista ligada libertando-o da memória
@param lista Apontador para a estrutura de controlo da lista ligada
@param externdata Apontador para os dados que se querem remover da lista
@return 1 se houve remoção
@return 0 se não houve remoção
*/
int apagaElementoLista (MainListPTR lista, void* externdata);
/**
@brief Procura um dado elemento na lista ligada
@param lista Apontador para a estrutura de controlo da lista ligada
@param externdata Elemento a procurar na lista
@return Apontador para o elemento encontrado na lista ou NULL caso não seja encontrado
*/
LinkedListPTR procuraElementoLista (MainListPTR lista, void *externdata);
/**
@brief Apaga da memória uma lista ligada completa
@param lista Apontador para a estrutura de controlo da lista ligada
*/
void apagaListaAux(LinkedListPTR *lista);
/**
@brief Apaga da memória uma lista ligada e actualiza a estrutura de controlo em função disso
@param lista Apontador para a estrutura de controlo da lista ligada
*/
void apagaLista(MainListPTR lista);
void* cloneElementoHash(void *externdata);
void aplicaFuncLista(MainListPTR lista, void (*applyFunction)(void *, void *), void *parametros);
#endif /* MOD_LISTA_LIGADA_H_INCLUDED */