Lista restrita onde as operações de inserção e retirada são feitas nas extremidades. Deque (fila de final duplo).

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

Download "Lista restrita onde as operações de inserção e retirada são feitas nas extremidades. Deque (fila de final duplo)."

Transcrição

1 1. Uma fila dupla é uma lista linear na qual os elementos podem ser inseridos ou removidos de qualquer etremo. Baseando-se na implementação circular apresentada para filas, codifique uma unidade de rotinas para manipulação de filas duplas. A unidade deve conter rotinas para inicializar, testar fila vazia/cheia, inserir à uerda, inserir à eita, remover à uerda e também à eita. 2. Considerando que você tem a disposição duas pilhas. Mostre como elas podem ser utilizadas em conjunto para simular o funcionamento de uma fila. [Dica: utilize uma pilha como espaço de armazenamento e a outra como espaço auiliar para operações de movimentação de dados] DEQUES: Lista restrita onde as operações de inserção e retirada são feitas nas etremidades. Deque (fila de final duplo). Obs.: Pode-se ter deques de entradas restritas e deques de saídas restritas. Pilhas e filas são casos particulares de deques ) OPERAÇÕES Criadeque (criação) InsereE (insere pela uerda) InsereD (insere pela eita) RemoveE (remove pela uerda) RemoveD (remove pela eita) VerD (ver o topo eito) VerE (ver o topo uerdo) 3.3.2) IMPLEMENTAÇÃO SEGUENCIAL: Forma mais comum de implementação é usando um vetor circular com nóbobo. Usa-se um campo do tipo inteiro chamado que apontará para a etremidade uerda do deque. Da mesma forma,. Deque vai estar vazio se =. Inserções na eita, deslocam o índice à eita e armazena o valor na nova posição. Inserções na uerda, coloca o valor na posição depois desloca o índice à uerda. Posição 0 é o nó-bobo e não pode ser preenchido. Deque vai estar cheio para inserções à eita se o deslocamento a eita de tornálo igual a. Página 1

2 Deque vai estar cheio para inserções à uerda se o deslocamento a uerda de torná-lo igual a ) TIPOS DE DADOS #define MAXDEQUE 100 typedef int telem; typedef struct { telem elemento [MAXDEQUE]; int ; int ; tdeque; 3.3.4) IMPLEMENTAÇÃO DAS OPERAÇÕES: CriaDeque: É criada um deque circular com dois apontadores, e, onde inicialmente estarão apontando para o mesmo elemento. Não retorna valor. void CriaDeque(tdeque *deque){ deque->=deque->=0; CriaDeque(&deque1); InsereD: Primeiro testa se ao incrementar o apontador vai encontrar o apontador, caso isso ocorra, o deque já está cheio. Caso contrário, incrementa-se o apontador e insere-se o elemento naquela posição. Caso obtenha sucesso, a função retorna 1. inserção Página 2

3 int InsereD(tdeque *deque, telem valor){ int au=deque->; if (((++au)%ma) == deque->) return(0); deque->=(++deque->)%ma; deque->elemento[deque->]=valor; InsereD(&deque1, valor); InsereE: Primeiro testa se ao decrementar o apontador '' ele irá encontrar o apontador '', caso isso ocorra o deque está cheio, caso contrário, insere-se o elemento naquela posição inicial do apontador '', depois decrementa-se o apontador. Caso obtenha sucesso, a função retorna 1. Inserção int InsereE(tdeque *deque, telem valor){ int au=deque->; if((--au)%ma==deque->) return(0); deque->elemento[deque->]=valor; deque->=(--deque->)%ma; InsereE(&deque1, valor); Página 3

4 RemoveE: A única restrição é se o deque estiver vazio, caso contrário, pode-se remover o(s) elemento(s). Caso obtenha sucesso, a função retorna 1. remoção int RemoveE(tdeque *deque, tvalor *valor){ if (deque->==deque->) return(0); deque->=(++deque->)%ma; *valor=deque->elemento[deque->]; RemoveE(&deque1, &valor1); RemoveD: A única restrição é se o deque estiver vazio, caso contrário, pode-se remover o(s) elemento(s). Caso obtenha sucesso, a função retorna 1. remoção int RemoveD(tdeque *deque, tvalor *valor){ if (deque->==deque->) return(0); *carro=deque->elemento[deque->]; deque->=(--deque->)%ma; RemoveD(&deque1, &valor1); Página 4

5 VerD: Verifica o valor do elemento apontado pelo '' sem eliminá-lo do deque. int VerD(tdeque *deque, tvalor *valor){ if(deque->==deque->) return(0); *valor=deque->elemento[deque->]; VerD(&deque, &valor1); VerE: Verifica o valor do elemento apontado pôr '' sem eliminá-lo do deque. Algorimo: int VerE(tdeque *deque, tvalor *valor){ int au=deque->; if(deque->==deque->) return(0); au=(++au)%ma; *valor=deque->elemento[au]; VerE(&deque1, &valor1); Página 5