Material didático para conceituar e implementar pilhas usando alocação estática sequencial
MarceloDuduchi
3 views
119 slides
Sep 15, 2025
Slide 1 of 119
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
About This Presentation
Material didático usado para ensinar o conceito de pilhas como listas restritas e apresentar possível implementação de pilhas usando memória estática sequencial em Linguagem Pascal. O material começa conceituando listas lineares, apresenta o modelo conceitual de pilhas e uma representação g...
Material didático usado para ensinar o conceito de pilhas como listas restritas e apresentar possível implementação de pilhas usando memória estática sequencial em Linguagem Pascal. O material começa conceituando listas lineares, apresenta o modelo conceitual de pilhas e uma representação gráfica, discute a implementação usando alocação estática sequencial e apresenta ainda algumas aplicações. A implementação é feita com comandos básicos da linguagem Pascal com o objetivo de facilitar a aprendizagem.
Size: 1.7 MB
Language: pt
Added: Sep 15, 2025
Slides: 119 pages
Slide Content
Estruturas de Dados ► Pilhas (Linguagem Pascal ) Prof. Dr. Marcelo Duduchi Aux. Docente Lucio Nunes
Estruturas de Dados Ao implementarmos programas de computador estamos de certa forma tentando representar o mundo real pela computação; Os dados a serem processados no computador representam uma abstração de parte da realidade na medida em que representam características selecionadas das entidades do mundo real; 2
Estruturas de Dados A forma segundo a qual os bits são agrupados, interpretados e manipulados pelo computador normalmente não nos interessa quando a nossa preocupação maior é resolver um problema específico; Felizmente, as linguagens atuais oferecem um conjunto básico de tipos de dados primitivos (inteiros, reais, caractere, booleano etc.) que podemos usar nas soluções de problemas; Da mesma forma, temos mecanismos que permitem criar agrupamentos complexos de dados a partir desses tipos primitivos; 3
Estruturas de Dados Para representar o mundo computacionalmente é necessário modelar; É neste particular que o conceito de tipos abstratos de dados passa a ser muito importante para a computação; Um tipo abstrato de dados é formado por: Um conjunto de valores; Uma série de funções que podem ser aplicadas a estes valores. O modelo usado para representar a solução de uma classe de problemas podemos chamar de estrutura de dados ; 4
Estruturas de Dados O estudo das estruturas de dados envolve dois objetivos básicos: Teórico: Identificar e desenvolver modelos, determinando que classes de problemas podem resolver; Prático: Criar representações concretas dos objetivos e desenvolver sub-rotinas capazes de atuar como representações. 5
Listas Lineares Uma lista é uma coleção de elementos do mesmo tipo dispostos linearmente que podem ou não seguir uma determinada organização; Exemplo: [E 1 , E 2 , E 3 , ..., E n ], onde n ≥ 0 ; Uma lista de pagamentos pode ser constituída por: prestação do carro, cartão de crédito, conta de luz, condomínio, televisão a cabo e prestação do crediário; 6
Listas Lineares Para a representação de alguns modelos do mundo real é necessário limitar o funcionamento das listas lineares; É neste contexto que surgem as listas lineares restritas. As mais utilizadas são: Pilhas e Filas. 7
Pilhas Uma lista linear onde tanto a entrada quanto a saída precisa ser feita pela mesma extremidade é conhecida como pilha; Neste caso o último elemento que entrar é o primeiro a sair ( Last In First Out ); Existem duas funções que se aplicam a todas as pilhas: PUSH : insere o item no topo da pilha; POP : remove o item d o topo da pilha. 8
Pilhas (modelo conceitual) 9 Novos elementos são armazenados no topo da pilha. PILHA A
Pilhas (modelo conceitual) Push 10 Novos elementos são armazenados no topo da pilha. PILHA A
Pilhas (modelo conceitual) 11 Novos elementos são armazenados no topo da pilha. PILHA B A
Pilhas (modelo conceitual) Push 12 Novos elementos são armazenados no topo da pilha. PILHA A B
Pilhas (modelo conceitual) 13 Novos elementos são armazenados no topo da pilha. PILHA C A B
Pilhas (modelo conceitual) Push 14 Novos elementos são armazenados no topo da pilha. PILHA A B C
Pilhas (modelo conceitual) 15 Novos elementos são armazenados no topo da pilha. PILHA D A B C
Pilhas (modelo conceitual) Push 16 Novos elementos são armazenados no topo da pilha. PILHA A B C D
Pilhas (modelo conceitual) 17 A B C D Sequência armazenada em pilha. PILHA
Pilhas (modelo conceitual) Pop 18 A B C D O último elemento que entrou será o primeiro a sair ( LIFO ). PILHA
Pilhas (modelo conceitual) Pop 19 A B C O último elemento que entrou será o primeiro a sair ( LIFO ). PILHA
Pilhas (modelo conceitual) Pop 20 A B O último elemento que entrou será o primeiro a sair ( LIFO ). PILHA
Pilhas (modelo conceitual) Pop 21 A O último elemento que entrou será o primeiro a sair ( LIFO ). PILHA
Pilhas (representação gráfica) 22 D push (pilha, ‘D’); Topo → D p op(pilha); Topo → A p ush (pilha, ‘A’); Topo → V A p ush (pilha, ‘V’); Topo → V A pop(pilha); Topo → B A push (pilha, ‘B’); Topo → D A B V D V
Pilhas (representação gráfica) 23 G B A p ush (pilha, ‘G’); Topo → H G B A p ush (pilha, ‘H’); Topo → H G B A p op(pilha); Topo → G B A p op(pilha); Topo → B A p op(pilha); Topo → A p op(pilha); Topo → H G H G B A
Pilhas (implementação) Consideremos para a nossa implementação um grupo de operações: c reate → inicializa a pilha d estroy → esvazia a pilha isfull → verifica se está cheia isempty → verifica se está vazia p ush → insere um elemento p op → retira um elemento t op → mostra o elemento do topo 24
Pilhas (definição da estrutura) 25 type TPilha = record vet : array [ 1 .. 6 ] of char ; topo : integer ; end ; TPilha vet topo 1 2 3 4 5 6
Pilhas ( c reate , d estroy , isfull e isempty ) 26 procedure create ( var p : TPilha ); begin p . topo := ; end ; procedure destroy ( var p : TPilha ); begin p . topo := ; end ; function isfull ( var p : TPilha ): boolean ; begin if p . topo = 6 then isfull := true else isfull := false ; end ; function isempty ( var p : TPilha ): boolean ; begin if p . topo = then isempty := true else isempty := false ; end ;
Pilhas ( isfull e isempty ) 27 function isfull ( var p : TPilha ): boolean ; begin isfull := p . topo = 6 ; end ; function isempty ( var p : TPilha ): boolean ; begin isempty := p . topo = ; end ; SEGUNDA VERSÃO
function pop ( var p : TPilha ): char ; var aux : char ; begin if isempty ( p ) t hen begin writeln ( ' underflow ' ); halt ; end ; aux := p . vet [ p . topo ]; p . topo := p . topo - 1 ; pop := aux ; end ; Pilhas ( p ush e p op ) 28 procedure p ush ( var p : TPilha ; x : char ); begin if isfull ( p ) t hen begin writeln ( 'overflow' ); halt ; end ; p . topo := p . topo + 1 ; p . vet [ p . topo ] := x ; end ;
Pilhas ( top ) 29 f unction top ( var p : TPilha ): char ; begin if isempty ( p ) t hen begin w riteln ( ' underflow ' ); h alt ; end ; top := p . vet [ p . topo ]; end ;
Pilhas (exemplo de utilização) 30 procedure inverte ( var s : string ); var i, tam : integer ; p : TPilha ; begin create ( p ); i := 1 ; tam := length ( s ); while not isfull ( p ) and ( i <= tam ) do begin push ( p , s [ i ]); i := i + 1 ; end ; s := '' ; while not isempty ( p ) do s := s + pop ( p ); end ; Roma amoR a m o R
Pilhas (aplicações) Pilha de chamada de rotinas: Caso seja uma chamada, colocar o endereço da próxima instrução na pilha, executando a rotina chamada; Caso seja um “retorne”, retirar um endereço da pilha, passando a executá-lo. 31