1. 30/08/2016 15:58:58C:UserselainDocumentsAlgoritmosListaLisat Simplesmente Encadeada Dinâmicalista_simplesmente_encadeada
1: //ELAINE CECÍLIA GATTO
2: //29/08/2016
3:
4: program lista_simplesmente_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: prox:apont;
13: end;
14:
15: Var
16: opcao : integer;
17: lista, pAux2, pAux1:apont;
18: x : string;
19:
20: //INICIALIZANDO A LISTA
21: procedure inicializaLista();
22: begin
23: lista:=nil;
24: pAux1:=nil;
25: pAux2:=nil;
26: end;
27:
28: //INSERINDO NO FIM DA LISTA
29: procedure insereFinal();
30: begin
31:
32: //se a lista estiver vazia
33: if(lista = nil)then
34: begin
35: new(lista);
36: writeln('Digite o nome');
37: readln(lista^.nome);
38: lista^.prox:=nil;
39: pAux1:=lista;
40: end
41: else
42: begin
43: new(pAux2);
44: writeln('Digite o nome');
45: readln(pAux2^.nome);
46: pAux2^.prox:=nil;
47: pAux1^.prox:=pAux2;
48: pAux1:=pAux2;
49: end;
50: end;
51:
52: //INSERINDO NO INICIO DA LISTA
53: procedure insereInicio();
54: begin
55: //se a lista estiver vazia
56: if(lista = nil)then
57: begin
58: new(lista);
59: writeln('Digite o nome');
60: readln(lista^.nome);
61: lista^.prox:=nil;
62: pAux1:=lista;
63: end
64: else
65: begin
66: new(pAux1);
1/4
2. 30/08/2016 15:58:58C:UserselainDocumentsAlgoritmosListaLisat Simplesmente Encadeada Dinâmicalista_simplesmente_encadeada
67: writeln('Digite o nome');
68: readln(pAux1^.nome);
69: pAux1^.prox:=lista;
70: lista := pAux1;
71: end;
72: end;
73:
74: //REMOVENDO DO INCIO DA LISTA
75: function removeInicio : string;
76: begin
77: //verifica se a lista está vazia
78: if(lista = nil)then
79: begin
80: writeln(' A lista está vazia! ');
81: end
82: else
83: begin
84: //remove se a lista tem apenas um elemento
85: if(lista^.prox = nil)then
86: begin
87: removeInicio := lista^.nome; //remove
88: dispose(lista); //desaloca memória
89: end
90: else
91: begin
92: //remove se a lista tem vários elementos
93: pAux1 := lista; //aponta para o inicio da lista
94: lista := lista^.prox; // lista recebe o próximo
95: removeInicio := pAux1^.nome; //remove do inicio
96: dispose(pAux1); //desaloca memória
97: end;
98: end;
99: end;
100:
101: //REMOVENDO DO FIM DA LISTA
102: function removeFim : string;
103: begin
104: //verifica se a lista está vazia
105: if(lista = nil)then
106: begin
107: writeln(' A lista está vazia! ');
108: end
109: else
110: begin
111: //remove se a lista tem apenas um elemento
112: if(lista^.prox = nil)then
113: begin
114: removeFim := lista^.nome; //remove
115: dispose(lista); //desaloca memória
116: end
117: else
118: begin
119: pAux2 := lista; //auxiliar2 recebe a lista
120: pAux1 := lista; //auxiliar1 recebe a lista
121:
122: //enquanto o próximo elemento de Aux 1 for diferente de NIL
123: while(pAux1^.prox<>nil)do
124: begin
125: pAux2 := pAux1; //auxiliar 2 recebe auxiliar 1
126: pAux1 := pAux1^.prox; //auxiliar 1 recebe o seu próximo
127: end;
128: removeFim := lista^.nome; //remove o elemento desejado
129: dispose(pAux1); //desaloca memória
130: pAux2^.prox := nil; //Aux 2 aponta para o fim da lista
131: end;
132: end;
2/4
3. 30/08/2016 15:58:58C:UserselainDocumentsAlgoritmosListaLisat Simplesmente Encadeada Dinâmicalista_simplesmente_encadeada
133: end;
134:
135: //BUSCAR UM ELEMENTO
136: procedure buscar;
137: begin
138: writeln(' Digite o nome que deseja procurar ');
139: readln(x);
140: pAux1 := lista;
141: while((pAux1<>nil)and(pAux1^.nome<>x))do
142: begin
143: pAux1 := pAux1^.prox;
144: end;
145: write(' Nome encontrado: ');
146: writeln(pAux1^.nome);
147: end;
148:
149: //ATUALIZAR UM ELEMENTO
150: procedure atualizar;
151: begin
152: writeln(' Digite o nome que deseja procurar ');
153: readln(x);
154: pAux1 := lista;
155: while((pAux1<>nil)and(pAux1^.nome<>x))do
156: begin
157: pAux1 := pAux1^.prox;
158: end;
159: write(' Nome encontrado: ');
160: writeln(pAux1^.nome);
161: write(' Atualize o nome ');
162: readln(pAux1^.nome);
163: end;
164:
165: //IMPRIMINDO A LISTA
166: procedure listarTodos();
167: begin
168: if(lista = nil)then
169: begin
170: writeln('lista vazia');
171: end
172: else
173: begin
174: pAux1:=lista;
175: while(pAux1 <> nil)do //imprimindo lista
176: begin
177: write(' NOME : ');
178: writeln(pAux1^.nome);
179: pAux1 := pAux1^.prox;
180: end; //while
181: end; //if
182: end; //begin
183:
184:
185: //PROGRAMA PRINCIPAL
186: procedure menu;
187: begin
188: repeat
189: writeln(' MENU ');
190: writeln (' 1. Inicializar a Lista ');
191: writeln (' 2. Inserir no fim da Lista ');
192: writeln (' 3. Imprimir Lista ');
193: writeln (' 4. Inserir no inicio da Lista ');
194: writeln (' 5. Remover do inicio da Lista ');
195: writeln (' 6. Remover do fim da Lista ');
196: writeln (' 7. Buscar um elemento na Lista ');
197: writeln (' 8. Atualize um elemento na Lista ');
198: writeln (' 0. SAIR ');
3/4
4. 30/08/2016 15:58:58C:UserselainDocumentsAlgoritmosListaLisat Simplesmente Encadeada Dinâmicalista_simplesmente_encadeada
199: writeln('');
200: write(' Digite a opcao desejada: ');
201: readln(opcao);
202: writeln('');
203:
204: Case opcao Of
205: 1 : Begin
206: inicializaLista();
207: writeln('');
208: end;
209: 2 : Begin
210: insereFinal();
211: writeln('');
212: end;
213: 3 : Begin
214: listarTodos();
215: writeln('');
216: end;
217: 4 : Begin
218: insereInicio();
219: writeln('');
220: end;
221: 5 : Begin
222: removeInicio();
223: writeln('');
224: end;
225: 6 : Begin
226: removeFim();
227: writeln('');
228: end;
229: 7 : Begin
230: buscar();
231: writeln('');
232: end;
233: 8 : Begin
234: atualizar();
235: writeln();
236: end;
237: Else Writeln (' inválido ');
238: End;
239: until opcao = 0;
240: writeln('');
241: end;
242:
243:
244: //PROGRAMA PRINCIPAL
245: begin
246: menu();
247: end.
4/4