Você está na página 1de 4

INSTITUTO FEDERAL MINAS GERAIS - CAMPUS GOVERNADOR VALADARES

Disciplina: Programação de Computadores II Curso: Engenharia de Produção Professor: Kalid Costa


Assunto: Estrutura de Dados - Fila Folha 12

ATIVIDADES

01. O que é e como funciona uma estrutura do tipo fila?

Fila é uma estrutura para armazenar um conjunto de dados, que funciona da seguinte forma:
Novos dados entram no conjunto, exclusivamente, no fim da fila. O único elemento que pode
ser retirado da fila em um dado momento, é o primeiro elemento da fila.

02. Em que situações uma fila pode ser utilizada?

As Filas são comumente usados em circuitos eletrônicos de buffer e controle de fluxo e em


softwares que fazem necessário a propriedade de fila.

03. Implemente um TAD fila de nomes e telefones que representa um sistema de atendimentos de uma
empresa.
a) Quando um cliente faz uma reclamação seu nome e telefone é inserido no fim da fila de
atendimento
b) O sistema deverá mostrar quem é o próximo a ser chamado para o atendimento.
c) Cada vez que um cliente é atendido, seu nome é removido da fila.
d) O TAD também deverá conter a opção de mostrar todos os clientes que terão antendimento.

//interface do TAD
typedef struct Tipo_no{
int nome;
char [10]; //formato 0000-0000
struct Tipo_no* prox;
}Tno;

typedef struct Tipo_FilaEnc{


Tno* inicio;
Tno* fim;
int tam;
}TFilaEnc;

void criaFila(TFilaEnc *fila);


int vaziaFila(TFilaEnc *fila);
int cheiaFila(TFilaEnc *fila);
int enfileiraFila(TFilaEnc *fila);
void elementoInicio(TFilaEnc *fila);

Programação de Computadores II Folha 12


//Operações do TAD
void criaFila(TFilaEnc *fila){
fila->inicio = fila->fim = NULL;
fila->tam = 0;
}

int vaziaFila(TFilaEnc *fila){


return (fila->inicio == NULL && fila->fim == NULL);
}

int cheiaFila(Tno *novo){


if(novo == NULL)
return 1;
else
return 0;
}

void enfileiraFila(TFilaEnc *fila){


Tno *novo;
novo = (Tno*) malloc(sizeof(Tno));

if(cheiaFila(novo)){
cout << “Alocacao Maxima atingida!”;
exit(1);
}else{
novo->prox = NULL;

cout << “Digite um elemento: ”;


cin >> novo->dado;

if(vaziaFila(fila))
fila->inicio = novo;
else
(fila->fim)->prox = novo;

fila->fim = novo;
(fila->tam)++;
}
}

void desenfileiraFila(TFilaEnc *fila){


if(vaziaFila(fila))
cout << “Fila vazia!”;
else{
if(fila->inicio == fila->fim)
fila->fim = NULL;

cout << “Dado retirado: ” << (fila->inicio)->dado;

Tno *atual;
atual = fila->inicio;
fila->inicio = (fila->inicio)->prox;
free(atual);
(fila->tam)--;
}
}

void elementoInicio(TFilaEnc *fila){


if(vaziaFila(fila))
cout << “Fila vazia!”;

cout << “Elemento início da Fila: ” << (fila->inicio)->dado;


}

void exibirFila(TFilaEnc *fila){

Programação de Computadores II Folha 12


// chama a função que verifica se a Fila está vazia
if(vaziaFila(fila))
cout << “Fila vazia!” << endl;
else{
Tno *aux;
aux = fila->inicio; // aux recebe elemento inicio
cout << “Elementos da Fila: ” << endl;
// percorre a Fila
while(aux != NULL){
cout << aux->dado;
aux = aux->prox; // avança para o próximo nó
}
free(aux);
}
}

04. Existem partes de sistemas operacionais que cuidam da ordem em que os programas devem ser
executados. Por exemplo, em um sistema de computação de tempo- compartilhadao (“time-shared”) existe
a necessidade de manter um conjunto de processo em uma fila, esperando para serem executados.

Escreva um programa que seja capaz de ler uma série de solicitações para:
a) Incluir novos processos na fila de processo;
b) Retirar da fila o processo com o maior tempo de espera;
c) Exibir o conteúdo da lista de processo em determinado momento.

Assuma que cada processo é representado por um registro composto por um número identificador do
processo.

05. Se uma fila representada por arranjos (vetores) não é considerada circular, sugere-se que cada operação
Desenfileira deve deslocar para “frente” todo elemento restante de uma fila. Um método alternativo é adiar
o deslocamente até que “tras” seja igual ao último índice do vetor. Quando essa situação ocorre e faz-se
uma tentativa de inserir um elemento na fila, a fila inteira é deslocada para “frente”, de modo que o primeiro
elemento da fila fique na primeira posição do vetor, ou posição 0, caso a implementação seja em C/C++.
Quais são as vantagens desse método sobre um deslocamente em cada operação Desenfileira? Quais as
desvantagens? Reescreva as funções Desenfileira, Enfileira e Vazia usando esse novo método.

06. Implemente uma fila de inteiros em C/C++, usando uma implementação por arranjos (um vetor
queue[100]), onde queue[0] e queue[1] são usados para representar a posição inicial e final da fila
respectivamente e queue[2] a queue[99] são usados para conter os elementos do vetor. Demonstre como
inicializar esse vetor de modo a representar a fila vazia e escreva funções Desenfileira, Enfileira e Vazia para
tal implementação.

Programação de Computadores II Folha 12


07. Considere a implementação de listas encadeadas do tipo Fila utilizando apontadores vista em sala e
desenvolva o seguinte:

Escreva uma função void Inverte(TipoFila *Fila) que, dada uma lista com um número
qualquer de elementos, inverte a ordem dos elementos da lista, como exemplificado na figura
abaixo. (Obs. Não vale trocar apenas os campos item ou usar uma lista auxiliar! Você deverá fazer
a manipulação dos apontadores para trocar as células de posição).

void Inverte(TipoFila *Fila){


Tno *atual = Fila->inicio;
Tno *proximo = Fila->inicio->prox;

Tno *temp = Fila->inicio->prox;

while(proximo != NULL){
// preserva ponteiro para caminhar no encadeamento
temp = temp->prox;

// inverte o caminho do elemento posterior ao atual


proximo->prox = atual;

// determina o proximo elemento a ser processado


atual = proximo;

// determina o elemento posterior


proximo = temp;
}

// remove link do primeiro elemento com o segundo elemento


Fila->inicio->prox = NULL;

// move o monteiro fim para o novo fim da fila


Fila->fim = fila->inicio;

// aponta para o novo inicio da fila


Fila->inicio = atual;
}

Não furem a Fila, espere a sua vez...!

Programação de Computadores II Folha 12

Você também pode gostar