-
Notifications
You must be signed in to change notification settings - Fork 1
/
estrutura.c
96 lines (80 loc) · 1.9 KB
/
estrutura.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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct StructAluno {
int matricula;
char nome[20];
struct StructAluno *proximo;
};
typedef struct StructAluno Aluno;
Aluno *inicio = NULL;
void insereFim(int matricula, char nome[20]);
void insereInicio(int matricula, char nome[20]);
void insereOrdenada(int matricula, char nome[20]);
Aluno *aloca(int matricula, char nome[20]);
void removeFim();
void removeInicio();
void removeOrdenada(int matricula);
void desaloca(Aluno *removido);
void imprime();
int main(void) {
insereOrdenada(4, "Fidelix");
insereOrdenada(3, "Dilma");
insereOrdenada(2, "Aecio");
insereOrdenada(1, "Marina");
imprime();
return 0;
}
Aluno *aloca(int matricula, char nome[20]) {
Aluno *novo = malloc(sizeof(Aluno));
novo->matricula = matricula;
strcpy(novo->nome, nome);
novo->proximo = NULL;
return novo;
}
void insereFim(int matricula, char nome[20]) {
if(inicio != NULL) {
Aluno *percorre = inicio;
while(percorre->proximo != NULL) {
percorre = percorre->proximo;
}
percorre->proximo = aloca(matricula, nome);
} else {
inicio = aloca(matricula, nome);
}
}
void insereInicio(int matricula, char nome[20]) {
if(inicio != NULL) {
Aluno *novo = aloca(matricula, nome);
novo->proximo = inicio;
inicio = novo;
} else {
inicio = aloca(matricula, nome);
}
}
void insereOrdenada(int matricula, char nome[20]) {
if(inicio != NULL) {
Aluno *novo = aloca(matricula, nome);
Aluno *atual, *anterior;
atual = inicio;
while(atual != NULL && atual->matricula <= matricula) {
anterior = atual;
atual = atual->proximo;
}
novo->proximo = atual;
if (atual == inicio) {
inicio = novo;
} else {
anterior->proximo = novo;
}
} else {
inicio = aloca(matricula, nome);
}
}
void imprime() {
Aluno *percorre = inicio;
while(percorre != NULL) {
printf("(%d) %s\n", percorre->matricula, percorre->nome);
percorre = percorre->proximo;
}
}