O que é arte. Definição de arte. História da arte.
Lista simplesmente encadeada dinâmica circular
1. 04/09/2016 20:10:07C:UserselainDocumentsAlgoritmosLista5. Lista Simplesmente Encadeada Dinâmica Circularlista_simplesmente_e
1: //ELAINE CECÍLIA GATTO
2: //02/09/2016
3:
4: program lista_simplesmente_encadeada_dinamica_circular;
5: uses wincrt, crt;
6:
7: //DECLARANDO UM NOVO TIPO
8: type
9: apont=^reg;
10: reg=record
11: nome: string;
12: proximo:apont;
13: end;
14:
15: Var
16: opcao, cont: integer;
17: inicio, pAux2, pAux1, novo:apont;
18: x : string;
19:
20: //INICIALIZANDO A LISTA
21: procedure inicializaLista();
22: begin
23: inicio:=nil;
24: pAux1:=nil;
25: pAux2:=nil;
26: end;
27:
28: //INSERIR NO INCIO DA LISTA
29: procedure insereInicio();
30: begin
31: writeln(' ===== INSERINDO NO INICIO DA LISTA ====== ');
32: write(' Digite um nome: ');
33: readln(x);
34: if(inicio = nil)then
35: begin
36: new(inicio); //aloca memória
37: inicio^.nome := x; //armazena o novo elemento
38: inicio^.proximo := inicio; //aponta para o inicio da lista
39: end
40: else
41: begin
42: new(pAux2); //alocando memória
43: pAux2:=inicio; //aux2 recebe a lista
44: while(pAux2^.proximo<>inicio)do
45: begin
46: pAux2 := pAux2^.proximo; //vai para o próximo elemento
47: end;
48: new(pAux1); //aloca memória
49: pAux1^.proximo := inicio; //próximo do aux1 aponta para inicio
50: pAux1^.nome := x; //armazena o novo elemento
51: inicio := pAux1; //inicio da lista aponta para aux1
52: pAux2^.proximo := pAux1; //próximo de aux2 aponta para aux1
53: end;
54: writeln(' Elemento inserido com sucesso! ');
55: end;
56:
57: //INSERIR NO FIM DA LISTA
58: procedure insereFim();
59: begin
60: writeln(' ===== INSERINDO NO FINAL DA LISTA ====== ');
61: write(' Digite um nome: ');
62: readln(x);
63: if(inicio = nil)then
64: begin
65: new(inicio); //aloca memória
66: inicio^.nome := x; //aloca o novo elemento
1/6
2. 04/09/2016 20:10:07C:UserselainDocumentsAlgoritmosLista5. Lista Simplesmente Encadeada Dinâmica Circularlista_simplesmente_e
67: inicio^.proximo := inicio; //aponta para o inicio da lista
68: end
69: else
70: begin
71: new(pAux2); //aloca memória
72: pAux2:=inicio; //aux aponta para o inicio da lista
73: while(pAux2^.proximo<>inicio)do
74: begin
75: pAux2 := pAux2^.proximo; //vai para o próximo elemento da lista
76: end;
77: new(pAux1); //aloca memória
78: //o próximo elemento de aux1 aponta para inicio da lista
79: pAux1^.proximo := inicio;
80: pAux1^.nome := x; //aloca o novo elemento
81: //o próximo elemento de aux2 aponta para aux1
82: pAux2^.proximo := pAux1;
83: end;
84: writeln(' Elemento inserido com sucesso! ');
85: end;
86:
87: //INSERIR EM ORDEM
88: procedure insereOrdem();
89: begin
90: writeln(' ===== INSERINDO EM ORDEM CRESCENTE ====== ');
91: write(' Digite um nome: ');
92: readln(x);
93:
94: new(pAux1); //aloca memória
95: new(pAux2); //aloca memória
96:
97: pAux1 := inicio; //aux1 aponta para o inicio da lista
98: pAux2 := inicio; //aux2 aponta para o inicio da lista
99:
100: while ( ( pAux2 <> nil ) and ( pAux2^.nome < x ) ) do
101: begin
102: pAux1 := pAux2; //aux1 aponta para aux2
103: pAux2 := pAux2^.proximo; //aux2 aponta para o próximo de aux
104: end;
105:
106: new(novo); //aloca memória
107: novo^.nome := x; //aloca o novo elemento da lista
108:
109: if (pAux1 = pAux2) then
110: begin
111: novo^.proximo := pAux1; //inserindo no inicio da lista
112: inicio := novo; //inicio aponta para o novo elemento
113: end
114: else
115: begin
116: novo^.proximo := pAux1^.proximo; //inserindo em ordem
117: //o próximo de aux1 aponta para o novo elemento
118: pAux1^.proximo:= novo;
119: end;
120: writeln(' Nome inserido com sucesso! ');
121: end;
122:
123: //REMOVER DO INCIO
124: function removeInicio():string;
125: begin
126: writeln(' ===== REMOVENDO DO INICIO DA LISTA ====== ');
127: //verifica se a lista está vazia
128: if(inicio = nil)then
129: begin
130: writeln(' A lista está vazia! ');
131: end
132: else
2/6
3. 04/09/2016 20:10:07C:UserselainDocumentsAlgoritmosLista5. Lista Simplesmente Encadeada Dinâmica Circularlista_simplesmente_e
133: begin
134: //remove se a lista tem apenas um elemento
135: if(inicio^.proximo = inicio)then
136: begin
137: removeInicio := inicio^.nome; //remove o elemento
138: dispose(inicio); //desaloca memória
139: inicio := nil; //inicio da lista aponta para NIL
140: end
141: else
142: begin
143: new(pAux2); //aloca memória
144: pAux2:=inicio; //aux2 aponta para o inicio da lista
145: while(pAux2^.proximo<>inicio)do
146: begin
147: //aux2 vai para o próximo elemento da lista
148: pAux2 := pAux2^.proximo;
149: end;
150: new(pAux1); //aloca memória
151: pAux1 := inicio; //aux1 aponta para o inicio da lista
152: removeInicio := pAux1^.nome; //remove o elemento da lista
153: inicio := inicio^.proximo; //inicio da lista aponta para o próximo
154: //o próximo de aux2 aponta para o inicio da lista
155: pAux2^.proximo := inicio;
156: dispose(pAux1); //libera memória
157: pAux1 := nil; //aux1 aponta para NIL
158: end;
159: end;
160: writeln(' Nome removido com sucesso! ');
161: end;
162:
163: //REMOVER DO FIM
164: function removeFim():string;
165: begin
166: writeln(' ===== REMOVENDO DO FIM DA LISTA ====== ');
167: //verifica se a lista está vazia
168: if(inicio = nil)then
169: begin
170: writeln(' A lista está vazia! ');
171: end
172: else
173: begin
174: //remove se a lista tem apenas um elemento
175: if(inicio^.proximo = inicio)then
176: begin
177: removeFim := inicio^.nome; //remove o elemento da lista
178: dispose(inicio); //desaloca memória
179: end
180: else
181: begin
182: new(pAux2); //aloca memória
183: new(pAux1); //aloca memória
184: pAux2 := inicio; //aux2 aponta para o inicio da lista
185: pAux1 := inicio; //aux2 aponta para o inicio da lista
186: while(pAux1^.proximo<>inicio)do
187: begin
188: pAux2 := pAux1; //aux2 aponta para aux1
189: pAux1 := pAux1^.proximo; //aux1 vai para o seu próximo elemento
190: end;
191: removeFim := pAux1^.nome; //remove o elemento
192: dispose(pAux1); //desaloca memória
193: //o próximo elemento de aux aponta para o inicio da lista
194: pAux2^.proximo := inicio;
195: end;
196: end;
197: writeln(' Nome removido com sucesso! ');
198: end;
3/6
4. 04/09/2016 20:10:07C:UserselainDocumentsAlgoritmosLista5. Lista Simplesmente Encadeada Dinâmica Circularlista_simplesmente_e
199:
200: //BUSCAR UM ELEMENTO
201: procedure buscar;
202: begin
203: writeln(' ===== BUSCANDO UM ELEMENTO ====== ');
204: write(' Digite o nome que deseja procurar: ');
205: readln(x);
206: pAux1 := inicio;
207: while((pAux1<>nil)and(pAux1^.nome<>x))do
208: begin
209: pAux1 := pAux1^.proximo;
210: end;
211: write(' Nome encontrado: ');
212: writeln(pAux1^.nome);
213: end;
214:
215: //ATUALIZAR UM ELEMENTO
216: procedure atualizar;
217: begin
218: writeln(' ===== ATUALIZANDO UM ELEMENTO ====== ');
219: write(' Digite o nome que deseja procurar: ');
220: readln(x);
221: pAux1 := inicio;
222: if(inicio = nil)then
223: begin
224: writeln('lista vazia');
225: end
226: else
227: begin
228: while((pAux1<>nil)and(pAux1^.nome<>x))do
229: begin
230: pAux1 := pAux1^.proximo;
231: end;
232: write(' Nome encontrado: ');
233: writeln(pAux1^.nome);
234: write(' Atualize o nome: ');
235: readln(pAux1^.nome);
236: writeln(' Nome atualizado com sucesso! ');
237: end;
238: end;
239:
240: //IMPRIMINDO A LISTA
241: procedure imprimir();
242: begin
243: if(inicio = nil)then
244: begin
245: writeln('lista vazia');
246: end
247: else
248: begin
249: pAux1:=inicio;
250: while(pAux1^.proximo <> inicio)do //imprimindo lista
251: begin
252: write(' Nome : ');
253: writeln(pAux1^.nome);
254: pAux1 := pAux1^.proximo;
255: end; //while
256: write(' Nome : ');
257: writeln(pAux1^.nome);
258: end; //if
259: end; //begin
260:
261: //IMPRIMINDO A LISTA
262: procedure imprimirOrdem();
263: begin
264: writeln(' :: IMPRIMINDO A LISTA EM ORDEM CRESCENTE :: ');
4/6
5. 04/09/2016 20:10:07C:UserselainDocumentsAlgoritmosLista5. Lista Simplesmente Encadeada Dinâmica Circularlista_simplesmente_e
265: if(inicio = nil)then
266: begin
267: writeln('lista vazia');
268: end
269: else
270: begin
271: cont := 0;
272: pAux1:=inicio;
273: while(pAux1 <> nil)do //imprimindo lista
274: begin
275: cont := cont + 1;
276: write(cont, '. ');
277: write(' Nome : ');
278: writeln(pAux1^.nome);
279: pAux1 := pAux1^.proximo;
280: end; //while
281: end; //if
282: end; //begin
283:
284: //PROGRAMA PRINCIPAL
285: procedure menu;
286: begin
287: repeat
288: writeln((' |
==================================================================== |');
289: writeln((' | MENU
| ');
290: writeln((' |
==================================================================== |');
291: writeln((' | Lista Duplamente Encadeada Dinamica Circular Nao
Ordenada | ');
292: writeln ((' | 1. Inicializar a Lista
| ');
293: writeln ((' | 2. Inserir no inicio da Lista
| ');
294: writeln ((' | 3. Inserir no fim da Lista
| ' );
295: writeln ((' | 4. Remover do inicio da Lista
| ');
296: writeln ((' | 5. Remover do fim da Lista
| ');
297: writeln ((' | 6. Buscar um elemento na Lista
| ');
298: writeln ((' | 7. Atualizar um elemento na Lista
| ');
299: writeln ((' | 8. Imprimir todos os elementos da lista
| ');
300: writeln((' |
==================================================================== |');
301: writeln((' | Lista Duplamente Encadeada Dinamica Circular Ordenada
| ');
302: writeln ((' | 9. Inicializar a Lista
| ');
303: writeln ((' | 10. Inserir em Ordem Crescente
| ');
304: writeln ((' | 11. Imprimir todos os elementos da lista
| ');
305: writeln ((' | 12. Buscar um elmeneto da lista da lista
| ');
306: writeln((' |
==================================================================== |');
307: writeln ((' | 0. SAIR
| ');
308: writeln((' |
==================================================================== |');
309: writeln('');
5/6
6. 04/09/2016 20:10:07C:UserselainDocumentsAlgoritmosLista5. Lista Simplesmente Encadeada Dinâmica Circularlista_simplesmente_e
310: write(' Digite a opcao desejada: ');
311: readln(opcao);
312: writeln('');
313:
314: Case opcao Of
315: 1 : Begin
316: inicializaLista();
317: writeln('');
318: end;
319: 2 : Begin
320: insereInicio();
321: writeln('');
322: end;
323: 3 : Begin
324: insereFim();
325: writeln('');
326: end;
327: 4 : Begin
328: removeInicio();
329: writeln('');
330: end;
331: 5 : Begin
332: removeFim();
333: writeln('');
334: end;
335: 6 : Begin
336: buscar();
337: writeln('');
338: end;
339: 7 : Begin
340: atualizar();
341: writeln('');
342: end;
343: 8 : Begin
344: imprimir();
345: writeln('');
346: end;
347: 9 : Begin
348: inicializaLista();
349: writeln('');
350: end;
351: 10 : Begin
352: insereOrdem();
353: writeln('');
354: end;
355: 11 : Begin
356: imprimirOrdem();
357: writeln('');
358: end;
359: 12 : Begin
360: buscar();
361: writeln('');
362: end;
363: Else Writeln (' inválido ');
364: End;
365: until opcao = 0;
366: writeln('');
367: end;
368:
369: //PROGRAMA PRINCIPAL
370: begin
371: menu();
372: end.
373:
374:
6/6