-
Notifications
You must be signed in to change notification settings - Fork 0
/
TLSEv.cpp
90 lines (78 loc) · 1.45 KB
/
TLSEv.cpp
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
#include "TLSEv.h"
#include "TLSE.h"
#include "BTree.h"
TLSEv* TLSEv_inicializa(){
return NULL;
}
TLSEv* TLSEv_insere(TLSEv *l, int titulo,char* nome, TLSE* slan){
TLSEv *novo = (TLSEv *) malloc(sizeof(TLSEv));
if(!novo) return l;
novo->id = 0;
novo->titulos = titulo;
novo->nome = nome;
novo->slans = slan;
novo->prox = NULL;
if (!novo->nome) {
free(novo);
return l;
}
if (l == NULL || titulo > l->titulos) {
novo->prox = l;
return novo;
}
TLSEv* atual = l;
TLSEv* anterior = NULL;
while (atual != NULL && titulo < atual->titulos) {
anterior = atual;
atual = atual->prox;
}
if (anterior != NULL) {
anterior->prox = novo;
}
novo->prox = atual;
return l;
}
void TLSEv_libera(TLSEv *l){
if(l){
TLSEv *p = l, *q = NULL;
while(p){
q = p;
p = p->prox;
free(q);
}
}
}
void TLSEv_imprime(TLSEv *l){
if(!l) return;
TLSEv *p = l;
int i = 0;
while(p){
i++;
printf("--------------------\n");
printf("Nome: %s\n", p->nome);
printf("Titulos: %d\n", p->titulos);
printf("Slans:\n");
TLSE_imprime(p->slans);
p = p->prox;
}
printf("\n");
}
TLSEv* TLSEv_remove(TLSEv* l, int id){
if(l){
TLSEv * p = l, * ant = NULL;
while(p && p->id != id){
ant = p;
p = p->prox;
}
if(!p)return l;
if(ant == NULL){
l = l->prox;
free(p);
}
else{
ant->prox = p->prox;
free(p);
}
}
return l;
}