SlideShare uma empresa Scribd logo
1 de 7
Baixar para ler offline
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <locale.h>
4
5 struct Node
6 {
7 int num;
8 struct Node *prox;
9 };
10 typedef struct Node node;
11
12 int tam, x;
13
14 void inicia(node *LISTA);
15 int menu(void);
16 void opcao(node *LISTA, int op);
17 node *criaNo();
18 void insereFim(node *LISTA);
19 void insereInicio(node *LISTA);
20 void exibe(node *LISTA);
21 void libera(node *LISTA);
22 void insere (node *LISTA);
23 node *retiraInicio(node *LISTA);
24 node *retiraFim(node *LISTA);
25 node *retira(node *LISTA);
26 node *buscar(node *LISTA);
27 void ordemCrescente(node *LISTA);
28 void atualizar(node *LISTA);
29 void pesquisaMaior(node *LISTA);
30 void pesquisaMenor(node *LISTA);
31 void imprimir(node *LISTA);
32
33 int main(void)
34 {
35 setlocale(LC_ALL, "Portuguese");
36 node *LISTA = (node *) malloc(sizeof(node));
37 if(!LISTA)
38 {
39 printf("nSem memória disponível!n");
40 exit(1);
41 }
42 else
43 {
44 inicia(LISTA);
45 int opt;
46
47 do
48 {
49 opt=menu();
50 opcao(LISTA,opt);
51 }
52 while(opt);
53
54 free(LISTA);
55 return 0;
56 }
57 }
58
59 void inicia(node *LISTA)
60 {
61 LISTA->num = 0;
62 LISTA->prox = NULL;
63 tam=0;
64 }
65
66 int menu(void)
67 {
68 int opt;
69
70 printf("nn============================================================n");
71 printf(" Escolha a opcaon");
72 printf(" 0. Sairn");
73 printf(" 1. Zerar listan");
74 printf(" 2. Imprimir listan");
75 printf(" 3. Inserir no inicion");
76 printf(" 4. Inserir no finaln");
77 printf(" 5. Escolher onde inserirn");
78 printf(" 6. Remover do inicion");
79 printf(" 7. Remover do fimn");
80 printf(" 8. Escolher de onde tirarn");
81 printf(" 9. Buscarn");
82 printf("10. Inserir em Ordem Crescenten");
83 printf("11. Atualizar um elemento da lista.n");
84 printf("12. Encontrar o MAIOR elemento da lista.n");
85 printf("13. Encontrar o MENOR elemento da lista.n");
86 printf("14. Quantidade de NÓS da lista.n");
87 printf("Opcao: ");
88 scanf("%d", &opt);
89
90 return opt;
91 }
92
93 void opcao(node *LISTA, int op)
94 {
95 node *tmp;
96 switch(op)
97 {
98 case 0:
99 libera(LISTA);
100 break;
101
102 case 1:
103 libera(LISTA);
104 inicia(LISTA);
105 break;
106
107 case 2:
108 if(vazia(LISTA))
109 printf("nA lista está vazia! ");
110 else
111 //exibe(LISTA);
112 imprimir(LISTA);
113 break;
114
115 case 3:
116 insereInicio(LISTA);
117 break;
118
119 case 4:
120 insereFim(LISTA);
121 break;
122
123 case 5:
124 insere(LISTA);
125 break;
126
127 case 6:
128 if(vazia(LISTA))
129 printf("nA lista está vazia! ");
130 else
131 {
132 tmp= retiraInicio(LISTA);
133 printf("nRetirado: %3d.n", tmp->num);
134 }
135
136 break;
137
138 case 7:
139 if(vazia(LISTA))
140 printf("nA lista está vazia! ");
141 else
142 {
143 tmp= retiraFim(LISTA);
144 printf("nRetirado: %3d. n", tmp->num);
145 }
146 break;
147
148 case 8:
149 if(vazia(LISTA))
150 printf("nA lista está vazia! ");
151 else
152 {
153 tmp= retira(LISTA);
154 printf("nRetirado: %3d. n", tmp->num);
155 }
156
157 break;
158
159 case 9:
160 if(vazia(LISTA))
161 printf("nA lista está vazia! ");
162 else
163 {
164 tmp = buscar(LISTA);
165 if(tmp == NULL)
166 {
167 printf("nO valor NÃO foi encontrado. ");
168 }
169 else
170 {
171 printf("nO valor foi encontrado: %d", tmp->num);
172 }
173 }
174 break;
175
176 case 10:
177 if(vazia(LISTA))
178 printf("nA lista está vazia! ");
179 else
180 ordemCrescente(LISTA);
181 break;
182
183 case 11:
184 if(vazia(LISTA))
185 printf("nA lista está vazia! ");
186 else
187 atualizar(LISTA);
188 break;
189
190 case 12:
191 if(vazia(LISTA))
192 printf("nA lista está vazia! ");
193 else
194 pesquisaMaior(LISTA);
195 break;
196
197 case 13:
198 if(vazia(LISTA))
199 printf("nA lista está vazia! ");
200 else
201 pesquisaMenor(LISTA);
202 break;
203
204 case 14:
205 if(vazia(LISTA))
206 printf("nA lista está vazia! ");
207 else
208 printf("nA quantidade total de NÓS desta lista é: %d", tam);
209 break;
210
211 default:
212 printf("nComando inválido! n");
213 }
214 }
215
216 int vazia(node *LISTA)
217 {
218 if(LISTA->prox == NULL)
219 return 1;
220 else
221 return 0;
222 }
223
224 node *aloca()
225 {
226 node *novo=(node *) malloc(sizeof(node));
227 if(!novo)
228 {
229 printf("nSem memória disponível! n");
230 exit(1);
231 }
232 else
233 {
234 printf("nNovo elemento: ");
235 scanf("%d", &novo->num);
236 return novo;
237 }
238 }
239
240
241 void insereFim(node *LISTA)
242 {
243 node *novo = aloca();
244 novo->prox = NULL;
245
246 if(vazia(LISTA))
247 LISTA->prox=novo;
248 else
249 {
250 node *tmp = LISTA->prox;
251
252 while(tmp->prox != NULL)
253 tmp = tmp->prox;
254
255 tmp->prox = novo;
256 }
257 tam++;
258 }
259
260 void insereInicio(node *LISTA)
261 {
262 node *novo=aloca();
263 node *aux = LISTA->prox;
264 LISTA->prox = novo;
265 novo->prox = aux;
266 tam++;
267 }
268
269 void imprimir(node *LISTA)
270 {
271 if(vazia(LISTA))
272 {
273 printf("n Lista vazia! n");
274 return ;
275 }
276 node *tmp;
277 tmp = LISTA->prox;
278 printf("nLista:");
279 while( tmp != NULL)
280 {
281 printf("%5d", tmp->num);
282 tmp = tmp->prox;
283 }
284 printf("nn");
285 }
286
287 void exibe(node *LISTA)
288 {
289 system("clear");
290 if(vazia(LISTA))
291 {
292 printf("n Lista vazia! n");
293 return ;
294 }
295 node *tmp;
296 tmp = LISTA->prox;
297 printf("nLista:");
298 while( tmp != NULL)
299 {
300 printf("%5d", tmp->num);
301 tmp = tmp->prox;
302 }
303 printf("n ");
304 int count;
305 for(count=0 ; count < tam ; count++)
306 printf(" ^ ");
307 printf("nOrdem:");
308 for(count=0 ; count < tam ; count++)
309 printf("%5d", count+1);
310 printf("nn");
311 }
312
313 void libera(node *LISTA)
314 {
315 if(!vazia(LISTA))
316 {
317 node *proxNode,
318 *atual;
319
320 atual = LISTA->prox;
321 while(atual != NULL)
322 {
323 proxNode = atual->prox;
324 free(atual);
325 atual = proxNode;
326 }
327 }
328 }
329
330 void insere(node *LISTA)
331 {
332 int pos, count;
333 printf("nEm que posicao, [de 1 ate %d] voce deseja inserir: ", tam);
334 scanf("%d", &pos);
335
336 if(pos>0 && pos <= tam)
337 {
338 if(pos==1)
339 insereInicio(LISTA);
340 else
341 {
342 node *atual = LISTA->prox,
343 *anterior=LISTA;
344 node *novo=aloca();
345
346 for(count=1 ; count < pos ; count++)
347 {
348 anterior=atual;
349 atual=atual->prox;
350 }
351 anterior->prox=novo;
352 novo->prox = atual;
353 tam++;
354 }
355
356 }
357 else
358 printf("nElemento inválido! n");
359 }
360
361 node *retiraInicio(node *LISTA)
362 {
363 if(LISTA->prox == NULL)
364 {
365 printf("nLista vazia! n");
366 return NULL;
367 }
368 else
369 {
370 node *aux = LISTA->prox;
371 LISTA->prox = aux->prox;
372 tam--;
373 return aux;
374 }
375
376 }
377
378 node *retiraFim(node *LISTA)
379 {
380 if(LISTA->prox == NULL)
381 {
382 printf("nLista vazia! n");
383 return NULL;
384 }
385 else
386 {
387 node *ultimo = LISTA->prox, *penultimo = LISTA;
388 while(ultimo->prox != NULL)
389 {
390 penultimo = ultimo;
391 ultimo = ultimo->prox;
392 }
393 penultimo->prox = NULL;
394 tam--;
395 return ultimo;
396 }
397 }
398
399 node *retira(node *LISTA)
400 {
401 int opt,count;
402 printf("nQue posicao, [de 1 ate %d] voce deseja retirar: ", tam);
403 scanf("%d", &opt);
404
405 if(opt>0 && opt <= tam)
406 {
407 if(opt==1)
408 return retiraInicio(LISTA);
409 else
410 {
411 node *atual = LISTA->prox,
412 *anterior = LISTA;
413
414 for(count=1 ; count < opt ; count++)
415 {
416 anterior = atual;
417 atual = atual->prox;
418 }
419
420 anterior->prox = atual->prox;
421 tam--;
422 return atual;
423 }
424
425 }
426 else
427 {
428 printf("n Elemento inválido! n");
429 return NULL;
430 }
431 }
432
433 node *buscar(node *LISTA)
434 {
435 printf("nDigite um valor a ser procurado: ");
436 scanf("%d", &x);
437 node *aux = LISTA;
438 while((aux != NULL) && (aux->num != x))
439 {
440 aux = aux->prox;
441 }
442 return aux;
443 }
444
445 void ordemCrescente(node *LISTA)
446 {
447 node *aux1 = LISTA;
448 node *aux2 = LISTA;
449 node *novo = aloca();
450 novo->prox = NULL;
451 int i=0;
452
453 while((aux2!=NULL) && (aux2->num < novo->num))
454 {
455 printf("n ENTREI NO WHILE %d. n", i++);
456 aux1 = aux2;
457 aux2 = aux2->prox;
458 }
459
460 if(aux1 == aux2)
461 {
462 printf("n ENTREI NO AUX1 = AUX2 n");
463 novo->prox = aux1;
464 LISTA = novo;
465 }
466 else
467 {
468 printf("n ENTREI NO AUX1 != AUX2 n");
469 novo->prox = aux1->prox;
470 aux1->prox = novo;
471 }
472
473 }
474
475 void atualizar(node *LISTA)
476 {
477 node *aux = buscar(LISTA);
478 if(aux == NULL)
479 {
480 printf("n O valor NÃO foi encontrado. n");
481 }
482 else
483 {
484 printf("n O valor foi encontrado: %d n", aux->num);
485 printf("n Digite o novo valor: ");
486 scanf("%d", &aux->num);
487 printf("n O valor foi atualizado com sucesso! n");
488 }
489 }
490
491
492 void pesquisaMaior(node *LISTA)
493 {
494 int maior = LISTA->num;
495 while(LISTA != NULL)
496 {
497 if(LISTA->num > maior)
498 maior = LISTA->num;
499 LISTA = LISTA->prox;
500 }
501 printf("nO maior elemento da lista é: %d. n", maior);
502 }
503
504 void pesquisaMenor(node *LISTA)
505 {
506 LISTA = LISTA->prox;
507 int menor = LISTA->num;
508 while(LISTA != NULL)
509 {
510 if(LISTA->num < menor)
511 menor = LISTA->num;
512 LISTA = LISTA->prox;
513 }
514 printf("nO menor elemento da lista é: %d. n", menor);
515 }
516

Mais conteúdo relacionado

Mais procurados

Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
Adriano Teixeira de Souza
 

Mais procurados (20)

Lista simplesmente encadeada dinamica
Lista simplesmente encadeada dinamicaLista simplesmente encadeada dinamica
Lista simplesmente encadeada dinamica
 
Lista ligada simples
Lista ligada simplesLista ligada simples
Lista ligada simples
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
 
Arvore binária
Arvore bináriaArvore binária
Arvore binária
 
Pilha dinâmica
Pilha dinâmicaPilha dinâmica
Pilha dinâmica
 
Lista Encadeada: Inserção no Início
Lista Encadeada: Inserção no InícioLista Encadeada: Inserção no Início
Lista Encadeada: Inserção no Início
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdade
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
 
Fila circular dinamica
Fila circular dinamicaFila circular dinamica
Fila circular dinamica
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Lista duplamente encadeada dinâmica circular
Lista duplamente encadeada dinâmica circularLista duplamente encadeada dinâmica circular
Lista duplamente encadeada dinâmica circular
 
Lista simplesmente encadeada dinâmica circular
Lista simplesmente encadeada dinâmica circularLista simplesmente encadeada dinâmica circular
Lista simplesmente encadeada dinâmica circular
 
Hash Endereçamento Quadrático Operações
Hash Endereçamento Quadrático OperaçõesHash Endereçamento Quadrático Operações
Hash Endereçamento Quadrático Operações
 
Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
Pilhas encadeadas
Pilhas encadeadasPilhas encadeadas
Pilhas encadeadas
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
TDC2016POA | Trilha Java - Atualizando para Java 8 na prática!
TDC2016POA | Trilha Java - Atualizando para Java 8 na prática!	TDC2016POA | Trilha Java - Atualizando para Java 8 na prática!
TDC2016POA | Trilha Java - Atualizando para Java 8 na prática!
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Java script para adultos
Java script para adultosJava script para adultos
Java script para adultos
 

Mais de Elaine Cecília Gatto

Mais de Elaine Cecília Gatto (20)

A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaA influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etaria
 
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaInteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à Medicina
 
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
 
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCApresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPC
 
entrevista r7.pdf
entrevista r7.pdfentrevista r7.pdf
entrevista r7.pdf
 
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxComo a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptx
 
Empoderamento Feminino
Empoderamento FemininoEmpoderamento Feminino
Empoderamento Feminino
 
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
 
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarCommunity Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCar
 
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesClassificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de Correlações
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationCommunity Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label Classification
 
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfMulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
 
Curtinhas de sábado.pdf
Curtinhas de sábado.pdfCurtinhas de sábado.pdf
Curtinhas de sábado.pdf
 
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamento
 
Cheat sheet Mips 32 bits
Cheat sheet Mips 32 bitsCheat sheet Mips 32 bits
Cheat sheet Mips 32 bits
 
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsResumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcação
 

Último

ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
azulassessoria9
 

Último (20)

O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
 
Quiz | Dia da Europa 2024 (comemoração)
Quiz | Dia da Europa 2024  (comemoração)Quiz | Dia da Europa 2024  (comemoração)
Quiz | Dia da Europa 2024 (comemoração)
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
Missa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfMissa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdf
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introd
 
Slides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptx
Slides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptxSlides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptx
Slides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptx
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 

Lista simplesmente encadeada

  • 1. 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <locale.h> 4 5 struct Node 6 { 7 int num; 8 struct Node *prox; 9 }; 10 typedef struct Node node; 11 12 int tam, x; 13 14 void inicia(node *LISTA); 15 int menu(void); 16 void opcao(node *LISTA, int op); 17 node *criaNo(); 18 void insereFim(node *LISTA); 19 void insereInicio(node *LISTA); 20 void exibe(node *LISTA); 21 void libera(node *LISTA); 22 void insere (node *LISTA); 23 node *retiraInicio(node *LISTA); 24 node *retiraFim(node *LISTA); 25 node *retira(node *LISTA); 26 node *buscar(node *LISTA); 27 void ordemCrescente(node *LISTA); 28 void atualizar(node *LISTA); 29 void pesquisaMaior(node *LISTA); 30 void pesquisaMenor(node *LISTA); 31 void imprimir(node *LISTA); 32 33 int main(void) 34 { 35 setlocale(LC_ALL, "Portuguese"); 36 node *LISTA = (node *) malloc(sizeof(node)); 37 if(!LISTA) 38 { 39 printf("nSem memória disponível!n"); 40 exit(1); 41 } 42 else 43 { 44 inicia(LISTA); 45 int opt; 46 47 do 48 { 49 opt=menu(); 50 opcao(LISTA,opt); 51 } 52 while(opt); 53 54 free(LISTA); 55 return 0; 56 } 57 } 58 59 void inicia(node *LISTA) 60 { 61 LISTA->num = 0; 62 LISTA->prox = NULL; 63 tam=0; 64 } 65 66 int menu(void) 67 { 68 int opt; 69 70 printf("nn============================================================n"); 71 printf(" Escolha a opcaon"); 72 printf(" 0. Sairn"); 73 printf(" 1. Zerar listan"); 74 printf(" 2. Imprimir listan"); 75 printf(" 3. Inserir no inicion"); 76 printf(" 4. Inserir no finaln"); 77 printf(" 5. Escolher onde inserirn"); 78 printf(" 6. Remover do inicion"); 79 printf(" 7. Remover do fimn"); 80 printf(" 8. Escolher de onde tirarn"); 81 printf(" 9. Buscarn"); 82 printf("10. Inserir em Ordem Crescenten"); 83 printf("11. Atualizar um elemento da lista.n"); 84 printf("12. Encontrar o MAIOR elemento da lista.n");
  • 2. 85 printf("13. Encontrar o MENOR elemento da lista.n"); 86 printf("14. Quantidade de NÓS da lista.n"); 87 printf("Opcao: "); 88 scanf("%d", &opt); 89 90 return opt; 91 } 92 93 void opcao(node *LISTA, int op) 94 { 95 node *tmp; 96 switch(op) 97 { 98 case 0: 99 libera(LISTA); 100 break; 101 102 case 1: 103 libera(LISTA); 104 inicia(LISTA); 105 break; 106 107 case 2: 108 if(vazia(LISTA)) 109 printf("nA lista está vazia! "); 110 else 111 //exibe(LISTA); 112 imprimir(LISTA); 113 break; 114 115 case 3: 116 insereInicio(LISTA); 117 break; 118 119 case 4: 120 insereFim(LISTA); 121 break; 122 123 case 5: 124 insere(LISTA); 125 break; 126 127 case 6: 128 if(vazia(LISTA)) 129 printf("nA lista está vazia! "); 130 else 131 { 132 tmp= retiraInicio(LISTA); 133 printf("nRetirado: %3d.n", tmp->num); 134 } 135 136 break; 137 138 case 7: 139 if(vazia(LISTA)) 140 printf("nA lista está vazia! "); 141 else 142 { 143 tmp= retiraFim(LISTA); 144 printf("nRetirado: %3d. n", tmp->num); 145 } 146 break; 147 148 case 8: 149 if(vazia(LISTA)) 150 printf("nA lista está vazia! "); 151 else 152 { 153 tmp= retira(LISTA); 154 printf("nRetirado: %3d. n", tmp->num); 155 } 156 157 break; 158 159 case 9: 160 if(vazia(LISTA)) 161 printf("nA lista está vazia! "); 162 else 163 { 164 tmp = buscar(LISTA); 165 if(tmp == NULL) 166 { 167 printf("nO valor NÃO foi encontrado. "); 168 }
  • 3. 169 else 170 { 171 printf("nO valor foi encontrado: %d", tmp->num); 172 } 173 } 174 break; 175 176 case 10: 177 if(vazia(LISTA)) 178 printf("nA lista está vazia! "); 179 else 180 ordemCrescente(LISTA); 181 break; 182 183 case 11: 184 if(vazia(LISTA)) 185 printf("nA lista está vazia! "); 186 else 187 atualizar(LISTA); 188 break; 189 190 case 12: 191 if(vazia(LISTA)) 192 printf("nA lista está vazia! "); 193 else 194 pesquisaMaior(LISTA); 195 break; 196 197 case 13: 198 if(vazia(LISTA)) 199 printf("nA lista está vazia! "); 200 else 201 pesquisaMenor(LISTA); 202 break; 203 204 case 14: 205 if(vazia(LISTA)) 206 printf("nA lista está vazia! "); 207 else 208 printf("nA quantidade total de NÓS desta lista é: %d", tam); 209 break; 210 211 default: 212 printf("nComando inválido! n"); 213 } 214 } 215 216 int vazia(node *LISTA) 217 { 218 if(LISTA->prox == NULL) 219 return 1; 220 else 221 return 0; 222 } 223 224 node *aloca() 225 { 226 node *novo=(node *) malloc(sizeof(node)); 227 if(!novo) 228 { 229 printf("nSem memória disponível! n"); 230 exit(1); 231 } 232 else 233 { 234 printf("nNovo elemento: "); 235 scanf("%d", &novo->num); 236 return novo; 237 } 238 } 239 240 241 void insereFim(node *LISTA) 242 { 243 node *novo = aloca(); 244 novo->prox = NULL; 245 246 if(vazia(LISTA)) 247 LISTA->prox=novo; 248 else 249 { 250 node *tmp = LISTA->prox; 251 252 while(tmp->prox != NULL)
  • 4. 253 tmp = tmp->prox; 254 255 tmp->prox = novo; 256 } 257 tam++; 258 } 259 260 void insereInicio(node *LISTA) 261 { 262 node *novo=aloca(); 263 node *aux = LISTA->prox; 264 LISTA->prox = novo; 265 novo->prox = aux; 266 tam++; 267 } 268 269 void imprimir(node *LISTA) 270 { 271 if(vazia(LISTA)) 272 { 273 printf("n Lista vazia! n"); 274 return ; 275 } 276 node *tmp; 277 tmp = LISTA->prox; 278 printf("nLista:"); 279 while( tmp != NULL) 280 { 281 printf("%5d", tmp->num); 282 tmp = tmp->prox; 283 } 284 printf("nn"); 285 } 286 287 void exibe(node *LISTA) 288 { 289 system("clear"); 290 if(vazia(LISTA)) 291 { 292 printf("n Lista vazia! n"); 293 return ; 294 } 295 node *tmp; 296 tmp = LISTA->prox; 297 printf("nLista:"); 298 while( tmp != NULL) 299 { 300 printf("%5d", tmp->num); 301 tmp = tmp->prox; 302 } 303 printf("n "); 304 int count; 305 for(count=0 ; count < tam ; count++) 306 printf(" ^ "); 307 printf("nOrdem:"); 308 for(count=0 ; count < tam ; count++) 309 printf("%5d", count+1); 310 printf("nn"); 311 } 312 313 void libera(node *LISTA) 314 { 315 if(!vazia(LISTA)) 316 { 317 node *proxNode, 318 *atual; 319 320 atual = LISTA->prox; 321 while(atual != NULL) 322 { 323 proxNode = atual->prox; 324 free(atual); 325 atual = proxNode; 326 } 327 } 328 } 329 330 void insere(node *LISTA) 331 { 332 int pos, count; 333 printf("nEm que posicao, [de 1 ate %d] voce deseja inserir: ", tam); 334 scanf("%d", &pos); 335 336 if(pos>0 && pos <= tam)
  • 5. 337 { 338 if(pos==1) 339 insereInicio(LISTA); 340 else 341 { 342 node *atual = LISTA->prox, 343 *anterior=LISTA; 344 node *novo=aloca(); 345 346 for(count=1 ; count < pos ; count++) 347 { 348 anterior=atual; 349 atual=atual->prox; 350 } 351 anterior->prox=novo; 352 novo->prox = atual; 353 tam++; 354 } 355 356 } 357 else 358 printf("nElemento inválido! n"); 359 } 360 361 node *retiraInicio(node *LISTA) 362 { 363 if(LISTA->prox == NULL) 364 { 365 printf("nLista vazia! n"); 366 return NULL; 367 } 368 else 369 { 370 node *aux = LISTA->prox; 371 LISTA->prox = aux->prox; 372 tam--; 373 return aux; 374 } 375 376 } 377 378 node *retiraFim(node *LISTA) 379 { 380 if(LISTA->prox == NULL) 381 { 382 printf("nLista vazia! n"); 383 return NULL; 384 } 385 else 386 { 387 node *ultimo = LISTA->prox, *penultimo = LISTA; 388 while(ultimo->prox != NULL) 389 { 390 penultimo = ultimo; 391 ultimo = ultimo->prox; 392 } 393 penultimo->prox = NULL; 394 tam--; 395 return ultimo; 396 } 397 } 398 399 node *retira(node *LISTA) 400 { 401 int opt,count; 402 printf("nQue posicao, [de 1 ate %d] voce deseja retirar: ", tam); 403 scanf("%d", &opt); 404 405 if(opt>0 && opt <= tam) 406 { 407 if(opt==1) 408 return retiraInicio(LISTA); 409 else 410 { 411 node *atual = LISTA->prox, 412 *anterior = LISTA; 413 414 for(count=1 ; count < opt ; count++) 415 { 416 anterior = atual; 417 atual = atual->prox; 418 } 419 420 anterior->prox = atual->prox;
  • 6. 421 tam--; 422 return atual; 423 } 424 425 } 426 else 427 { 428 printf("n Elemento inválido! n"); 429 return NULL; 430 } 431 } 432 433 node *buscar(node *LISTA) 434 { 435 printf("nDigite um valor a ser procurado: "); 436 scanf("%d", &x); 437 node *aux = LISTA; 438 while((aux != NULL) && (aux->num != x)) 439 { 440 aux = aux->prox; 441 } 442 return aux; 443 } 444 445 void ordemCrescente(node *LISTA) 446 { 447 node *aux1 = LISTA; 448 node *aux2 = LISTA; 449 node *novo = aloca(); 450 novo->prox = NULL; 451 int i=0; 452 453 while((aux2!=NULL) && (aux2->num < novo->num)) 454 { 455 printf("n ENTREI NO WHILE %d. n", i++); 456 aux1 = aux2; 457 aux2 = aux2->prox; 458 } 459 460 if(aux1 == aux2) 461 { 462 printf("n ENTREI NO AUX1 = AUX2 n"); 463 novo->prox = aux1; 464 LISTA = novo; 465 } 466 else 467 { 468 printf("n ENTREI NO AUX1 != AUX2 n"); 469 novo->prox = aux1->prox; 470 aux1->prox = novo; 471 } 472 473 } 474 475 void atualizar(node *LISTA) 476 { 477 node *aux = buscar(LISTA); 478 if(aux == NULL) 479 { 480 printf("n O valor NÃO foi encontrado. n"); 481 } 482 else 483 { 484 printf("n O valor foi encontrado: %d n", aux->num); 485 printf("n Digite o novo valor: "); 486 scanf("%d", &aux->num); 487 printf("n O valor foi atualizado com sucesso! n"); 488 } 489 } 490 491 492 void pesquisaMaior(node *LISTA) 493 { 494 int maior = LISTA->num; 495 while(LISTA != NULL) 496 { 497 if(LISTA->num > maior) 498 maior = LISTA->num; 499 LISTA = LISTA->prox; 500 } 501 printf("nO maior elemento da lista é: %d. n", maior); 502 } 503 504 void pesquisaMenor(node *LISTA)
  • 7. 505 { 506 LISTA = LISTA->prox; 507 int menor = LISTA->num; 508 while(LISTA != NULL) 509 { 510 if(LISTA->num < menor) 511 menor = LISTA->num; 512 LISTA = LISTA->prox; 513 } 514 printf("nO menor elemento da lista é: %d. n", menor); 515 } 516