1- Conceitos básicos de estruturas dinâmicas:
Um ponteiro ou apontador é um tipo especial de variável que é capaz de receber um endereço de memória RAM relative a um determindo tipo de dados, de forma como que a apontar para ele;
Relativamente as estrutruras dinâmicas que exitem por assim dizer algumas regras para realizar alguns procedimentos:
- Qunto á lista ordenada podemos referir que não existe uma regra se pretender remover dados pois é uma estrutura cujo o utilizador pode escolher o dado a ser removido, logo pode ser qualquer dado da lista;
- Quanto á pilha podemos referir que uma estrutura dinâmica identica a lista mas existe uma pequna regra se pretender remover dados e essa regra é LIFO que quer dizer LAST IN FIRST OUT . Isto em português quer dizer que o ultimo dado a ser introduzido vai ser o primeiro a ser removido;
- Quanto á Fila podemos referir que é uma estrura dinâmica que também tem uma pequena regra para a remoção de dados que é FIFO que quer dizer FIRST IN FIRST OUT. Isto em português quer dizer que o primeiro dado a ser introduzido vai ser o primeiro dado a ser removido.
2- LISTA ORDENADA
Exemplo de uma lista ordenada implementada num programa:
- Program lista_ordenada;
- type registo=record
- nome:string;
- pont:^registo;
- end;
- var pi, px:^registo;
- a:char;
- procedure inserir;
- begin
- new(px);
- write('nome:');
- readln(px^.nome);
- px^.pont:=pi;
- pi:=px;
- end;
- procedure listar;
- begin
- px:=pi;
- if(pi=nil) then
- writeln('pilha vazia')
- else
- begin
- while (px<>nil) do
- begin
- writeln(px^.nome);
- px:=px^.pont;
- end;
- end;
- end;
- procedure ordenar;
- var x, y:^registo;
- h:boolean;
- aux:string;
- begin
- if (pi=nil) then
- write('pilha vazia')
- else
- begin
- if(pi^.pont=nil) then
- begin
- writeln('so tem um elemento');
- writeln(pi^.nome);
- end
- else
- repeat
- h:=false;
- x:=pi;
- y:=pi^.pont;
- repeat
- if(x^.nome>y^.nome) then
- begin
- h:=true;
- aux:=x^.nome;
- x^.nome:=y^.nome;
- y^.nome:=aux;
- end;
- x:=x^.pont;
- y:=y^.pont;
- until(y=nil);
- until(not h);
- end;
- end;
- procedure eliminar;
- var z:string;
- pa:^registo;
- begin
- pa:=nil;
- px:=pi;
- if (px=nil) then
- writeln('pilha vazia')
- else
- begin
- write('nome a eliminar:');
- readln(z);
- while ((px<>nil) or (px^.nome<>z)) do
- begin
- pa:=px;
- px:=px^.pont;
- end;
- if (px=nil) then
- writeln('elemento nao existente')
- else
- if (px=pi) then
- pi:=pi^.pont
- else
- pa^.pont:=px^.pont;
- dispose(px);
- end;
- end;
- Begin //Programa Principal
- pi:=nil;
- repeat
- writeln('1:inserir');
- writeln('2:listar');
- writeln('3:eliminar');
- writeln('4:ordenar');
- writeln('0:sair');
- readln(a);
- case a of
- '1':inserir;
- '2':listar;
- '3':eliminar;
- '4':ordenar;
- end;
- until(a='0');
- end.
Reflexão
Quanto á inserção dos dados numa lista ordenada podemos referir que os dados são inseridos pelo utilizador, e quando mesmo pretende remover não tem uma ordem obrigatória pois na lista ordenada qualquer dado pode ser removido mesmo que esteja na base,meio ou topo. Assim isto pode ser considerado como uma vantagem em relação ás outras estruturas dinâmicas.
3-Pilha
Exemplos de uma pilha no mundo real:
Exemplo de uma pilha implementada num programa:
- Program Pilha;
- Type Pessoa = record
- Nome:string;
- Prox:^Pessoa;
- end;
- Var Top, Px:^Pessoa;
- Op:Integer;
- Procedure Insere;
- Begin
- new(Px);
- writeln ('Escreva o nome da pessoa');
- Readln (Px^.Nome);
- Px^.prox:=Top;
- Top:=Px;
- end;
- Procedure Percorre;
- Begin
- Px:=Top;
- If (Px=Nil) Then
- writeln ('Pilha vazia')
- else
- begin
- Repeat
- writeln ('Nome:',Px^.Nome);
- Px:=Px^.Prox;
- Until (Px=Nil);
- end;
- end;
- Procedure Remove;
- Begin
- If Top=Nil then
- writeln ('Pilha vazia')
- else
- begin
- Px:=Top;
- writeln ('Elemento removido:',Px^.Nome);
- Top:=Px^.Prox;
- Dispose(Px);
- end;
- end;
- Begin
- Top:=Nil;
- Repeat
- writeln;
- writeln ('Escolha a operação');
- writeln ('1-inserir');
- writeln ('2-Percorrer');
- writeln ('3-Remover');
- readln (op);
- Case op of
- 1:Insere;
- 2:Percorre;
- 3:Remover;
- end;
- until op=0;
- End.
Reflexão
Na pilha já existe uma ordem de entrada e saida de dados.
Ao contrário da anterior estrutura dinâmica referida esta obedece a uma unica regra para a remoção de dados e essa regra é LIFO(First in First out) ou seja o primeiro dado que foi introduzido pelo utilizador vai ter que ser obrigatoriamente o primeiro sair.
4 - Fila
Exemplo de uma fila implementada num programa funcionávél:
- Program fila ;
- type pessoa=record
- nome:string;
- idade:integer;
- peso:real;
- prox:^pessoa;
- end;
- var cauda,frente,px:^pessoa;
- x:char;
- y:integer;
- procedure inserir;
- begin
- new(px);
- writeln('Nome:');
- read(px^.nome);
- writeln('Idade:');
- read(px^.idade);
- writeln('Peso:');
- read(px^.peso);
- if frente=nil then
- begin
- frente:=px;
- cauda:=px;
- end
- else
- begin
- cauda^.prox:=px;
- cauda:=px;
- cauda^.prox:=nil;
- end;
- end;
- procedure percorrer;
- begin
- px:=frente;
- if px=nil then
- writeln('Pilha vazia')
- else
- begin
- repeat
- writeln('Nome: ',px^.nome);
- writeln('Idade: ',px^.idade);
- writeln('Peso: ',px^.peso);
- px:=px^.prox;
- until (px=nil);
- end;
- end;
- procedure eliminar;
- begin
- px:=frente;
- if px=nil then
- writeln('Pilha vazia')
- else
- begin
- px:=frente;
- frente:=frente^.prox;
- dispose(px)
- end;
- end;
- Begin
- cauda:=nil;
- frente:=nil;
- repeat
- writeln('1-para inserir dados.');
- writeln('2-para mostrar dados.');
- writeln('3-para eliminar dados.');
- writeln('Qual a opção');
- read(y);
- case y of
- 1:inserir;
- 2:percorrer;
- 3:eliminar;
- end;
- writeln('Deseja continuar?(S-N)');
- read(x);
- until(x='n') or (x='N');
- End.
Reflexão
Por fim quanto á fila podemos referir que é uma estrutura dinâmica também com uma regra para a remoção de dados e essa regra é FIFO(First in First out).
Isto quer dizer que o primeiro dado a ser introduzido pelo utilizador vai ser o primeiro a ser removido quando o utilizador o pretender.
Esta estrura pode ser muito util para um centro de saúde pois o primeiro paciente que entre dirige-se ao balcão o seus dados são preenchidos, e como a ordem é a de entrada logo que o primeiro paciente seja atendido os seus dados ja posem ser removidos e assim sucessivamente.



Nenhum comentário:
Postar um comentário