0% acharam este documento útil (0 voto)
79 visualizações46 páginas

Filas e Pilhas em C: Aula Prática

Este documento apresenta exemplos práticos de implementação de filas e pilhas em C usando estruturas de dados sequenciais estáticas e dinâmicas encadeadas. É mostrado como definir os tipos, criar, inserir e remover elementos, e verificar se as estruturas estão cheias ou vazias. Referências bibliográficas sobre o tema também são fornecidas.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
79 visualizações46 páginas

Filas e Pilhas em C: Aula Prática

Este documento apresenta exemplos práticos de implementação de filas e pilhas em C usando estruturas de dados sequenciais estáticas e dinâmicas encadeadas. É mostrado como definir os tipos, criar, inserir e remover elementos, e verificar se as estruturas estão cheias ou vazias. Referências bibliográficas sobre o tema também são fornecidas.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd

/39

1/45


MCTA028-15: Programação Estruturada

Aula 10: Filas e Pilhas (Prática)

Francisco de Assis Zampirolli e Wagner Tanaka Botelho


[email protected] / [email protected] / [email protected]
Universidade Federal do ABC (UFABC)
Centro de Matemática, Computação e Cognição (CMCC)
2/46

Fila Sequencial Estática


3/46

Definindo o Tipo
Ex_1.c
4/46

Fila *fi;
qtd início fim
4 0 4

num 45 5 4 12
0 1 2 3 tamArray-1
5/46

Criando a Fila
6/46

qtd início fim


0 0 0
Fila *fi;
num
0 1 2 3 tamArray-1
7/46

Liberando a Fila
8/46

X
qtd início fim
0 0 0
Fila *fi;
num
0 1 2 3 tamArray-1
9/46

Tamanho e Fila Cheia/Vazia


10/46

qtd início fim


4 0 4 tam = fi->qtd;

qtd início fim


num 65 4 12 33
0 2 2 Fila Vazia:
0 1 2 3 tamArray-1 fi->qtd == 0

qtd início fim num


5 2 2 Fila Cheia: 0 1 2 3 tamArray-1
fi->qtd == tamArray
num 55 4 12 33 5
0 1 2 3 tamArray-1
11/46

Inserir e Remover um Elemento


A INSERÇÃO NA FILA É SEMPRE NO FINAL!!! 12/46

qtd início fim


insere_fila (pFila, 12); 3
2 0 32
fi->num[2]=12
fi->fim = 3
fi->qtd = 3 num 4 65 12
0 1 2 3 tamArray-1

A REMOÇÃO NA FILA É SEMPRE NO INÍCIO!!!


qtd início fim
remove_Fila (pFila); 23 1
0 3
fi->inicio = 1
fi->qtd-- = 2
num 4 65 12
O início da fila fica com um número. 0 1 2 3 tamArray-1
Entretanto, a posição é considerada
NÃO ocupada por elementos na fila.
13/46

Fila Dinâmica Encadeada


14/46

Definindo o Tipo
Ex_2.c 15/46

pro
numero

x
Fila *fi

inicio fim qtd=0


16/46

Criando a Fila
17/46

Fila *fi

inicio fim qtd=0

NULL
18/46

“Destruindo” e Tamanho da Fila


19/46

inicio fim qtd=2 fi

23 2 NULL

nó nó

inicio fim qtd=2 fi

23 2 NULL
20/46

Fila Cheia e Vazia


21/46

Fila cheia: apenas ocorrerá quando a chamada da função


malloc() retornar NULL.

Fila Vazia:
fi->inicio == NULL
fi inicio fim qtd=0

NULL
22/46

Inserindo e Removendo um Elemento na Fila


Como a inserção é no final da fila, o elemento a ser inserido obrigatoriamente 23/46

deve apontar para a constante NULL.

inicio fim qtd=2 fi


qtd=3

no no
23 2 12
NULL 12 NULL NULL
Remoção:

inicio fim qtd=2 fi


qtd=3

23 2 12 NULL


24/46

Pilha Sequencial Estática


25/46

Definindo o Tipo
26/46

4 qtd

tamMax - 1

2
43
20
19 0
27/46

Criando a Pilha
28/46

Pilha *pi;

0 qtd

tamMax - 1

0
29/46

“Destruindo” a Pilha
30/46

Liberando a memória alocada para a estrutura que


representa a pilha.
Pilha *pi;

0 qtd

tamMax - 1

0
31/46

Tamanho e Pilha Cheia/Vazia


Para saber o tamanho da pilha, 2 qtd 32/46

basta retornar o valor de qtd.


tam = pi->qtd; tamMax - 1

Pilha Cheia: Pilha Vazia:


pi->qtd == tamMax pi->qtd == 0
13
tamMax qtd 0 qtd 5 0

9 tamMax - 1 tamMax - 1
88
4
12
13
5 0 0
33/46

Inserindo e Removendo na Pilha


34/46
234 qtd
insere_pilha(pPilha, 12);
pi->num[2] = 12 tamMax - 1
pi->qtd = 3
insere_pilha(pPilha, 77); 77
pi->num[3] = 77 12
pi->qtd = 4 13
5 0

43 qtd
remove_Pilha(pPilha);
pi->qtd = 3 tamMax - 1

O topo da pilha fica duplicado. 77


Entretanto, a posição é 12
considerada NÃO ocupada por 13
elementos na pilha. 5 0
35/46

Pilha Dinâmica Encadeada


36/46

Definindo o Tipo
37/46

pro
numero

x
Topo (*pi)

pro
numero

x
38/46

Criando a Pilha
39/46

Pilha *pi;

Topo

NULL
40/46

“Destruindo” e Tamanho da Pilha


41/46

Pilha *pi; Pilha *pi;


Topo cont = 3
21
0
Topo Percorre a pilha até o
valor do nó for
no 44 no
44 diferente de NULL
(fim da pilha).
no 76 no
76

2 no
2 no
no
NULL
NULL
42/46

Pilha Cheia/Vazia
43/46

Pilha Cheia: apenas ocorrerá quando a chamada da função


malloc() retornar NULL.
Pilha Não Vazia: Pilha Vazia:
Topo Pilha *pi; Topo Pilha *pi;

44
NULL

76

NULL
44/46

Inserindo e Removendo um Elemento na Pilha


45/46

Inserindo: Removendo:
Pilha *pi; no Topo Pilha *pi;
Topo 14
no
44
76
76
2

NULL 2
NULL
46/46

Referências
 Slides do Prof. Luiz Rozante;

 SALES, André Barros de; AMVAME-NZE, Georges. Linguagem C: roteiro de


experimentos para aulas práticas. 2016;
 BACKES, André. Linguagem C Completa e Descomplicada. Editora Campus. 2013;

 SCHILDT, Herbert. C Completo e Total. Makron Books. 1996;

 DAMAS, Luís. Linguagem C. LTC Editora. 1999;

 DEITEL, Paul e DEITEL, Harvey. C Como Programar. Pearson. 2011;

 BACKES, André. Estrutura de Dados Descomplicada em Linguagem C. GEN LTC.


2016.

Você também pode gostar