Ponteiros em Pascal. Variáveis ponteiros são aquelas que. Declaração em Pascal: var ptint: ^integer; {ponteiro para uma variável inteira } real} 1

Tamanho: px
Começar a partir da página:

Download "Ponteiros em Pascal. Variáveis ponteiros são aquelas que. Declaração em Pascal: var ptint: ^integer; {ponteiro para uma variável inteira } real} 1"

Transcrição

1 Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal: var ptint: ^integer; {ponteiro para uma variável inteira } ptreal: ^real; {ponteiro para uma variável real} 1

2 Operador unário que retorna o endereço de uma variável program soma; var S,A,B:integer; PtS,PtA,PtB : ^integer; begin readln(a,b); PtA PtB PtS PtS^ := PtA^ + PtB^; writeln('resultado: ',PtS^); end. 2

3 Alocação de memória program soma; var S,A,B: integer; PtS,PtA,PtB: ^integer; begin A := 2; B := 3; PtA PtB PtS PtS^ := PtA^ + PtB^; Writeln('Resultado: ',PtS^); end. A PtA B PtB PtS S 3

4 Alocação de memória program soma; var S,A,B: integer; PtS,PtA,PtB: ^integer; begin A := 2; B := 3; PtA PtB PtS PtS^ := PtA^ + PtB^; Writeln('Resultado: ',PtS^); end. PtA A 2 B PtB PtS S 4

5 Alocação de memória program soma; var S,A,B: integer; PtS,PtA,PtB: ^integer; begin A := 2; B := 3; PtA PtB PtS PtS^ := PtA^ + PtB^; Writeln('Resultado: ',PtS^); end. PtA PtB A 2 B 3 PtS S 5

6 Alocação de memória program soma; var S,A,B: integer; PtS,PtA,PtB: ^integer; begin A := 2; B := 3; PtA PtB PtS PtS^ := PtA^ + PtB^; Writeln('Resultado: ',PtS^); end. PtA PtB A 2 B 3 PtS S 6

7 Alocação de memória program soma; var S,A,B: integer; PtS,PtA,PtB: ^integer; begin A := 2; B := 3; PtA PtB PtS PtS^ := PtA^ + PtB^; Writeln('Resultado: ',PtS^); end. PtA PtB A 2 B 3 PtS S 7

8 Alocação de memória program soma; var S,A,B: integer; PtS,PtA,PtB: ^integer; begin A := 2; B := 3; PtA PtB PtS PtS^ := PtA^ + PtB^; Writeln('Resultado: ',PtS^); end. PtA PtB A 2 B 3 PtS S 8

9 Alocação de memória program soma; var S,A,B: integer; PtS,PtA,PtB: ^integer; begin A := 2; B := 3; PtA PtB PtS PtS^ := PtA^ + PtB^; Writeln('Resultado: ',PtS^); end. PtA PtB A 2 B 3 PtS S 5 9

10 program soma; var S,A,B: integer; PtS,PtA,PtB: ^integer; begin A := 2; B := 3; PtA PtB PtS PtS^ := PtA^ + PtB^; Writeln('Resultado: ',PtS^); end. 5 Alocação de memória PtA PtB A 2 B 3 PtS S 5 10

11 procedure New( ) Cria dinamicamente (em tempo de execução) uma nova variável e faz uma variável ponteiro apontar para ela. type Str18 = string[18]; var P: ^Str18; begin New(P); P^ := 'Bom dia!'; Writeln (P^) Dispose(P); end. 11

12 Alocação de memória type Str18 = string[18]; var P: ^Str18; begin New(P); P^ := 'Bom dia!'; Writeln (P^) Dispose(P); end. P 12

13 Alocação de memória type Str18 = string[18]; var P: ^Str18; begin New(P); P^ := 'Bom dia!'; Writeln (P^) Dispose(P); end. P 13

14 Alocação de memória type Str18 = string[18]; var P: ^Str18; begin New(P); P^ := 'Bom dia!'; Writeln (P^) Dispose(P); end. P Bom Dia! 14

15 Bom Dia! Alocação de memória type Str18 = string[18]; var P: ^Str18; begin New(P); P^ := 'Bom dia!'; Writeln (P^) Dispose(P); end. P Bom Dia! 15

16 Alocação de memória type Str18 = string[18]; var P: ^Str18; begin New(P); P^ := 'Bom dia!'; Writeln (P^) Dispose(P); end. P OBS: a procedure Dispose libera uma variável criada dinamicamente, para que o SO possa reutilizar o espaço de memória correspondente. 16

17 Um ponteiro recebendo o valor de um outro Um ponteiro recebe o valor de um outro através do comando de atribuição Ex: q:= p; Quando isso acontece, ele passa a apontar para o mesmo objeto que o outro aponta 17

18 Alocação de memória var p,q,r: ^integer; begin new(p); p^ := 5; new(q); q:= p; r := p; {ou q} writeln(p^);{ou q^ ou r^ } dispose(q);{ou p ou r } : p q r 18

19 Alocação de memória var p,q,r: ^integer; begin new(p); p^ := 5; new(q); q:= p; r := p; {ou q} writeln(p^);{ou q^ ou r^ } dispose(q);{ou p ou r } : p q r 19

20 Alocação de memória var p,q,r: ^integer; begin new(p); p^ := 5; new(q); q:= p; r := p; {ou q} writeln(p^);{ou q^ ou r^ } dispose(q);{ou p ou r } : p q r 5 20

21 Alocação de memória var p,q,r: ^integer; begin new(p); p^ := 5; new(q); q:= p; r := p; {ou q} writeln(p^);{ou q^ ou r^ } dispose(q);{ou p ou r } : p q r 5 21

22 Alocação de memória var p,q,r: ^integer; begin new(p); p^ := 5; new(q); q:= p; r := p; {ou q} writeln(p^);{ou q^ ou r^ } dispose(q);{ou p ou r } : p q r 5 22

23 Alocação de memória var p,q,r: ^integer; begin new(p); p^ := 5; new(q); q:= p; r := p; {ou q} writeln(p^);{ou q^ ou r^ } dispose(q);{ou p ou r } : p q r 5 23

24 var p,q,r: ^integer; begin new(p); p^ := 5; new(q); q:= p; r := p; {ou q} writeln(p^);{ou q^ ou r^ } dispose(q);{ou p ou r } : 5 Alocação de memória p q r 5 24

25 Alocação de memória var p,q,r: ^integer; begin new(p); p^ := 5; new(q); q:= p; r := p; {ou q} writeln(p^);{ou q^ ou r^ } dispose(q);{ou p ou r } : p q r 25

26 Alocação de memória ATENÇÃO: observe que a partir de q:=p;, perdeu-se o acesso à variável criada com var new(q) p,q,r: Portanto, ^integer; o manuseio de ponteiros begin exige cuidado! new(p); p^ := 5; new(q); q:= p; r := p; {ou q} writeln(p^);{ou q^ ou r^ } dispose(q);{ou p ou r } : p q r 26

27 Listas lineares Em várias situações em programação temos que lidar com listas de elementos cujo tamanho exato é desconhecido. Estratégias: Empregar um agregado homogêneo (array) superdimensionado N-1 N Empregar seqüências de células (nós) que contêm dois elementos: um valor e um ponteiro para o próximo nó. p / 27

28 Quando adotar uma ou outra solução? Agregado homogêneo: quando pudermos determinar com segurança o tamanho máximo. Listas encadeada: - quando for difícil estimar o tamanho máximo com segurança; e/ou - quando se desejar maior agilidade nas inclusões ou exclusões de novos elementos. 28

29 Lista: uma estrutura recursiva: Ex: definição de uma lista de inteiros: Lista vazia; Um inteiro seguido de uma lista de inteiros. Lista vazia / p Um inteiro seguido de uma lista de inteiros p / 29

30 Lista: uma estrutura recursiva: Ex: definição de uma lista de inteiros: O ponteiro contido no Lista vazia; primeiro nó aponta para a lista formada Um inteiro seguido pelos demais uma nóslista de inteiros. Lista vazia / p Um inteiro seguido de uma lista de inteiros p / 30

31 Lista: uma estrutura recursiva: Ex: definição de uma lista de inteiros: OBS: para se ter acesso aos elementos da Lista lista vazia; é necessário que haja sempre uma variável apontando para a cabeça da Um inteiro seguido lista de uma lista de inteiros. Lista vazia / p Um inteiro seguido de uma lista de inteiros p / 31

32 Lista: uma estrutura recursiva: Ex: definição de uma lista de inteiros: a partir de cada nó, pode-se ter Lista vazia; acesso ao seguinte. Um Assim, inteiro pode-se seguido percorrer de uma a lista toda. de inteiros. Lista vazia / p Um inteiro seguido de uma lista de inteiros p / 32

33 Lista: uma estrutura recursiva: Ex: definição de uma lista de inteiros: Quando a lista estiver vazia o ponteiro que Lista vazia; deveria apontar o primeiro elemento, Um inteiro guarda seguido o valor de uma nil ( lista / ). de inteiros. Lista vazia / p Um inteiro seguido de uma lista de inteiros p / 33

34 Definição (recursiva) de um nó: type tdado = integer; { ou real, char, etc.} tptno = ^tno; tno = record Dado:tDado; Prox :tptno; end; var p,q: tptno; 34

35 Definição (recursiva) de um nó: type tdado = integer; { ou real, char, etc.} tptno = ^tno; tno = record Dado:tDado; Prox :tptno; end; var p,q: tptno; 35

36 Semanticamente, uma definição semelhante seria type tdado = integer; { ou real, char, etc.} tno = record Dado:tDado; Prox :^tno; end; var p,q: tptno; Contudo, as regras de Pascal exigem a definição na forma anteriormente exposta. 36

37 Definição OBS: no início (recursiva) da execução de um do nó: programa só há ponteiros (p,q) para nós. Estes poderão, dinamicamente, ser empregados tdado = integer; { ou real, char, etc.} para se construir uma lista. type tptno = ^tno; tno = record Dado:tDado; Prox :tptno; end; var p,q: tptno; 37

38 Exemplo de uso: criação de uma lista com dois elementos: var p,q: tptno; begin new(p); p^.dado := 7; new(q); q^.dado := 3; p^.prox := q; q^.prox := nil; : p^.dado acesso ao acesso ao objeto apontado campo por p específico 38

39 Exemplo de uso: criação de uma lista com dois elementos: var p,q: tptno; begin new(p); p^.dado := 7; new(q); q^.dado := 3; p^.prox := q; q^.prox := nil; : p^.prox acesso ao acesso ao objeto apontado campo por p específico 39

40 Alocação de memória var p,q: tptno; begin new(p); p^.dado := 7; new(q); q^.dado := 3; p^.prox := q; q^.prox := nil; : p q 40

41 Alocação de memória var p,q: tptno; begin new(p); p^.dado := 7; new(q); q^.dado := 3; p^.prox := q; q^.prox := nil; : p q 41

42 Alocação de memória var p,q: tptno; begin new(p); p^.dado := 7; new(q); q^.dado := 3; p^.prox := q; q^.prox := nil; : p 7 q 42

43 Alocação de memória var p,q: tptno; begin new(p); p^.dado := 7; new(q); q^.dado := 3; p^.prox := q; q^.prox := nil; : p 7 q 43

44 Alocação de memória var p,q: tptno; begin new(p); p^.dado := 7; new(q); q^.dado := 3; p^.prox := q; q^.prox := nil; : p 7 q 3 44

45 Alocação de memória var p,q: tptno; begin new(p); p^.dado := 7; new(q); q^.dado := 3; p^.prox := q; q^.prox := nil; : p 7 q 3 45

46 Alocação de memória var p,q: tptno; begin new(p); p^.dado := 7; new(q); q^.dado := 3; p^.prox := q; q^.prox := nil; : p 7 q 3 / 46

47 Exemplo 2: dada a lista abaixo, inserir um novo nó entre os dois existentes e armazenar nele o valor 2. : new(q); q^.dado := 2; q^.prox := p^.prox; p^.prox := q; q := nil; : p 7 q 3 / 47

48 Alocação de memória : new(q); q^.dado := 2; q^.prox := p^.prox; p^.prox := q; q := nil; : p q 7 3 / 48

49 Alocação de memória : new(q); q^.dado := 2; q^.prox := p^.prox; p^.prox := q; q := nil; : p q 7 3 / 49

50 Alocação de memória : new(q); q^.dado := 2; q^.prox := p^.prox; p^.prox := q; q := nil; : p 2 q 7 3 / 50

51 Alocação de memória : new(q); q^.dado := 2; q^.prox := p^.prox; p^.prox := q; q := nil; : p 2 q 7 3 / 51

52 Alocação de memória : new(q); q^.dado := 2; q^.prox := p^.prox; p^.prox := q; q := nil; : p 2 q 7 3 / 52

53 Alocação de memória : new(q); q^.dado := 2; q^.prox := p^.prox; p^.prox := q; q := nil; : p 2 q / 7 3 / 53

54 Alocação de memória OBS: por conveniência, representamos : esquematicamente os nós lado a lado. new(q); Entretanto, as suas localização no heap q^.dado podem := 2; ser bastante dispersas q^.prox := p^.prox; p^.prox := q; q := nil; : p q / / 54

55 Representação esquemática ideal p q p q / 3 / 7 2 h e a p Uma possível disposição. física. 55

56 Dúvidas freqüentes: 1) sempre que precisar de um ponteiro, preciso criá-lo, com new? 56

57 Dúvidas freqüentes: 1) sempre que precisar de um ponteiro, preciso criá-lo, com new? Não. >> o simples fato de se declarar o ponteiro (variável global, local ou parâmetro) faz com que o sistema aloque memória para ele. 57

58 Dúvidas freqüentes: 1) sempre que precisar de um ponteiro, preciso criá-lo, com new? Não. >> o simples fato de se declarar o ponteiro (variável global, local ou parâmetro) faz com que o sistema aloque memória para ele. >> new() deve ser usado para criar um objeto (sem identificação) para o qual o ponteiro usado como argumento apontará. 58

59 Dúvidas freqüentes: 1) sempre que precisar de um ponteiro, preciso criá-lo, com new? Não. >> o simples fato de se declarar o ponteiro (variável global, local ou parâmetro) faz com que o sistema aloque memória para ele. >> new() deve ser usado para criar um objeto (sem identificação) para o qual o ponteiro usado como argumento apontará. >> o tipo do objeto criado dependerá do tipo de ponteiro. 59

60 Dúvidas freqüentes: Caso seja executado o código abaixo, p. ex new(q); q := p; {apontar para o primeiro elemento da lista} p q 7 3 / 60

61 Dúvidas freqüentes: Caso seja executado o código abaixo, p. ex new(q); q := p; {apontar para o primeiro elemento da lista} a) criou-se um elemento, fazendo-se q apontar para ele. p q 7 3 / 61

62 Dúvidas freqüentes: Caso seja executado o código abaixo, p. ex new(q); q := p; {apontar para o primeiro elemento da lista} a) criou-se um elemento, fazendo-se q apontar para ele. b) perdeu-se esse elemento p q 7 3 / 62

63 Dúvidas freqüentes: 2) ao encerrar um módulo, devo desalocar os ponteiros, empregando dispose? 63

64 Dúvidas freqüentes: 2) ao encerrar um módulo, devo desalocar os ponteiros, empregando dispose? Não. >> no encerramento do módulo, todas as variáveis locais e parâmetros (inclusive ponteiros) são desalocados automaticamente. 64

65 Dúvidas freqüentes: 2) ao encerrar um módulo, devo desalocar os ponteiros, empregando dispose? Não. >> no encerramento do módulo, todas as variáveis locais e parâmetros (inclusive ponteiros) são desalocados automaticamente. >> ao se utilizar dispose(r), é o objeto referenciado por r que será excluído. Não o ponteiro em si. 65

66 Dúvidas freqüentes: 3) quando se cria um objeto (comando new) empregando-se um ponteiro, só se pode empregar aquele ponteiro para desalocar aquele objeto? 66

67 Dúvidas freqüentes: 3) quando se cria um objeto (comando new) empregando-se um ponteiro, só se pode empregar aquele ponteiro para desalocar aquele objeto? Não. >> o nó não pertence ao ponteiro que foi empregado na sua criação. 67

68 Dúvidas freqüentes: 3) quando se cria um objeto (comando new) empregando-se um ponteiro, só se pode empregar aquele ponteiro para desalocar aquele objeto? Não. >> o nó não pertence ao ponteiro que foi empregado na sua criação. >> qualquer ponteiro que esteja apontando para certo objeto pode ser usado para a sua desalocação. 68

69 Dúvidas freqüentes: 4) ao empregar-se uma variável local (ponteiro) para alocar um objeto, esse objeto será também local, desaparecendo portanto após a execução daquele módulo? 69

70 Dúvidas freqüentes: 4) ao empregar-se uma variável local (ponteiro) para alocar um objeto, esse objeto será também local, desaparecendo portanto após a execução daquele módulo? Não. >> o objeto criado é alocado na área de memória denominada heap (área própria para alocação dinâmica). 70

71 Dúvidas freqüentes: 4) ao empregar-se uma variável local (ponteiro) para alocar um objeto, esse objeto será também local, desaparecendo portanto após a execução daquele módulo? Não. >> o objeto criado é alocado na área de memória denominada heap (área própria para alocação dinâmica). >> variáveis de heap não são nem globais nem locais. 71

72 Dúvidas freqüentes: Atente bem: Variáveis globais: seu tempo de vida é o intervalo de tempo de execução do programa. 72

73 Dúvidas freqüentes: Atente bem: Variáveis globais: seu tempo de vida é o intervalo de tempo de execução do programa. Variáveis locais: seu tempo de vida é o intervalo de execução do módulo onde foram declaradas. 73

74 Dúvidas freqüentes: Atente bem: Variáveis globais: seu tempo de vida é o intervalo de tempo de execução do programa. Variáveis locais: seu tempo de vida é o intervalo de execução do módulo onde foram declaradas. Variáveis de heap: seu tempo de vida é arbitrário, dependendo de uma criação (new) e da posterior desalocação. 74

75 Manuseio de listas encadeadas Para tratar de forma genérica todas as possíveis manipulações de uma lista encadeada, é definido um conjunto de rotinas. Exemplos: inserir/excluir um elemento no início inserir /excluir um elemento no final inserir /excluir um elemento na enésima posição calcular a soma dos elementos 75

76 Exemplo: inserir elemento V no final Duas situações a se considerar: Lista vazia Lista não vazia / p p / 76

77 Para lista vazia: Alocação de memória : p V 5 77

78 Para lista vazia: Alocação de memória V : 5? criar novo nó p 78

79 Para lista vazia: Alocação de memória : new(p); p V 5 79

80 Para lista vazia: Alocação de memória : new(p); p V 5 80

81 Para lista vazia: Alocação de memória V : 5 new(p);? guardar o valor de V p 81

82 Para lista vazia: Alocação de memória : new(p); p^.dado:=v; p V 5 82

83 Para lista vazia: Alocação de memória : new(p); p^.dado:=v; p V

84 Para lista vazia: Alocação de memória : new(p); p^.dado:=v;? caracterizar último nó p V

85 Para lista vazia: Alocação de memória : new(p); p^.dado:=v; p^.prox:=nil; p V

86 Para lista vazia: Alocação de memória : new(p); p^.dado:=v; p^.prox:=nil; p V 5 5 / 86

87 Para lista não vazia: p / 87

88 Para lista não vazia: p q / Condição facilitadora: fazer com que um ponteiro auxiliar aponte para o último nó 88

89 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; p q r V / 89

90 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; p q r V / 90

91 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; p q r V / 91

92 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; p q r V / 92

93 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; p q r V / 93

94 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; p q r V / 94

95 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox;? p q r V 5 criar novo nó / 95

96 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); p q r V / 96

97 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); p q r V / 97

98 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r);? p q r V 5 guardar o valor de V / 98

99 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; p q r V / 99

100 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; p q r V / 5 100

101 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v;? p q V 5 r caracterizar último nó / 5 101

102 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; r^prox:=nil; p q r V / 5 102

103 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; r^.prox:=nil; p q r V / 5 / 103

104 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; r^.prox:=nil;? p q r V 5 ligar nós / 5 / 104

105 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; r^.prox:=nil; q^.prox:=r; p q r V / 5 / 105

106 Alocação de memória : q:= p; while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; r^.prox:=nil; q^.prox:=r; p q V 5 r / 106

107 Juntando as duas situações {lista vazia} new(p); p^.dado:=v; p^.prox:=nil; {lista não vazia} while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; r^.prox:=nil; q^.prox:=r; 107

108 Juntando as duas situações {lista vazia} new(p); p^.dado:=v; p^.prox:=nil; observe as semelhanças {lista não vazia} while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; r^.prox:=nil; q^.prox:=r; 108

109 Juntando as duas situações {lista vazia} new(p); p^.dado:=v; p^.prox:=nil; observe as semelhanças {lista não vazia} while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; r^.prox:=nil; q^.prox:=r; 109

110 Juntando as duas situações {lista vazia} new(p); p^.dado:=v; p^.prox:=nil; observe as semelhanças {lista não vazia} while q^.prox <> nil do q:=q^.prox; new(r); r^.dado:=v; r^.prox:=nil; q^.prox:=r; 110

111 Juntando as duas situações procedure InsereNo(var p: tptno; V : tdado); var q,r: tptno; begin end; Como existe a possibilidade de p mudar seu conteúdo, ele é passado por referência. 111

112 Juntando as duas situações procedure InsereNo(var p: tptno; V : tdado); var q,r: tptno; begin new(r); r^.dado:=v; r^.prox:=nil; if p = nil then p:= r else begin q:= p; while q^.prox <> nil do q:=q^.prox; q^.prox:=r; end; end; 112

113 Listas duplamente encadeadas Nas listas duplamente encadeadas, os nós são ligados, não só aos posteriores, mas também aos anteriores p / / 113

114 Listas duplamente encadeadas Nas listas duplamente encadeadas, os nós são ligados, não só aos posteriores, mas também aos anteriores Portanto, a estrutura do nó deve possuir 2 ponteiros p / / 114

115 Listas duplamente encadeadas Nas listas duplamente encadeadas, os nós são ligados, não só aos posteriores, mas também aos anteriores Portanto, a estrutura do nó deve possuir 2 ponteiros não há nó anterior / p / 115

116 Listas duplamente encadeadas Nas listas duplamente encadeadas, os nós são ligados, não só aos posteriores, mas também aos anteriores Portanto, a estrutura do nó deve possuir 2 ponteiros não há nó anterior / p não há nó posterior... / 116

117 Listas duplamente encadeadas Estrutura: tdado = integer; { ou real, char, etc.} tptno = ^tno; tno = record Esq: tptno Dado: tdado; Dir: tptno; end; var p,q: tptno; p / / 117

118 Listas duplamente encadeadas Operações: Partindo-se das operações com listas de encadeamento simples, basta fazer alguns ajustes. p é necessário considerar que há dois ponteiros / / 118

119 Considere a rotina de inserção no final para encadeamento simples: procedure InsereNoFinal(var p:tptno; V: tdado); var q,r: tptno; begin new(r); r^.dado:=v; r^.prox:=nil; if p = nil then p:= r else begin q:= p; while q^.prox <> nil do q:=q^.prox; q^.prox:=r; end; end; 119

120 ajustes necessários: procedure InsereNoFinal(var p:tptno; V: tdado); var q,r: tptno; begin new(r); r^.dado:=v; r^.dir:=nil; if p = nil then begin p:= r; r^.esq:= nil; end; else begin q:= p; while q^.dir <> nil do q:=q^.dir; q^.dir:=r; r^.esq := q; end; end; 120

121 Exercícios (encadeamento simples e duplo): Construir módulos que façam as seguintes operações: 1- Inserir no início da lista; 2- Excluir o primeiro elemento; 3- Excluir o último elemento; 4- Inserir na enésima posição; 5- Excluir o enésimo nó; 6- Fornecer o tamanho da lista 7- Fornecer a soma dos elementos da lista. 121

122 Orientações 1- Sempre pla neje antes de codi fi car. a) faça um esquema visual do problema! -> use lápis e borracha, pois os ponteiros são dinâmicos 122

123 Orientações 1- Sempre pla neje antes de codi fi car. a) faça um esquema visual do problema! -> use lápis e borracha, pois os ponteiros são dinâmicos b) atenção especial à list a de parâme tros : quais são os parâmetros necessários, seus tipos, mecanismo de passagem (valor ou referência); 123

124 Orientações c) procure identificar co ndiçõe s fa ci li tadoras para a solução de um problema. Por exemplo, para excluir o enésimo nó, será necessário um ponteiro auxiliar apontando para ele. p q / 124

125 Orientações c) procure identificar co ndiçõe s fa ci li tadoras para a solução de um problema. Por exemplo, para excluir o enésimo nó, mas isso será necessário um ponteiro auxiliar será apontando para ele. suficiente?? p q / 125

126 Orientações Não. No processo de exclusão, p. ex., do nó que guarda o valor 8, será necessário encadear o anterior com o sucessor p q / 126

127 Orientações Portanto a condição facilitadora pede também um ponteiro para o nó anterior p r q / 127

128 Orientações Portanto a condição facilitadora pede também um ponteiro para o nó anterior Agora ficou simples p r q / 128

129 Orientações a identificação da condição facilitadora permite a divisão do problema em duas etapas, reduzindo-se a complexidade 129

130 Orientações 2 - Primeiramente, procure a solução para o caso mais geral. Depois considere as situações especiais 130

131 Orientações 2 - Primeiramente, procure a solução para o caso mais geral. Depois considere as situações especiais Ex: Inserir na enésima posição: raciocinar para lista não vazia e inserção no meio da lista. Depois considerar - e se a lista estiver vazia? - e se a posição for a primeira (ou a última)? Quando a solução geral não funcionar para esses casos, inserir o tratamento especial. 131

Tipos de Dados Dinâmicos

Tipos de Dados Dinâmicos Tipos de Dados Dinâmicos Manipular uma lista de nomes de alunos: como? Tipo de dados Registo com: nome notas de trabalhos assiduidade nota final Representação para a Lista???? MP II, 2006/2007 p.1/20 Hipótese

Leia mais

Ponteiro e lista dinâmica

Ponteiro e lista dinâmica UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br Prof. Yandre Maldonado - 2 Ponteiro é uma variável que

Leia mais

Alocação Dinâmica e Apontadores. Cláudio E. C. Campelo

Alocação Dinâmica e Apontadores. Cláudio E. C. Campelo Alocação Dinâmica e Apontadores Cláudio E. C. Campelo http://claudiocampelo.com Alocação Estática x Dinâmica Linguagens de programação como Pascal, C e C++ permitem dois tipos de alocação de memória: estática

Leia mais

Programação II. Aula 1

Programação II. Aula 1 Programação II Aula 1 Ponteiros Variáveis Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta Vinculação -> Por meio de ponteiros

Leia mais

Texto retirado e adaptado da apostila Curso de Linguagem Pascal, disponível no site (autor: desconhecido).

Texto retirado e adaptado da apostila Curso de Linguagem Pascal, disponível no site   (autor: desconhecido). Texto retirado e adaptado da apostila Curso de Linguagem Pascal, disponível no site http://www.portaldaprogramacao.com (autor: desconhecido). Leitura indicada: Notas de Aula de Algoritmos e Programação

Leia mais

Sumário. 1.1 Variáveis Globais e Locais Passagem de Parâmetro (por valor por referência) 1

Sumário. 1.1 Variáveis Globais e Locais Passagem de Parâmetro (por valor por referência) 1 Sumário Sobre as Autoras ix Introdução xi 1 Sub-rotinas 1 1.1 Variáveis Globais e Locais 1 1.2 Passagem de Parâmetro (por valor por referência) 1 2 Vetores e Matrizes 7 2.1 Vetores 7 2.2 Matrizes 8 2.2.1

Leia mais

Estrutura de Dados Polinómio

Estrutura de Dados Polinómio Estrutura de Dados Polinómio Estrutura de Dados: representação computacional + algorimos especializados Estrutura de Dados Polinómio P n (x) = nx a i x i i=0 Logo, Polinómio tem uma estrutura recorrente:

Leia mais

Variáveis. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Variáveis. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe Variáveis alberto@ufs.br de Programação Departamento de Computação Universidade Federal de Sergipe Variáveis Uma vez que o programador tenha entendido o uso de variáveis, ele entendeu a essência da programação.

Leia mais

Prof. Walteno Martins Parreira Júnior

Prof. Walteno Martins Parreira Júnior Licenciatura em Computação Algoritmos e Estrutura de Dados LISTAS LINEARES Prof. Walteno Martins Parreira Júnior www.waltenomartins.com.br waltenomartins@iftm.edu.br 2016 SUMÁRIO 1 - LISTAS LINEARES...

Leia mais

Professora Jeane Melo

Professora Jeane Melo Professora Jeane Melo Roteiro Lista Encadeada Alocação: Estática x Dinâmica O que são Ponteiros? Ponteiros Variáveis que Armazenam Endereços de Memória Mas, toda variável não é armazenada na memória? Ponteiros

Leia mais

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1 Estrutura de Dados Introdução a Ponteiros Prof. Gerson Borges Estrutura de Dados I 1 Sumário è Explicação da importância do planejamento de ensino; è Métodos e técnicas que iremos trabalhar durante o semestre;

Leia mais

Listas Lineares Duplamente Encadeada (LLDE)

Listas Lineares Duplamente Encadeada (LLDE) Listas Lineares Duplamente Encadeada (LLDE) Nas listas com descritores vistas anteriormente a operação de remoção do último nó apresenta a necessidade de percorrer os nós seqüencialmente, a partir do primeiro

Leia mais

Lista com descritor (continuação)

Lista com descritor (continuação) Lista com descritor (continuação) Rotina para remover o eiro elemento de uma LLSECD: char removeiniciollsecd(tdescritor *l, TInfo val) { p = l->; l->=p->prox; if (l->==1) Rotina para remover o último nó

Leia mais

Lista Encadeada (Linked List)

Lista Encadeada (Linked List) Lista Encadeada (Linked List) As listas ou listas encadeadas são a estrutura de dados mais simples concebível excetuando-se naturalmente os arrays. Listas encadeadas nada mais são que uma seqüência de

Leia mais

Árvores Binárias de Pesquisa (ABP) INF01203 Estruturas de Dados. Operações. Árvores Binárias de Pesquisa (ABP) Caminhamento Central à Esquerda

Árvores Binárias de Pesquisa (ABP) INF01203 Estruturas de Dados. Operações. Árvores Binárias de Pesquisa (ABP) Caminhamento Central à Esquerda Árvores Binárias de Pesquisa (ABP) INF03 Estruturas de Dados Árvores Binárias de Pesquisa apresentam uma relação de ordem entre os nodos ordem é definida por um campo denominado chave esq chave inf dir

Leia mais

Prof. Franklin Ramalho

Prof. Franklin Ramalho PLP - Armazenamento (Parte I) Prof. Franklin Ramalho Universidade Federal de Campina Grande - UFCG Agenda - Variáveis Primitivas - Variáveis Compostas - Modelo de Armazenamento - Ciclo de vida de variáveis

Leia mais

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco PONTEIROS E LISTAS Kalinka Regina Lucas Jaquie Castelo Branco kalinka@icmc.usp.br ALOCAÇÃO DINÂMICA DE MEMÓRIA Pode-se assumir que as variáveis declaradas na cláusula variável do pseudo-código do algoritmo

Leia mais

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string Pascal -Cabeçalho do programa Áreas do programa -Área de declarações -Corpo do programa - label - const - type - var - procedure - function - integer - real - byte - boolean - char - string Program

Leia mais

1: unit ArvAVL; 2: { Unit que implementa uma arvore AVL } 3: interface 4: 5: type 6: Tipo_da_Chave = longint; 7: Tipo_do_Dado = record 8: Chave :

1: unit ArvAVL; 2: { Unit que implementa uma arvore AVL } 3: interface 4: 5: type 6: Tipo_da_Chave = longint; 7: Tipo_do_Dado = record 8: Chave : 1: unit ArvAVL; 2: { Unit que implementa uma arvore AVL } 3: interface 4: 5: type 6: Tipo_da_Chave = longint; 7: Tipo_do_Dado = record 8: Chave : Tipo_da_Chave; 9: Nome : string; 10: { Outras informacoes

Leia mais

ANHANGUERA ESTRUTURA DE DADOS AULA 04 MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA. Prof. Thomás da Costa

ANHANGUERA ESTRUTURA DE DADOS AULA 04 MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA. Prof. Thomás da Costa ANHANGUERA 2015.2 ESTRUTURA DE DADOS AULA 04 Prof. Thomás da Costa thomascosta@aedu.com O que é: Matrizes São vetores que possuem duas ou mais dimensões para armazenar valores. Uma matriz de duas dimensões,

Leia mais

Lista Ligada Linear - Retirar elemento

Lista Ligada Linear - Retirar elemento Lista Ligada Linear - Retirar elemento Pretende-se retirar o elemento com valor h da lista: Para isso é necessário modificar o valor do ponteiro para a caixa anterior à do elemento a ser retirado da lista:

Leia mais

FERRAMENTAS BÁSICAS DA PROGRAMAÇÃO

FERRAMENTAS BÁSICAS DA PROGRAMAÇÃO FERRAMENTAS BÁSICAS DA PROGRAMAÇÃO VARIÁVEIS E O COMANDO DE ATRIBUIÇÃO O computador possui uma área específica de armazenamento denominada de memória. O computador possui uma área específica de armazenamento

Leia mais

Estruturas de Dados I

Estruturas de Dados I Estruturas de Dados I Rodrigo Porfírio da Silva Sacchi rodrigosacchi@ufgd.edu.br 3410-2075 Aula 6: Listas Encadeadas e Alocação Dinâmica Listas Encadeadas e Alocação Dinâmica Alocação Seqüencial versus

Leia mais

Análise Semântica e Tratamento de Erros Dependentes de Contexto

Análise Semântica e Tratamento de Erros Dependentes de Contexto Análise Semântica e Tratamento de Erros Dependentes de Contexto O componente Semântico de uma LP Tarefas da Análise Semântica Implementação da Tabelas de Símbolos Ações Semânticas em Compiladores Dirigidos

Leia mais

Tipos Abstratos de Dados. Estrutura de Dados

Tipos Abstratos de Dados. Estrutura de Dados Tipos Abstratos de Dados Tipo Abstrato de Dados ou TAD Idéia principal: desvincular o tipo de dado (valores e operações) de sua implementação: O que o tipo faz e não como ele faz! Vantagens da desvinculação:

Leia mais

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas SCC-502 Algoritmos e Estruturas de Dados I Prof. Thiago A. S. Pardo Lista com nó de cabeçalho Nó de cabeçalho Header, sentinela, etc.

Leia mais

Alocação e Gerência de Memória: APONTADORES

Alocação e Gerência de Memória: APONTADORES Processamento Usuário Alocação e Gerência de Memória: APONTADORES Fonte ompilador Objeto Linkeditor Módulo arga Tempo de compilação Tempo de arga arregador Memória Tempo de Execução Memória Principal:

Leia mais

Estrutura de dados 1. Ponteiros

Estrutura de dados 1. Ponteiros Estrutura de dados 1 Ponteiros Ponteiros Um ponteiro é um endereço de memória O valor de um ponteiro indica onde uma variável está armazenada Um ponteiro proporciona um modo de acesso a uma variável sem

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação

Leia mais

O AMBIENTE DE PROGRAMAÇÃO VISUAL -PLANO DE ENSINO. Prof. Angelo Augusto Frozza, M.Sc.

O AMBIENTE DE PROGRAMAÇÃO VISUAL -PLANO DE ENSINO. Prof. Angelo Augusto Frozza, M.Sc. O AMBIENTE DE PROGRAMAÇÃO VISUAL -PLANO DE ENSINO Prof. Angelo Augusto Frozza, M.Sc. ROTEIRO 1. A linguagem de programação Object Pascal a) Palavras reservadas b) Tipos de dados, variáveis e constantes

Leia mais

Listas Lineares. continuando...

Listas Lineares. continuando... Listas Lineares continuando... 1 Listas! relembrando: listas lineares agrupa informações referentes aum conjunto de elementos que, de alguma forma, se relacionam entre si! Uma lista linear ou está vazia,

Leia mais

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Ponteiros Alocação dinâmica de memória Recursão INSTITUTO DE COMPUTAÇÃO - UFF 2 PONTEIROS PONTEIROS C permite o armazenamento

Leia mais

Agregado Homogêneo e Heterogêneo

Agregado Homogêneo e Heterogêneo Universidade Estadual de Maringá - UEM Centro de Tecnologia - CTC Departamento de Informática - DIN Fundamentos da Computação Agregado Homogêneo e Heterogêneo Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado

Leia mais

Aula 10 Alocação Dinâmica de Memória Listas Encadeadas. prof Leticia Winkler

Aula 10 Alocação Dinâmica de Memória Listas Encadeadas. prof Leticia Winkler Aula 10 Alocação Dinâmica de Memória Listas Encadeadas prof Leticia Winkler 1 Prof. Leticia Winkler 2 Alocação de Memória Reservar na memória (principal), o espaço para guardar a informação através da

Leia mais

Ponteiros. Introdução

Ponteiros. Introdução Ponteiros Introdução Conceito Um PONTEIRO ou APONTADOR é uma variável usada para armazenar um endereço de memória. Normalmente, o endereço armazenado em um PONTEIRO é a posição de uma outra variável na

Leia mais

O que é uma variável?

O que é uma variável? Escopo, Ligação e Ambiente de Execução mleal@inf.puc-rio.br 1 O que é uma variável? Uma variável pode ser definida como uma tupla r nome é um string usado para

Leia mais

8. ÁRVORES ÁRVORES Niv 1 Niv 2 Niv 3 Niv 4. Até Introdução

8. ÁRVORES ÁRVORES Niv 1 Niv 2 Niv 3 Niv 4. Até Introdução 8. ÁRVORES Até... 8.1 Introdução ÁRVORES Formas de Armazenamento: Árvores Estáticas: Type Tipo_Árvore = Array[1..Max] of Tipo_Dado; Por exemplo : árvore de grau 3. P 5 7 9 0 3 8 2 5 2 5 7 9 0 3-1 -1 8

Leia mais

Introdução à Ciência da Computação

Introdução à Ciência da Computação Introdução à Ciência da Computação Variáveis Conceitos Básicos Variáveis x Constantes a = x + 5 a, x e 5 são variáveis ou constantes? Variáveis As variáveis são recipientes de valores É um espaço reservado

Leia mais

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM. Teoria da Computação e Algoritmos Introdução à Linguagem Pascal 1 Estrutura de um programa INÍCIO FIM. PROGRAM END.

Leia mais

Listas - Outras. Listas Circulares Nós Cabeça Listas Duplamente Ligadas/Encadeadas Aplicações

Listas - Outras. Listas Circulares Nós Cabeça Listas Duplamente Ligadas/Encadeadas Aplicações Listas - Outras Listas Circulares Nós Cabeça Listas Duplamente Ligadas/Encadeadas Aplicações 5 e 7/10/2010 Listas Circulares Encadeadas Dinâmicas Se o nó next do último nó apontar para o primeiro, teremos

Leia mais

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Lista de Exercícios sobre Listas Implementadas por Encadeamento Lista de Exercícios sobre Listas Implementadas por Encadeamento 1) Se você tem de escolher entre uma representação por lista encadeada ou uma representação usando posições contíguas de memória para um

Leia mais

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio;

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio; UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio; e-mail: sandra@icmc.usp.br Lista de Exercícios Árvores, Árvores Binárias, Árvores

Leia mais

Ponteiros. Introdução e Alocação Dinâmica

Ponteiros. Introdução e Alocação Dinâmica Ponteiros Introdução e Alocação Dinâmica Conceito Um PONTEIRO ou APONTADOR é uma variável usada para armazenar um endereço de memória. Normalmente, o endereço armazenado em um PONTEIRO é a posição de uma

Leia mais

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto Programação I Ponteiros e alocação dinâmica de memória Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br Ponteiros O ponteiro é um tipo de dado como int, char ou float; Variáveis

Leia mais

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes? Introdução à Ciência da Computação Ponteiros em C Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros

Leia mais

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Não-terminais são nomes mnemônicos colocados entre parênteses angulares. Vocabulário terminal formado por

Leia mais

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri Unidade VI Técnicas de Teste de Software Profa. Dra. Sandra Fabbri Os requisitos de teste são extraídos de uma implementação em particular Teste dos detalhes procedimentais A maioria dos critérios dessa

Leia mais

11a. Aula Ponteiros e Vetores

11a. Aula Ponteiros e Vetores 11a. Aula Ponteiros e Vetores 2013.2 2 É um tipo de variável com uma ressalva...... armazena apenasendereçode memória (ou null) Se eu tiver o endereço da casa de Francisca, eu poderei visitá-la e lhe fazer

Leia mais

Tipos e Estruturas de Dados Profa. Graça Nunes Lista de Exercícios (Listas Encadeadas, Duplamente Encadeadas e Circulares)

Tipos e Estruturas de Dados Profa. Graça Nunes Lista de Exercícios (Listas Encadeadas, Duplamente Encadeadas e Circulares) Tipos e Estruturas de Dados Profa. Graça Nunes Lista de Exercícios (Listas Encadeadas, Duplamente Encadeadas e Circulares) 1. Refaça todos os itens do exercício 1 da Lista de Exercícios anterior (Listas

Leia mais

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho Gilson de Souza Carvalho gaucho.gilson@hotmail.com 3.1.3 Condições compostas Linguagem e Técnicas em Programação As condições que vimos até agora sempre foram únicas. Entretanto, conforme aumenta a complexidade

Leia mais

Lista de Exercícios 04

Lista de Exercícios 04 Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM Disciplina: BCC202 - Estruturas de Dados I Professor: Túlio Toffolo (www.decom.ufop.br/toffolo)

Leia mais

SCC Algoritmos e Estruturas de Dados I

SCC Algoritmos e Estruturas de Dados I SCC 202 - Algoritmos e Estruturas de Dados I Lista 4 de Exercícios (Listas Generalizadas, Listas Cruzadas) 1. Sobre listas generalizadas, responda os seguintes itens: (a) Quais suas vantagens? (b) Quais

Leia mais

Agregado Homogêneo e Heterogêneo. Agregado Homogêneo. Agregado Homogêneo 28/11/2015

Agregado Homogêneo e Heterogêneo. Agregado Homogêneo. Agregado Homogêneo 28/11/2015 8//0 Universidade Estadual de Maringá - UEM Centro de Tecnologia - CTC Departamento de Informática - DIN Fundamentos da Computação e Heterogêneo Prof. Yandre Maldonado - Prof. Yandre Maldonado e Gomes

Leia mais

Estrutura de Dados Listas

Estrutura de Dados Listas Universidade Federal da Paraíba Centro de Informática Departamento de Informática Estrutura de Dados Listas 1 Tiago Maritan tiago@ci.ufpb.br Conteúdos Abordados O Conceito de Listas Listas com Representação

Leia mais

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática Programação 1I Prof. Osório Listas simplesmente encadeadas Pag.: 1 - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática Programação II Disciplina:

Leia mais

Compiladores. Gerência de Memória

Compiladores. Gerência de Memória Compiladores Gerência de Memória Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Arquivo de destino Análise Otimização Geração de Código Intermediário Geração de Código Final Síntese

Leia mais

CAP. VI ANÁLISE SEMÂNTICA

CAP. VI ANÁLISE SEMÂNTICA CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve

Leia mais

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Computadores Digitais 2. Prof. Rodrigo de Souza Couto Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Tópicos Listas Encadeadas Introdução às listas encadeadas Manipulação de elementos Implementações recursivas Listas

Leia mais

x=0; y=x+1; x=&y+2; x 1000 y 1004

x=0; y=x+1; x=&y+2; x 1000 y 1004 Variáveis Conceitos São alocadas em memória; Elas ocupam uma quantidade de btes que depende do tipo da variável; Esses btes são alocados de forma contígua na memória; O valor de uma variável corresponde

Leia mais

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1 INF1007: Programação 2 8 Listas Encadeadas (c) Dept. Informática - PUC-Rio 1 Tópicos Principais Motivação Listas encadeadas Implementações recursivas Listas de tipos estruturados (c) Dept. Informática

Leia mais

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/54

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/54 BCC 201 - Introdução à Programação I Ponteiros Guillermo Cámara-Chávez UFOP 1/54 Ponteiros... I i n t main ( ) { i n t x ; x = 10 cout

Leia mais

FACCAT Sistemas de Informação. Estruturas de Dados

FACCAT Sistemas de Informação. Estruturas de Dados FACCAT Sistemas de Informação Estruturas de Dados Aula 1 http://professores.faccat.br/azambuja (Estrutura de Dados) Definição de variáveis Podemos imaginar uma variável como o local onde se pode colocar

Leia mais

Estrutura de Dados. Aula 07 Alocação Dinâmica

Estrutura de Dados. Aula 07 Alocação Dinâmica Estrutura de Dados Aula 07 Alocação Dinâmica 2 ALOCAÇÃO DINÂMICA Existem três modos de reservar espaço de memória para o armazenamento de informações: 1ª - através do uso de variáveis globais (e estáticas).

Leia mais

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/61

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/61 BCC 201 - Introdução à Programação I Ponteiros Guillermo Cámara-Chávez UFOP 1/61 Ponteiros... I i n t main ( ) { i n t x ; x = 10 p r i n t f ( " Conteudo de x: %d \n", x ) ; p r i n t f ( " Endereco de

Leia mais

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ Ponteiros em C Adriano Joaquim de Oliveira Cruz 21 de julho de 2017 Instituto de Matemática Departamento de Ciência da Computação UFRJ 1 Resumo da Seção Introdução Declaração Incrementando e Decrementando

Leia mais

Alocação Dinâmica de Memória

Alocação Dinâmica de Memória Alocação Dinâmica de Memória Elerson R. S. Santos elerson@dcc.ufmg.br Algoritmos e Estruturas de DCC UFMG Variáveis Uma variável representa um nome simbólico para uma posição de memória. Cada posição de

Leia mais

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas. SCC-502 Algoritmos e Estruturas de Dados I

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas. SCC-502 Algoritmos e Estruturas de Dados I Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas SCC-502 Algoritmos e Estruturas de Dados I Lista com nó de cabeçalho Nó de cabeçalho Header, sentinela, etc. Para que? Sentinela Beth

Leia mais

Tipos. O Conceito de Tipo

Tipos. O Conceito de Tipo Tipos mleal@inf.puc-rio.br 1 O Conceito de Tipo LPs geralmente permitem a organização de dados em diferentes categorias através do conceito de tipo. Um tipo é definido a partir de um conjunto de valores

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Paradigma Imperativo Matheus Hafner Tiago Xavier CET 087 - Conceitos de Linguagens de Programação (CLP) 10 de novembro de 2011 Sumário 1 Introdução 2 Paradigma imperativo Modelo

Leia mais

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR) Alocação de Memória Linguagem de Programação Estruturada 1 Alocação dinâmica e ponteiros Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR) Sumario Introdução Alocação Estática

Leia mais

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra CES-11 Algoritmos e Estruturas de Dados Carlos Alberto Alonso Sanches Juliana de Melo Bezerra CES-11 Revisão Tipos escalares primitivos Tipos constituídos de uma linguagem Ponteiros Alocação estática versus

Leia mais

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler Aula 14 Listas Duplamente Encadeadas prof Leticia Winkler 1 Lista Duplamente Encadeada É um tipo de lista encadeada que pode ser vazia (NULL) ou que pode ter um ou mais nós, sendo que cada nó possui dois

Leia mais

Linguagem C Ponteiros

Linguagem C Ponteiros Linguagem C Ponteiros Instituto Federal de Educação, Ciência e Tecnologia do Triângulo Mineiro Prof. Edwar Saliba Júnior Janeiro de 2018 Unidade 14 Linguagem C - Ponteiros 1/24 Identificadores e Endereços

Leia mais

Estrutura de Dados. Ricardo José Cabeça de Souza Parte 9

Estrutura de Dados. Ricardo José Cabeça de Souza  Parte 9 Estrutura de Dados Ricardo José Cabeça de Souza www.ricardojcsouza.com.br Parte 9 VETOR Ao declararmos um vetor, reservamos um espaço contíguo de memória para armazenar seus elementos Vetor não é uma estrutura

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA Revisão CES-11 Tipos escalares primitivos Tipos constituídos

Leia mais

Construção de Algoritmos II Aula 04

Construção de Algoritmos II Aula 04 exatasfepi.com.br Construção de Algoritmos II Aula 04 André Luís Duarte Porque mil anos são aos teus olhos como o dia de ontem que passou, e como a vigília da noite. Salmos 90:4 Arquivos Declaração de

Leia mais

Módulo 10 Listas Encadeadas

Módulo 10 Listas Encadeadas Estruturas de Dados Módulo 10 Listas Encadeadas 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus

Leia mais

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Programação Estruturada Prof. Rodrigo Hausen  Organização e Gerenciamento de Memória Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];

Leia mais

Programação Estruturada Prof. Rodrigo Hausen Ponteiros e Passagem de Parâmetros

Programação Estruturada Prof. Rodrigo Hausen   Ponteiros e Passagem de Parâmetros Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Ponteiros e Passagem de Parâmetros 1 AULA PASSADA - ponteiros Uma declaração tal como: tipo *nome; Declara um ponteiro: referência

Leia mais

Introdução a Programação. Listas Encadeadas

Introdução a Programação. Listas Encadeadas Introdução a Programação Listas Encadeadas Tópicos da Aula Hoje aprenderemos que existem, além de vetores, estruturas de dados dinâmicas que podem armazenar coleções de dados Estruturas Dinâmicas e Vetores

Leia mais

Estruturas de Dados Básicas

Estruturas de Dados Básicas Estruturas de Dados Básicas Última alteração: 30 de Agosto de 2010 Slides elaborados por Charles Ornelas Almeida, Israel Guerra e Nivio Ziviani Projeto de Algoritmos Cap.3 Estruturas de Dados Básicas 1

Leia mais

x=0; y=x+1; x=&y+2; x 1000 y 1004

x=0; y=x+1; x=&y+2; x 1000 y 1004 Variáveis Conceitos São alocadas em memória; Elas ocupam uma quantidade de btes que depende do tipo da variável; Esses btes são alocados de forma contígua na memória; O valor de uma variável corresponde

Leia mais

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18 ÍNDICE MÓDULO 1 INTRODUÇÃO À ALGORITMIA 11 1.1 PROGRAMAS E ALGORITMOS 12 Fases da programação 12 Algoritmos e algoritmia 13 Algoritmos em linguagem informal, pseudocódigo e fluxogramas 14 Símbolos utilizados

Leia mais

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final)

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final) Algoritmos e Programação Informática II Ciência da Computação Prof. Dr. Leandro Alves Neves Aula 10 1 Sumário Estruturas de Controle de Fluxo q Repetição Enquanto (Teste no início) Repeat (Teste no final)

Leia mais

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória ALGORITMOS E ESRUTRA DE DADOS I Ponteiros Passagem por Valor e Referência Alocação de Memória 2 Agenda Ponteiros Conceitos gerais O que é Ponteiro? Declaração de Ponteiros Operadores para Ponteiros Exemplos

Leia mais

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira Linguagem C: Ponteiros 1 Sumário Ponteiros; Variáveis ponteiros; Operadores de ponteiros; Expressões com ponteiros; Atribuição de ponteiros; Aritmética de ponteiros; Comparação de ponteiros; Ponteiros

Leia mais

AULA 04. Ocupação Circular Listas com Descritor

AULA 04. Ocupação Circular Listas com Descritor AULA 04 Ocupação Circular Listas com Descritor Ocupação Circular Ocupação circular Final da LL Início da LL X 1 2 3 4 5 6 7 8 9 10 11 12 13 Ocupação circular utilizando parte do arranjo Final da LL Início

Leia mais

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio Programação II Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio Vetores vs Estruturas Dinâmicas Vetores (arrays): Ocupa um espaço contíguo de memória Permite acesso randômico

Leia mais

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática Programação 1 Prof. Osório Aula 09 Pag.: 1 UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática PROGRAMAÇÃO I AULA 09 Disciplina: Linguagem

Leia mais

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal Exercício Crie uma função que recebe o número de dias até um determinado evento e calcula e retorna o equivalente em meses, semanas e dias, sem usar vetor ou o conceito de vetor. Considerar que todos os

Leia mais

Linguagem de programação: Pascal

Linguagem de programação: Pascal Aula 04 Linguagem de programação: Pascal Prof. Tecgº Flávio Murilo 26/03/2013 1 Pascal Introdução Pascal é uma linguagem de programação estruturada, criada em 1970 pelo suíço Niklaus Wirth, dando este

Leia mais

LINGUAGEM C: PONTEIROS

LINGUAGEM C: PONTEIROS LINGUAGEM C: PONTEIROS Prof. André Backes DEFINIÇÃO Variável É um espaço reservado de memória usado para guardar um valor que pode ser modificado pelo programa; Ponteiro É um espaço reservado de memória

Leia mais

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1 Linguagem C: Ponteiros Prof. Leonardo Barreto Campos 1 Sumário Ponteiros; Variáveis ponteiros; Operadores de ponteiros; Expressões com ponteiros; Atribuição de ponteiros; Aritmética de ponteiros; Comparação

Leia mais

Linguagem Pascal. Prof. Jonatas Bastos Site:

Linguagem Pascal. Prof. Jonatas Bastos   Site: Linguagem Pascal Prof. Jonatas Bastos Email: jonatasfbastos@gmail.com Site: http://jonatasfbastos.wordpress.com/ 1 Linguagem Pascal Foi desenvolvida pelo prof. Niklaus Wirth como uma linguagem simples

Leia mais

= = = = = = = = = = = = = = = =

= = = = = = = = = = = = = = = = Página 1 de 7 A Linguagem PASCAL = = = = = = = = = = = = = = = = 1) ALFABETO: são os símbolos (ié, caracteres ) permitidos na linguagem. São as letras (maiúsculas e minúsculas), os algarismos (ou dígitos)

Leia mais

Linguagem de Programação

Linguagem de Programação Linguagem de Programação Aula 9 Tipos Estruturados (Parte 2) Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Técnico em Informática Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno

Leia mais

Universidade de São Paulo

Universidade de São Paulo Universidade de São Paulo Instituto de Ciências Matemáticas e Computação SCE5763 - Tipos e Estrutura de Dados - Luis Gustavo Nonato 2 a Lista de Exercícios 1. Seja A um array de inteiros. Escreva algoritmos

Leia mais

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Aula 11 Pilha Dinâmica. prof Leticia Winkler Aula 11 Pilha Dinâmica prof Leticia Winkler 1 Pilha Dinâmica (Dynamic Stack) Pilha implementada através de uma lista linear encadeada. É uma lista linear encadeada em que as operações de inserção e retirada

Leia mais

Capítulo V : Um Tipo Estruturado de Dados: o array

Capítulo V : Um Tipo Estruturado de Dados: o array Capítulo V : A Linguagem Pascal Um Tipo Estruturado de Dados: o array 1 _ Capítulo V : Um Tipo Estruturado de Dados: o array Ex1: Vector, Variável com um índice, Tabela unidimensional. var x : array [0..7]

Leia mais

Programando o Computador com PascaL: um ambiente para Auto-Aprendizagem.

Programando o Computador com PascaL: um ambiente para Auto-Aprendizagem. Programando o Computador com PascaL: um ambiente para Auto-Aprendizagem. Resolução dos desafios propostos no Capítulo 8 Resolução do Desafio 8.1 Resolução do Desafio 8.2 Fórmulas usadas na planilha: Para

Leia mais