Repository navigation
Expand file tree
/
Copy pathmainlistaalunos.cpp
More file actions
executable file
·168 lines (146 loc) · 4.37 KB
/
Copy pathmainlistaalunos.cpp
File metadata and controls
executable file
·168 lines (146 loc) · 4.37 KB
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <stdlib.h>
#include <stdio.h>
struct no {
int info;
struct no * prox;
};
void imprimir (struct no * lt );
void inserir_ordenado(int valor, struct no ** lt){
struct no * aux, * ant = NULL, * atual = *lt;
int achou = 0;
aux = (struct no *) malloc (sizeof(struct no));
if (aux != NULL){
aux -> info = valor;
aux -> prox = NULL;
while(atual != NULL && achou == 0){
if (valor < atual -> info)
achou = 1;
else{
ant = atual;
atual = atual-> prox;
}
}
aux -> prox = atual;
if(ant == NULL)
*lt = aux;
else
ant -> prox = aux;
}else
printf("\nMemoria insuficiente!");
}
void inserir_final(int elem, struct no ** lista){
struct no * aux, * temp;
aux = (struct no *)malloc(sizeof(struct no));
aux->info = elem;
aux->prox = NULL;
if (aux != NULL){
if ( *lista == NULL)
*lista = aux;
else{
temp = *lista;
while(temp->prox != NULL)
temp = temp->prox;
temp->prox = aux;
}
}else
printf("\nMemoria insuficiente.");
}
int remover_final(struct no ** lista){
struct no * temp = *lista;
int valorRemovido;
if (*lista != NULL){
while (temp->prox->prox != NULL)
temp = temp->prox;
valorRemovido = temp->info;
temp->prox = NULL;
//free(temp);
return valorRemovido;
}else
printf("\nA lista ja esta vazia.");
}
void inserir_inicio(int elem, struct no ** lista){
struct no * aux;
aux = (struct no *)malloc(sizeof(struct no));
if (aux != NULL){
aux->info = elem;
aux->prox = *lista;
*lista = aux;
}else
printf("\nMemoria insuficiente.");
}
int remover_inicio (struct no** lista){
struct no * temp = *lista;
int valorRemovido = 0;
if (*lista != NULL){
valorRemovido = temp->info;
temp->info = temp->prox->info;
temp->prox = temp->prox->prox;
//free(temp->prox->prox);
return valorRemovido;
}else
printf("\nA lista ja esta vazia.");
}
void imprimir (struct no * lt )
{
printf ("\nLista: ");
while (lt != NULL) {
printf ( "%d ", lt->info );
lt = lt->prox;
}
printf ("\n");
}
int main () {
struct no * lista = NULL; //inicializacao da lista: lista vazia
int opcao, elem;
do {
printf ("\n 1-inserir inicio 2-inserir final 6-inserir ordenado");
printf ("\n 3-remover inicio 4-remover final");
printf ("\n 5-imprimir lista 0-sair : ");
scanf ("%d", &opcao);
switch (opcao) {
case 1 : printf ( "\n***Inserindo no inicio da lista***");
printf ("\nValor a ser inserido: ");
scanf ("%d", &elem);
inserir_inicio (elem, &lista);
imprimir (lista);
break;
case 2 : printf ( "\n***Inserindo no final da lista***");
printf ("\nValor a ser inserido: ");
scanf ("%d", &elem);
inserir_final (elem, &lista);
imprimir (lista);
break;
case 3 : printf ( "\n***Removendo do inicio da lista***");
if (lista != NULL) {
elem = remover_inicio (&lista);
printf ("\nValor removido: %d ", elem);
}
else
printf ("\nLista Vazia!");
imprimir (lista);
break;
case 4 : printf ( "\n***Removendo do final da lista***");
if (lista != NULL) {
elem = remover_final (&lista);
printf ("\nValor removido: %d ", elem);
}
else
printf ("\nLista Vazia!");
imprimir (lista);
break;
case 5 : imprimir (lista);
break;
case 6 : printf ( "\n***Inserindo ordenadamente na lista***");
printf ("\nValor a ser inserido: ");
scanf ("%d", &elem);
inserir_ordenado (elem, &lista);
imprimir (lista);
break;
case 0 : printf ("\nSaindo....");
break;
default: printf ("\nOpcao Invalida!");
}
} while (opcao != 0);
system ("pause");
return (0);
}