1. 31/08/2016 15:06:00C:UserselainDocumentsAlgoritmosListaLista Duplamente Encadeada Dinâmicalista_duplamente_encadeada_din
1: //ELAINE CECÍLIA GATTO
2: //30/08/2016
3:
4: program lista_duplamente_encadeada_dinamica;
5: uses wincrt, crt;
6:
7: //DECLARANDO UM NOVO TIPO
8: type
9: apont=^reg;
10: reg=record
11: nome: string[10];
12: proximo:apont;
13: anterior:apont;
14: end;
15:
16: Var
17: opcao : integer;
18: lista, pAux2, pAux1:apont;
19: x : string;
20:
21: //INICIALIZANDO A LISTA
22: procedure inicializaLista();
23: begin
24: lista:=nil;
25: pAux1:=nil;
26: pAux2:=nil;
27: end;
28:
29: //INSERIR NO COMEÇO
30: procedure insereInicio();
31: begin
32: write(' Digite um nome: ');
33: readln(x);
34: if(lista = nil)then
35: begin
36: new(lista); //aloca memória
37: lista^.nome := x;
38: lista^.proximo := nil; //aponta para o fim da lista
39: lista^.anterior := nil; //aponta para o inicio da lista
40: end
41: else
42: begin
43: new(pAux1); //aloca memória
44: pAux1^.nome := x;
45: pAux1^.proximo := lista;
46: lista^.anterior := pAux1;
47: pAux1^.anterior := nil;
48: lista := pAux1;
49: end;
50: writeln(' Elemento inserido com sucesso! ');
51: end;
52:
53: //INSERIR NO FIM
54: procedure insereFim();
55: begin
56: write(' Digite um nome: ');
57: readln(x);
58: if(lista = nil)then
59: begin
60: new(lista); //aloca memória
61: lista^.nome := x;
62: lista^.proximo := nil; //aponta para o fim da lista
63: lista^.anterior := nil; //aponta para o inicio da lista
64: end
65: else
66: begin
1/5
2. 31/08/2016 15:06:00C:UserselainDocumentsAlgoritmosListaLista Duplamente Encadeada Dinâmicalista_duplamente_encadeada_din
67: new(pAux2);
68: pAux2 := lista;
69: while(pAux2^.proximo<>nil)do
70: begin
71: pAux2 := pAux2^.proximo;
72: end;
73: //quando chegar ao FIM, sai do WHILE e insere!
74: new(pAux1);
75: pAux1^.nome := x;
76: pAux1^.proximo := nil;
77: pAux1^.anterior := lista;
78: pAux2^.proximo := pAux1;
79: end;
80: writeln(' Elemento inserido com sucesso! ');
81: end;
82:
83: //REMOVE DO COMEÇO
84: function removeInicio():string;
85: begin
86: if(lista = nil)then
87: begin
88: writeln(' LISTA VAZIA ');
89: end
90: else
91: begin
92: if(lista^.proximo = nil)then
93: begin
94: removeInicio := lista^.nome;
95: dispose(lista);
96: end
97: else
98: begin
99: pAux1 := lista; //aux1 aponta para lista
100: lista := pAux1^.proximo; //lista aponta para o próximo de AUX
101: removeInicio := pAux1^.nome; //remove o item
102: lista^.anterior := nil; //anterior da lista aponta para NIL
103: dispose(pAux1); //libera memória
104: end;
105: writeln(' Elemento removido com sucesso! ');
106: end;
107: end;
108:
109: //REMOVE NO FIM
110: function removeFim():string;
111: begin
112: if(lista = nil)then
113: begin
114: writeln(' LISTA VAZIA ');
115: end
116: else
117: begin
118: if(lista^.proximo = nil)then
119: begin
120: removeFim := lista^.nome;
121: dispose(lista);
122: lista := nil;
123: end
124: else
125: begin
126: pAux1 := lista; //AUX1 aponta para lista
127: pAux2 := lista; //AUX2 aponta para lista
128: while(pAux1^.proximo<>nil)do
129: begin
130: pAux1 := pAux1^.proximo; //AUX1 aponta para o proximo de AUX1
131: pAux2 := pAux1^.anterior; //AUX2 aponta pra o anterior de AUX2
132: end;
2/5
3. 31/08/2016 15:06:00C:UserselainDocumentsAlgoritmosListaLista Duplamente Encadeada Dinâmicalista_duplamente_encadeada_din
133: removeFim := pAux1^.nome; //remove o item
134: dispose(pAux1); //libera memória de AUX1
135: pAux2^.proximo := nil; //proximo de AUX2 aponta para NIL
136: end;
137: writeln(' Elemento removido com sucesso! ');
138: end;
139: end;
140:
141: //BUSCAR UM ELEMENTO
142: procedure buscar();
143: begin
144: write(' Digite o nome que deseja procurar: ');
145: readln(x);
146: if(lista = nil)then
147: begin
148: writeln(' Lista Vazia');
149: end
150: else
151: begin
152: pAux1 := lista; //AUX1 aponta para lista
153: while ( ( pAux1 <> nil ) and ( pAux1^.nome <> x ) ) do
154: begin
155: pAux1 := pAux1^.proximo; //vai para o próximo elemento
156: end;
157: //quando achar, PÁRA e sai do while, é pq encontrou!
158: writeln(' Nome encontrado: ', pAux1^.nome);
159: end;
160: end;
161:
162: //ATUALIZAR UM ELEMENTO
163: procedure atualizar();
164: begin
165: write(' Digite o nome que deseja procurar: ');
166: readln(x);
167: if(lista = nil)then
168: begin
169: writeln(' Lista Vazia');
170: end
171: else
172: begin
173: pAux1 := lista; //AUX1 aponta para lista
174: while ( ( pAux1 <> nil ) and ( pAux1^.nome <> x ) ) do
175: begin
176: pAux1 := pAux1^.proximo; //vai para o próximo elemento
177: end;
178: //quando achar, PÁRA e sai do while, é pq encontrou!
179: write(' Digite o novo nome: ' );
180: readln(pAux1^.nome);
181: writeln(' Nome atualizado com sucesso!!! ');
182: end;
183: end;
184:
185: //IMPRIMINDO A LISTA
186: procedure imprimir();
187: begin
188: if(lista = nil)then
189: begin
190: writeln('lista vazia');
191: end
192: else
193: begin
194: pAux1:=lista;
195: while(pAux1 <> nil)do //imprimindo lista
196: begin
197: write(' Nome : ');
198: writeln(pAux1^.nome);
3/5
4. 31/08/2016 15:06:00C:UserselainDocumentsAlgoritmosListaLista Duplamente Encadeada Dinâmicalista_duplamente_encadeada_din
199: pAux1 := pAux1^.proximo;
200: end; //while
201: end; //if
202: end; //begin
203:
204: //PROGRAMA PRINCIPAL
205: procedure menu;
206: begin
207: repeat
208: writeln(' MENU ');
209: writeln (' 1. Inicializar a Lista ');
210: writeln (' 2. Inserir no inicio da Lista ');
211: writeln (' 3. Inserir no fim da Lista ');
212: writeln (' 4. Inserir em ordem ');
213: writeln (' 5. Remover do inicio da Lista ');
214: writeln (' 6. Remover do fim da Lista ');
215: writeln (' 7. Buscar um elemento na Lista ');
216: writeln (' 8. Atualize um elemento na Lista ');
217: writeln (' 9. Imprimir todos os elementos Lista ');
218: writeln (' 0. SAIR ');
219: writeln('');
220: write(' Digite a opcao desejada: ');
221: readln(opcao);
222: writeln('');
223:
224: Case opcao Of
225: 1 : Begin
226: inicializaLista();
227: writeln('');
228: end;
229: 2 : Begin
230: insereInicio();
231: writeln('');
232: end;
233: 3 : Begin
234: insereFim();
235: writeln('');
236: end;
237: 4 : Begin
238:
239: writeln('');
240: end;
241: 5 : Begin
242: removeInicio();
243: writeln('');
244: end;
245: 6 : Begin
246: removeFim();
247: writeln('');
248: end;
249: 7 : Begin
250: buscar();
251: writeln('');
252: end;
253: 8 : Begin
254: atualizar();
255: writeln('');
256: end;
257: 9 : Begin
258: imprimir();
259: writeln('');
260: end;
261: Else Writeln (' inválido ');
262: End;
263: until opcao = 0;
264: writeln('');
4/5