Download - Algoritmos e Estruturas de Dados
![Page 2: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/2.jpg)
Pilhas e FilasPilhas e FilasPilhas e FilasPilhas e Filas
Pilhas e filas são casos especiais das listas Pilhas e filas são casos especiais das listas encadeadas.encadeadas.
Ambas possuem regras rigorosas para Ambas possuem regras rigorosas para acessar os dados armazenados nelas.acessar os dados armazenados nelas.
As operações de recuperação de dados As operações de recuperação de dados são destrutivas, ou seja, para se alcançar são destrutivas, ou seja, para se alcançar dados intermediários a tais estruturas, é dados intermediários a tais estruturas, é necessário destruir sequencialmente os necessário destruir sequencialmente os dados anteriores.dados anteriores.
![Page 3: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/3.jpg)
PilhasPilhasPilhasPilhas
É uma das estruturas de dados mais simplesÉ uma das estruturas de dados mais simples
É a estrutura de dados mais utilizada em É a estrutura de dados mais utilizada em programação, sendo inclusive implementada programação, sendo inclusive implementada diretamente pelo hardware da maioria das diretamente pelo hardware da maioria das máquinas modernas.máquinas modernas.
A idéia fundamental da pilha é que todo o acesso A idéia fundamental da pilha é que todo o acesso a seus elementos é feito através do seu topo. a seus elementos é feito através do seu topo.
Assim, quando um elemento novo é introduzido Assim, quando um elemento novo é introduzido na pilha, passa a ser o elemento do topo, e o na pilha, passa a ser o elemento do topo, e o único elemento que pode ser removido da pilha é único elemento que pode ser removido da pilha é o do topo.o do topo.
![Page 4: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/4.jpg)
PilhasPilhas:: Aplicações:: AplicaçõesPilhasPilhas:: Aplicações:: Aplicações
Verificação de parênteses.Verificação de parênteses.
Retirada de vagões de um trem.Retirada de vagões de um trem.
Retirada de mercadorias em um caminhão Retirada de mercadorias em um caminhão de entregas.de entregas.
Conversão de um número na base 10 para Conversão de um número na base 10 para outra base numérica.outra base numérica.
![Page 5: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/5.jpg)
PilhasPilhasPilhasPilhas
Os elementos da pilha são retirados na Os elementos da pilha são retirados na ordem inversa à ordem em que foram ordem inversa à ordem em que foram introduzidos: o primeiro que sai é o último introduzidos: o primeiro que sai é o último que entrou (LIFO – last in, first out).que entrou (LIFO – last in, first out).
Existem duas operações básicas que Existem duas operações básicas que devem ser implementadas numa estrutura devem ser implementadas numa estrutura de pilha: de pilha: operação para operação para empilharempilhar ( (pushpush) um novo ) um novo
elemento, inserindo-o no topo, elemento, inserindo-o no topo,
operação para operação para desempilhardesempilhar ( (poppop) um ) um elemento, removendo-o do topoelemento, removendo-o do topo
![Page 6: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/6.jpg)
PilhasPilhas:: :: PushPushPilhasPilhas:: :: PushPush
topo
push(a)push(a)
k
m
x
a
push(b)push(b)
b
![Page 7: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/7.jpg)
PilhasPilhas:: :: PushPushPilhasPilhas:: :: PushPush
topo
k
m
x
topo
k
m
x
a
topo
k
m
x
a
b
push(a) push(b)
![Page 8: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/8.jpg)
PilhasPilhas:: :: PopPopPilhasPilhas:: :: PopPop
topo
pop(b)pop(b)
k
m
x
a
pop(a)pop(a)
b
![Page 9: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/9.jpg)
PilhasPilhas:: :: PopPopPilhasPilhas:: :: PopPop
k
m
x
topo
topo
k
m
x
topo
k
m
x
aa
b
pop(b) pop(a)
![Page 10: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/10.jpg)
PilhasPilhas:: Implementação de pilha usando vetor:: Implementação de pilha usando vetorPilhasPilhas:: Implementação de pilha usando vetor:: Implementação de pilha usando vetor
Supondo a pilha está armazenada em um Supondo a pilha está armazenada em um vetor pilha[0..n-1]. vetor pilha[0..n-1].
Considerando que os elementos são Considerando que os elementos são inteiros (isso é só um exemplo, os inteiros (isso é só um exemplo, os elementos de pilha poderiam ser elementos de pilha poderiam ser quaisquer outros objetos). quaisquer outros objetos).
A parte do vetor ocupada pela pilha será:A parte do vetor ocupada pela pilha será:
00 tt n-1n-1
pilha[0..n-1]pilha[0..n-1]
![Page 11: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/11.jpg)
PilhasPilhas:: Implementação de pilha usando vetor:: Implementação de pilha usando vetorPilhasPilhas:: Implementação de pilha usando vetor:: Implementação de pilha usando vetor
#define MAX 50
struct pilha {int n;int vet[MAX];
} tipoPilha;
#define MAX 50
struct pilha {int n;int vet[MAX];
} tipoPilha;
173172
![Page 12: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/12.jpg)
PilhasPilhas:: Implementação de pilha usando :: Implementação de pilha usando estruturasestruturas
PilhasPilhas:: Implementação de pilha usando :: Implementação de pilha usando estruturasestruturas
typedef struct noh { float info; struct no *prox;} tipoNo;
struct pilha {tipoNo* topo;
} tipoPilha;
typedef struct noh { float info; struct no *prox;} tipoNo;
struct pilha {tipoNo* topo;
} tipoPilha;
![Page 13: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/13.jpg)
PilhasPilhas:: Operações básicas:: Operações básicasPilhasPilhas:: Operações básicas:: Operações básicas
Criar uma estrutura de pilha;Criar uma estrutura de pilha;
Inserir um elemento no topo (push);Inserir um elemento no topo (push);
Remover o elemento do topo (pop);Remover o elemento do topo (pop);
Verificar se a pilha está vazia;Verificar se a pilha está vazia;
Liberar a estrutura de pilhaLiberar a estrutura de pilha
![Page 14: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/14.jpg)
PilhasPilhas:: Criar uma estrutura de pilha:: Criar uma estrutura de pilhaPilhasPilhas:: Criar uma estrutura de pilha:: Criar uma estrutura de pilha
tipoPilha* criar(void){
tipoPilha *p;p = (tipoPilha*) malloc(sizeof(tipoPilha));p->topo = NULL;return p;
}
tipoPilha* criar(void){
tipoPilha *p;p = (tipoPilha*) malloc(sizeof(tipoPilha));p->topo = NULL;return p;
}
![Page 15: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/15.jpg)
PilhasPilhas:: Inserir o elemento do topo - :: Inserir o elemento do topo - push()push()PilhasPilhas:: Inserir o elemento do topo - :: Inserir o elemento do topo - push()push()
tipoPilha push(tipoPilha *p, float v){
tipoNo* aux;aux = (tipoNo) malloc(sizeof(tipoNo));aux -> info = v;aux -> prox = p->topo;return aux;
}
tipoPilha push(tipoPilha *p, float v){
tipoNo* aux;aux = (tipoNo) malloc(sizeof(tipoNo));aux -> info = v;aux -> prox = p->topo;return aux;
}
![Page 16: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/16.jpg)
PilhasPilhas:: Remover o elemento do topo - :: Remover o elemento do topo - pop()pop()PilhasPilhas:: Remover o elemento do topo - :: Remover o elemento do topo - pop()pop()
void pop(tipoPilha *p){
float v;tipoNo* aux;if (vazia(p)) {
printf(“Pilha vazia.”);exit(1); /*aborta o programa*/
}v = p->topo->info;aux = p->prox;free(p);printf(“Retirou o elemento %d”, v);
}
void pop(tipoPilha *p){
float v;tipoNo* aux;if (vazia(p)) {
printf(“Pilha vazia.”);exit(1); /*aborta o programa*/
}v = p->topo->info;aux = p->prox;free(p);printf(“Retirou o elemento %d”, v);
}
![Page 17: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/17.jpg)
PilhasPilhas:: Verificar se a pilha está vazia:: Verificar se a pilha está vaziaPilhasPilhas:: Verificar se a pilha está vazia:: Verificar se a pilha está vazia
int vazia(tipoPilha *p){
return (p->topo == NULL);}
int vazia(tipoPilha *p){
return (p->topo == NULL);}
![Page 18: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/18.jpg)
PilhasPilhas:: Liberar a estrutura de pilha:: Liberar a estrutura de pilhaPilhasPilhas:: Liberar a estrutura de pilha:: Liberar a estrutura de pilha
void libera(tipoPilha *p){
tipoNo* q = p->topo;while (q != NULL){
tipoNo *t = q->prox;free(q);q = t;
}free(p);
}
void libera(tipoPilha *p){
tipoNo* q = p->topo;while (q != NULL){
tipoNo *t = q->prox;free(q);q = t;
}free(p);
}
174
![Page 19: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/19.jpg)
FilasFilasFilasFilas
São São listas lineares listas lineares que adotam a política que adotam a política FIFOFIFO (First In First Out – o primeiro que entra é o (First In First Out – o primeiro que entra é o primeiro que sai) para a manipulação de primeiro que sai) para a manipulação de elementos.elementos.
As inserções são feitas no final da fila.As inserções são feitas no final da fila.
As remoções são feitas no início da fila.As remoções são feitas no início da fila.
A consulta na fila é feita desenfileirando A consulta na fila é feita desenfileirando elemento a elemento até encontrar o elemento elemento a elemento até encontrar o elemento desejado ou chegar ao final da fila.desejado ou chegar ao final da fila.
![Page 20: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/20.jpg)
FilasFilas:: Aplicações:: AplicaçõesFilasFilas:: Aplicações:: Aplicações
Alocação de recursos para impressão de Alocação de recursos para impressão de documentos em uma impressora (spooler documentos em uma impressora (spooler de impressão).de impressão).
Atendimento de processos requisitados ao Atendimento de processos requisitados ao um sistema operacional.um sistema operacional.
Ordenação do encaminhamento dos Ordenação do encaminhamento dos pacotes em um roteador.pacotes em um roteador.
Buffer para gravação de dados em mídia.Buffer para gravação de dados em mídia.
![Page 21: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/21.jpg)
FilasFilas:: Aplicações:: AplicaçõesFilasFilas:: Aplicações:: Aplicações
fila para pouso
fila para decolagem
![Page 22: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/22.jpg)
Filas de tamanho variávelFilas de tamanho variável:: Inserção:: InserçãoFilas de tamanho variávelFilas de tamanho variável:: Inserção:: Inserção
bb aa xx mm kk
xx mm kk
aa xx mm kk
aa
bb
![Page 23: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/23.jpg)
Filas de tamanho variávelFilas de tamanho variável:: Remoção:: RemoçãoFilas de tamanho variávelFilas de tamanho variável:: Remoção:: Remoção
bb aa xx mm kk
xx mm kk
aa xx mm kk
kk
mm
![Page 24: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/24.jpg)
Filas de tamanho fixoFilas de tamanho fixoFilas de tamanho fixoFilas de tamanho fixo
xx mm kk
aa xx mm
bb aa xx
aa kk
bb mm
![Page 25: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/25.jpg)
FilasFilas:: Estrutura de uma fila:: Estrutura de uma filaFilasFilas:: Estrutura de uma fila:: Estrutura de uma fila
![Page 26: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/26.jpg)
FilasFilas:: Operações básicas:: Operações básicasFilasFilas:: Operações básicas:: Operações básicas
CriaçãoCriação
DestruiçãoDestruição
Inserção de um elementoInserção de um elemento
Remoção de um elementoRemoção de um elemento
Localização de um elemento para consulta ou Localização de um elemento para consulta ou alteração alteração
Ordenação de uma listaOrdenação de uma lista
Intercalação de duas listasIntercalação de duas listas
Concatenação de duas listasConcatenação de duas listas
Divisão de uma lista em duasDivisão de uma lista em duas
![Page 27: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/27.jpg)
FilasFilas:: Criação de uma fila:: Criação de uma filaFilasFilas:: Criação de uma fila:: Criação de uma fila
typedef struct { int info; /* outros componentes*/} tipoItem;
typedef struct no { tipoItem item; struct no *prox;} tipoNo;
typedef struct { tipoNoh frente;
tipoNoh tras;} tipoFila;
typedef struct { int info; /* outros componentes*/} tipoItem;
typedef struct no { tipoItem item; struct no *prox;} tipoNo;
typedef struct { tipoNoh frente;
tipoNoh tras;} tipoFila;
![Page 28: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/28.jpg)
FilasFilas:: Inserção de um elemento:: Inserção de um elementoFilasFilas:: Inserção de um elemento:: Inserção de um elemento
void ffvazia(tipoFila *fila) { fila->frente = (tipoNo) malloc(sizeof(tipoNo)); fila->tras = fila->frente; fila->frente->prox = NULL;}
int vazia(tipoFila fila) { return (fila.frente == fila.tras);}
void enfileira(tipoItem x, tipoFila *fila) { fila->tras->prox = (tipoNo) malloc(sizeof(tipoNo)); fila->tras = fila->tras->prox; fila->tras->item = x; fila->tras->prox = NULL;}
void ffvazia(tipoFila *fila) { fila->frente = (tipoNo) malloc(sizeof(tipoNo)); fila->tras = fila->frente; fila->frente->prox = NULL;}
int vazia(tipoFila fila) { return (fila.frente == fila.tras);}
void enfileira(tipoItem x, tipoFila *fila) { fila->tras->prox = (tipoNo) malloc(sizeof(tipoNo)); fila->tras = fila->tras->prox; fila->tras->item = x; fila->tras->prox = NULL;}
![Page 29: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/29.jpg)
FilasFilas:: Remoção de um elemento:: Remoção de um elementoFilasFilas:: Remoção de um elemento:: Remoção de um elemento
void desenfileira(tipoFila *fila) { ptr p; if (vazia(*fila))
{ printf("Erro: Fila vazia.\n"); return;
} p = fila->frente; fila->frente = fila->frente->prox; free(p); printf("Item da fila excluido com sucesso."); getch();}
void desenfileira(tipoFila *fila) { ptr p; if (vazia(*fila))
{ printf("Erro: Fila vazia.\n"); return;
} p = fila->frente; fila->frente = fila->frente->prox; free(p); printf("Item da fila excluido com sucesso."); getch();}
175
![Page 30: Algoritmos e Estruturas de Dados](https://reader036.vdocuments.com.br/reader036/viewer/2022062408/5681391f550346895da0c6dc/html5/thumbnails/30.jpg)
QuestõesQuestõesQuestõesQuestões