Ir ao conteúdo
  • Cadastre-se

Fila em C


rafaela122

Posts recomendados

Eu estou com muita dificuldade para criar esse programa em C, agradeço desde já quem me ajudar.

Beijos

provaws.jpg

Eu consegui começa o código a partir de outro que o professor deu pra gente se basear, só que ainda não deu pra terminar... Me ajudem por favor isso é urgentee, ele pediu para entregar amanha de noite, quem puder da uma ajudinha gentee


#include <stdio.h>
#define TAM 10


struct Process{
int identifier;
int priority;
};


struct ProcessQueue{
struct Process* data[TAM];
int indexQueue;
};


struct ProcessQueue *initialize_queue(){
struct ProcessQueue *pointer = malloc(sizeof(struct ProcessQueue));
pointer->indexQueue = -1;

return pointer;
}


int size(struct ProcessQueue* queue){
return queue->indexQueue + 1;
}


int empty(struct ProcessQueue* queue){
return queue->indexQueue == -1;
}


void enqueue(struct Process* process, struct ProcessQueue *queue){
if(size(queue) < TAM){
queue->indexQueue++;
queue->data[queue->indexQueue] = process;
}else{
printf("Queue is full!\n");
}
}

void shiftLeft(struct ProcessQueue *queue){
int i;
for (i=0;i <= queue->indexQueue;i++){
queue->data[i] = queue->data[i+1];
}
queue->indexQueue--;
}


struct Process* dequeue(struct ProcessQueue *queue){
struct Process* result = NULL;
if(!empty(queue)){
result = queue->data[0];
shiftLeft(queue);
}else{
printf("Queue is empty!\n");
}

return result;
}


Link para o comentário
Compartilhar em outros sites

Pra fazer em um dia é beeem complicado pra quem ta aprendendo. Eu demorei bem mais pra implementar uma fila em C.

Sobre a fila, FIFO quer dizer First in First out, ou seja, o primeiro a entrar é o primeiro a sair assim como numa fila de verdade do mundo real.

Para implementar isso você precisará basicamente criar uma fila e fazer a lógica pra que ela funcione como tal. Cada elemento inserido será o primeiro a sair, um atrás do outro. A ideia genérica é essa. Boa sorte!

Link para o comentário
Compartilhar em outros sites

Tá certo, valeu pela força. Quem puder me ajudar com o codigo, eu agradeço desdee já :)

Eu sei que estou pedindo muito, mas estou nervosa já aquii, as funções estão quase todas ai, mas eu não consigo colocar tudo certinho no main, da uma forcinha ai gentee

O código que o professor deu pra gente se basear foi esse



#include <stdio.h>
#define TAM 10

/*
* ESTRUTURA QUE REPRESENTA UM PROCESSO
*/
struct Process{
int identifier;
int priority;
};

/*
* ESTRUTURA QUE REPRESENTA UMA FILA DE PROCESSOS. NA RELIDADE UMA
* FILA DE APONTADORES PARA PROCESSOS.
*/
struct ProcessQueue{
struct Process* data[TAM];
int indexQueue;
};

/*
* FUNCAO QUE ALOCA UMA FILA DE PROCESSOS
*/
struct ProcessQueue *initialize_queue(){
struct ProcessQueue *pointer = malloc(sizeof(struct ProcessQueue));
pointer->indexQueue = -1;

return pointer;
}

/*
* FUNCAO QUE DIZ O TAMANHO DE UMA FILA DE PROCESSOS.
* NOTE QUE A FUNCAO AGORA RECEBE UM PARAMETRO QUE É UM APONTADOR PARA A FILA
* A SER ANALISADA PELA FUNCAO
*/
int size(struct ProcessQueue* queue){
return queue->indexQueue + 1;
}

/*
* FUNCAO QUE DIZ SE UMA FILA DE PROCESSOS É VAZIA OU NAO.
* NOTE QUE A FUNCAO AGORA RECEBE UM PARAMETRO QUE É UM APONTADOR PARA A FILA
* A SER ANALISADA PELA FUNCAO
*/
int empty(struct ProcessQueue* queue){
return queue->indexQueue == -1;
}

/*
* FUNCAO QUE INSERE UM PROCESSO NUMA FILA DE PROCESSOS.
* NOTE QUE A FUNCAO AGORA RECEBE DOIS PARAMETROS: UM QUE É UM APONTADOR
* PARA O PROCESSO A SER INSERIDO E OUTRO QUE É UM APONTADOR PARA A FILA
* ONDE INSERIR
*/
void enqueue(struct Process* process, struct ProcessQueue *queue){
if(size(queue) < TAM){
queue->indexQueue++;
queue->data[queue->indexQueue] = process;
}else{
printf("Queue is full!\n");
}
}

void shiftLeft(struct ProcessQueue *queue){
int i;
for (i=0;i <= queue->indexQueue;i++){
queue->data[i] = queue->data[i+1];
}
queue->indexQueue--;
}

/*
* FUNCAO QUE REMOVE UM PROCESSO NUMA FILA DE PROCESSOS.
* NOTE QUE A FUNCAO AGORA RECEBE UM PARAMETRO QUE É UM APONTADOR PARA A
* FILA DE ONDE REMOVER. A REMOCAO DEVE SER FEITA PELO INICIO DA FILA.
* SE A FILA ESTA VAZIA então A FUNCAO IMPRIME UMA MENSAGEM DE ERRO.
* SENAO ELA REMOVE O ELEMENTO MAIS ANTIGO E DÁ UM SHIFT A ESQUERDA
* NOS DEMAIS ELEMENTOS.
*
* IMPLEMENTE O CORPO DESSA FUNCAO.
*/
struct Process* dequeue(struct ProcessQueue *queue){



struct Process* result = NULL;
if(!empty(queue)){
result = queue->data[0];
shiftLeft(queue);
}else{
printf("Queue is empty!\n");
}

return result;
}


Link para o comentário
Compartilhar em outros sites

Tá certo, valeu pela força. Quem puder me ajudar com o codigo, eu agradeço desdee já :)

Eu sei que estou pedindo muito, mas estou nervosa já aquii, as funções estão quase todas ai, mas eu não consigo colocar tudo certinho no main, da uma forcinha ai gentee

O código que o professor deu pra gente se basear foi esse



#include <stdio.h>
#define TAM 10

/*
* ESTRUTURA QUE REPRESENTA UM PROCESSO
*/
struct Process{
int identifier;
int priority;
};

/*
* ESTRUTURA QUE REPRESENTA UMA FILA DE PROCESSOS. NA RELIDADE UMA
* FILA DE APONTADORES PARA PROCESSOS.
*/
struct ProcessQueue{
struct Process* data[TAM];
int indexQueue;
};

/*
* FUNCAO QUE ALOCA UMA FILA DE PROCESSOS
*/
struct ProcessQueue *initialize_queue(){
struct ProcessQueue *pointer = malloc(sizeof(struct ProcessQueue));
pointer->indexQueue = -1;

return pointer;
}

/*
* FUNCAO QUE DIZ O TAMANHO DE UMA FILA DE PROCESSOS.
* NOTE QUE A FUNCAO AGORA RECEBE UM PARAMETRO QUE É UM APONTADOR PARA A FILA
* A SER ANALISADA PELA FUNCAO
*/
int size(struct ProcessQueue* queue){
return queue->indexQueue + 1;
}

/*
* FUNCAO QUE DIZ SE UMA FILA DE PROCESSOS É VAZIA OU NAO.
* NOTE QUE A FUNCAO AGORA RECEBE UM PARAMETRO QUE É UM APONTADOR PARA A FILA
* A SER ANALISADA PELA FUNCAO
*/
int empty(struct ProcessQueue* queue){
return queue->indexQueue == -1;
}

/*
* FUNCAO QUE INSERE UM PROCESSO NUMA FILA DE PROCESSOS.
* NOTE QUE A FUNCAO AGORA RECEBE DOIS PARAMETROS: UM QUE É UM APONTADOR
* PARA O PROCESSO A SER INSERIDO E OUTRO QUE É UM APONTADOR PARA A FILA
* ONDE INSERIR
*/
void enqueue(struct Process* process, struct ProcessQueue *queue){
if(size(queue) < TAM){
queue->indexQueue++;
queue->data[queue->indexQueue] = process;
}else{
printf("Queue is full!\n");
}
}

void shiftLeft(struct ProcessQueue *queue){
int i;
for (i=0;i <= queue->indexQueue;i++){
queue->data[i] = queue->data[i+1];
}
queue->indexQueue--;
}

/*
* FUNCAO QUE REMOVE UM PROCESSO NUMA FILA DE PROCESSOS.
* NOTE QUE A FUNCAO AGORA RECEBE UM PARAMETRO QUE É UM APONTADOR PARA A
* FILA DE ONDE REMOVER. A REMOCAO DEVE SER FEITA PELO INICIO DA FILA.
* SE A FILA ESTA VAZIA então A FUNCAO IMPRIME UMA MENSAGEM DE ERRO.
* SENAO ELA REMOVE O ELEMENTO MAIS ANTIGO E DÁ UM SHIFT A ESQUERDA
* NOS DEMAIS ELEMENTOS.
*
* IMPLEMENTE O CORPO DESSA FUNCAO.
*/
struct Process* dequeue(struct ProcessQueue *queue){



struct Process* result = NULL;
if(!empty(queue)){
result = queue->data[0];
shiftLeft(queue);
}else{
printf("Queue is empty!\n");
}

return result;
}


Me parece que o código está 90% pronto, basta organizar a ideia e por pra rodar.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!