Ponteiros
9.1. INTRODUÇÃO
A estrutura dinâmica é usada em casos onde não conhecemos o comprimento dos dados a serem tratados. Neste caso podemos alocar na memória e desalocar à medida que for interessante para nós, sem nos preocuparmos com tamanho em tempo de compilação. Ela nos proporciona também uma execução usando técnicas de recursividade, e assim existem algumas vantagens, com relação a estrutura estática.
9.2. DEFINIÇÃO
Operações: 1)Criar uma estrutura dinâmica denominada “caixa”, um ponteiro. caixa { Prox = mostra o próximo} Tipo_reg Prox onde contenha um tipo_reg e
type Ponteiro = ^caixa; { (^ = ponteiro) } tipo_reg = record ch : string[30]; En: string[30]; {outros} end; caixa = record reg : tipo_reg; prox : ponteiro; end; var P1, P2, P : ponteiro; C : caixa; T : Tipo_reg; R : string[30]; 2) Gerar uma caixa apontada por (P); New(P); p
p1
p2
p3
C
T
3) Aterra(Inicializar ou nada) em um ponteiro p1 P1 := nil;
p
T
P^.Prox := nil; P^.Reg := T ;
C T
C := P^; 4) Insere uma caixa entre duas outras caixas
p p1 cabeça x1 x2 x3 x4 x5
p2 x6
p3
p p1 cabeça x1 x2 x3 x4 x5
p2 x6
p3 X p p1 cabeça x1 x2 x3 x4 x5 p2 x6
p3 X p p1 cabeça x1 x2 x3 x4 x5 p2 x6
p3 X
new(P3); P3^.Reg := X; P3^.Prox := P^.Prox; { P3 ponteiro.Prox vai apontar para quem P ponteiro.Prox está apontando} P^.Prox ;= P3; 5) Remover a caixa que precede a caixa apontada por P. P3 := P^.Prox; X := P3^.Reg; P^.Prox := P3^.Prox; {desvio} if P2 = P3 then P2 := P; dispose(P3); {limpa da memória} ---------------------------------------------------------------------------------------------------------X p p1 cabeça x2 x3 x4 x5 x6 p3 p2
--------------------------------------------------------------------------------------------------------X p p1 cabeça x1 x2 x3 p3 x4 x5 p2 x6
--------------------------------------------------------------------------------------------------------X x4 p p3 p2 p1 cabeça x1 x2 x3 x4 x5 x6