-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlista.c
155 lines (135 loc) · 4.35 KB
/
lista.c
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
149
150
151
152
153
154
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Mueble.h"
#include "Empleado.h"
#include "Local.h"
#include "lista.h"
/******** Funcion: inicializacion ********************
Descripcion: Inicia la lista.
Parametros: Lista *lista.
Retorno: Nada.
************************************************/
void incializacion(Lista *lista){
lista->inicio = NULL;
lista->fin= NULL;
lista->tamano = 0;
}
/******** Funcion: tamanolista ********************
Descripcion: Cuenta todos los elementos de la lista.
Parametros: Lista *lista.
Retorno: Retorna el largo de la lista.
************************************************/
int tamanolista(Lista *lista){
return lista->tamano;
}
/******** Funcion: contar ********************
Descripcion: Cuenta los elementos de la lista del tipo deseado.
Parametros: Lista *lista.
Retorno: Retorna la cantidad de elementos del mismo tipo.
************************************************/
int contar(Lista *lista, char tip){
int i, cont=0;
lista->actual = lista->inicio;
for (i = 0; i < tamanolista(lista); ++i){
if (lista->actual->tipo == tip){
cont+=1;
}
if (lista->actual->siguiente != NULL ){
lista->actual = lista->actual->siguiente;
}
}
return cont;
}
/******** Funcion: InsertarVacia ********************
Descripcion:Inserta un elemento cuando la lista esta vacia.
Parametros:Lista *lista, void *datot, char tip.
Retorno: retorna 0 al momento de haber agregado el elemento.
************************************************/
int InsertarVacia(Lista *lista, void *datot, char tip){
Elemento *nuevo_elemento;
if((nuevo_elemento = (Elemento *)malloc(sizeof(Elemento)))==NULL)
return -1;
nuevo_elemento->tipo = tip;
nuevo_elemento->dato= datot;
nuevo_elemento->siguiente = NULL;
lista->inicio = nuevo_elemento;
lista->fin = nuevo_elemento;
lista->actual = nuevo_elemento;
lista->tamano++;
return 0;
}
/******** Funcion:Insertar ********************
Descripcion: Inserta un elemento al final de la lista.
Parametros:Lista *lista , void *datot, char tip.
Retorno: retorna 0 al momento de haber agregado el elemento.
************************************************/
int Insertar(Lista *lista, void *datot, char tip){
if (lista->tamano == 0){
InsertarVacia(lista, datot, tip);
return 0;
}
else{
Elemento *nuevo_elemento;
if((nuevo_elemento = (Elemento *)malloc(sizeof(Elemento)))==NULL)
return -1;
lista->actual->siguiente = nuevo_elemento;
nuevo_elemento->siguiente = NULL;
nuevo_elemento->dato=datot;
nuevo_elemento->tipo=tip;
lista->fin = nuevo_elemento;
lista->actual = nuevo_elemento;
lista->tamano++;
return 0;
}
}
/******** Funcion: Eliminar ********************
Descripcion: Elimina el elemento de un tipo deseado mas proximo al inicio.
Parametros: Lista *lista, char tipo.
Retorno: Retorna 0 cuando se elimina el elemento.
************************************************/
int Eliminar(Lista *lista, char tipo){
int i;
if(lista->inicio->tipo == tipo){
Elemento *aux;
aux = lista->inicio->siguiente;
lista->actual = lista->inicio->siguiente;
lista->tamano--;
free(lista->inicio);
lista->inicio = aux;
return 1;
}
lista->actual= lista->inicio;
Elemento *anterior;
for(i=1; i < (tamanolista(lista));i++){
if( i==1) anterior = lista->inicio;
if(lista->actual->tipo == tipo){
Elemento *aux;
aux= lista->actual->siguiente;
lista->tamano--;
free(lista->actual);
anterior->siguiente = aux;
i=tamanolista(lista) +1;
return 1 ;
}
anterior= lista->actual;
lista->actual = lista->actual->siguiente;
}
return -1;
}
/******** Funcion: destruir ********************
Descripcion: Liberamos memoria utilizada por la lista.
Parametros: Lista *lista.
Retorno: Nada , solo aplica free.
************************************************/
void destruir(Lista * lista){
lista->actual= lista->inicio;
Elemento *aux;
int i;
for(i = 0; i < tamanolista(lista);i++){
if (i< tamanolista(lista)) aux= lista->actual->siguiente;
// free(lista->actual->dato);
free(lista->actual);
if (i< tamanolista(lista)) lista->actual=aux;
}
}