Este programa implementa uma fila dinâmica utilizando ponteiros. Ele define um tipo de dado e nós, e implementa funções para criar a fila, inserir e remover itens, verificar se a fila está vazia e imprimir os itens. Um menu principal é fornecido para testar as operações da fila.
1. 07/12/2016 10:11:08E:DocumentsAlgoritmos3. Pilhas e FilasFilafila_dinamica_certo.pas
1: //ELAINE CECÍLIA GATTO
2: //29/08/2016
3:
4: program fila_dinamica;
5: uses wincrt, crt;
6:
7: //DECLARANDO UM NOVO TIPO
8: type
9: tipo_dado = integer;
10: tipo_fila = ^tipo_no;
11: tipo_no = record
12: dado: tipo_dado;
13: proximo: tipo_fila;
14: end;
15:
16: var
17: opcao, x: integer;
18: fila, pAux1, pAux2: tipo_fila;
19:
20: Procedure Cria_Fila(var fila:tipo_fila);
21: begin
22: fila := Nil;
23: pAux1 := Nil;
24: pAux2 := NIl;
25: writeln('Fila Criada com Sucesso!');
26: end;
27:
28:
29: Function Vazia(fila: tipo_fila): boolean;
30: begin
31: Vazia := ( fila = Nil );
32: end;
33:
34:
35: //REMOVER DO INCIO
36: function Dequeue():tipo_dado;
37: begin
38: writeln(' ===== REMOVENDO DO INICIO DA FILA ====== ');
39: //verifica se a lista está vazia
40: if(fila = nil)then
41: begin
42: writeln(' A fila está vazia! ');
43: end
44: else
45: begin
46: //remove se a lista tem apenas um elemento
47: if(fila^.proximo = fila)then
48: begin
49: Dequeue := fila^.dado; //remove o elemento
50: dispose(fila); //desaloca memória
51: fila := nil; //inicio da lista aponta para NIL
52: end
53: else
54: begin
55: new(pAux2); //aloca memória
56: pAux2:=fila; //aux2 aponta para o inicio da lista
57: while(pAux2^.proximo<>fila)do
58: begin
59: //aux2 vai para o próximo elemento da lista
60: pAux2 := pAux2^.proximo;
61: end;
62: new(pAux1); //aloca memória
63: pAux1 := fila; //aux1 aponta para o inicio da lista
64: Dequeue := pAux1^.dado; //remove o elemento da lista
65: fila := fila^.proximo; //inicio da lista aponta para o próximo
66: //o próximo de aux2 aponta para o inicio da lista
1/3
2. 07/12/2016 10:11:08E:DocumentsAlgoritmos3. Pilhas e FilasFilafila_dinamica_certo.pas
67: pAux2^.proximo := fila;
68: dispose(pAux1); //libera memória
69: pAux1 := nil; //aux1 aponta para NIL
70: end;
71: end;
72: writeln(' Elemento removido com sucesso! ');
73: end;
74:
75: //INSERIR NO FIM DA LISTA
76: procedure Enqueue();
77: begin
78: writeln(' ===== INSERINDO NO FINAL DA FILA ====== ');
79: write(' Digite um Elemento: ');
80: readln(x);
81: if(fila = nil)then
82: begin
83: new(fila); //aloca memória
84: fila^.dado := x; //aloca o novo elemento
85: fila^.proximo := fila; //aponta para o inicio da lista
86: end
87: else
88: begin
89: new(pAux2); //aloca memória
90: pAux2:=fila; //aux aponta para o inicio da lista
91: while(pAux2^.proximo<>fila)do
92: begin
93: pAux2 := pAux2^.proximo; //vai para o próximo elemento da lista
94: end;
95: new(pAux1); //aloca memória
96: //o próximo elemento de aux1 aponta para inicio da lista
97: pAux1^.proximo := fila;
98: pAux1^.dado := x; //aloca o novo elemento
99: //o próximo elemento de aux2 aponta para aux1
100: pAux2^.proximo := pAux1;
101: end;
102: writeln(' Elemento inserido com sucesso! ');
103: end;
104:
105:
106: Function Inicio(fila: tipo_fila): integer;
107: Begin
108: Inicio := fila^.dado;
109: end;
110:
111: //IMPRIMINDO A LISTA
112: procedure imprimir();
113: begin
114: if(fila = nil)then
115: begin
116: writeln('Fila vazia');
117: end
118: else
119: begin
120: pAux1:=fila;
121: while(pAux1^.proximo <> fila)do //imprimindo lista
122: begin
123: write(' Elemento : ');
124: writeln(pAux1^.dado);
125: pAux1 := pAux1^.proximo;
126: end; //while
127: write(' Elemento : ');
128: writeln(pAux1^.dado);
129: end; //if
130: end; //begin
131:
132:
2/3
3. 07/12/2016 10:11:08E:DocumentsAlgoritmos3. Pilhas e FilasFilafila_dinamica_certo.pas
133:
134: //PROGRAMA PRINCIPAL
135: procedure menu;
136: begin
137: repeat
138: writeln(' MENU ');
139: writeln (' 1. Criar a Fila');
140: writeln (' 2. Enqueue ');
141: writeln (' 3. Dequeue ');
142: writeln (' 4. Retornar o Inicio da Fila ');
143: writeln (' 5. Imprimir a Fila ');
144: writeln (' 6. Verificar se a Fila está vazia ');
145: writeln (' 0. SAIR ');
146: writeln('');
147: write(' Digite a opcao desejada: ');
148: readln(opcao);
149: writeln('');
150:
151: Case opcao Of
152: 1 : Begin
153: Cria_Fila(fila);
154: writeln('');
155: end;
156: 2 : Begin
157: Enqueue();
158: writeln('');
159: end;
160: 3 : Begin
161: Dequeue();
162: writeln('');
163: end;
164: 4 : Begin
165: x := Inicio(fila);
166: writeln(' Inicio da Fila:', x);
167: writeln('');
168: end;
169: 5 : Begin
170: imprimir();
171: writeln('');
172: end;
173: 6 : Begin
174: Vazia(fila);
175: writeln('');
176: end;
177:
178: Else Writeln (' inválido ');
179: End;
180: until opcao = 0;
181: writeln('');
182: end;
183:
184:
185: //PROGRAMA PRINCIPAL
186: begin
187: menu();
188: end.
3/3