Buscar

Estrutura de Dados - pilha

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

//Nome: Marina Baeta de Oliveira
//Matricula: 2020020917
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM_FILAS 3
#define TAM_NOME 50
typedef enum {false, true} bool;
typedef struct no{
 float tamanho;
 char nome[TAM_NOME];
 int prioridade;
 struct no *prox;
}noProcesso;
noProcesso *filaDeProcessos[NUM_FILAS];
noProcesso *ult[NUM_FILAS];
bool prioridadesProcessos[10];
void inicializaFila(){
 int i;
 for(i=0; i<NUM_FILAS; i++){
 filaDeProcessos[i] = NULL;
 ult[i] = NULL;
 }
}
void insereFila(float tam, char nome[TAM_NOME], int pri){
 noProcesso *novo;
 int i, aux;
 
 switch(pri){
 case 0:
 case 1:
 case 2:
 case 3:
 aux = 0;
 break;
 case 4:
 case 5:
 case 6:
 aux = 1;
 break;
 case 7:
 case 8:
 case 9:
 aux = 2;
 break;
 default: 
 printf("\n Prioridade invalida!! \n");
 }
 novo = (noProcesso *) malloc(sizeof(noProcesso));
 if(filaDeProcessos[aux] == NULL){
 filaDeProcessos[aux] = novo;
 }
 novo->prioridade = pri;
 novo->tamanho = tam;
 strcpy(novo->nome, nome);
 novo->prox = NULL;
 
 if(ult[aux] != NULL){
 ult[aux]->prox = novo;
 }
 ult[aux] = novo;
}
void imprimeDadosListasDeProcessos(){
 int i, cont;
 float soma;
 noProcesso *atual;
 for(i=0; i<NUM_FILAS; i++){
 
 cont = 0;
 soma = 0;
 printf("\n \n*Fila: %d* \n", i+1);
 atual = filaDeProcessos[i];
 while(atual != NULL){
 printf("\n\n Numero de processos: %d ", cont+1);
 soma += atual->tamanho;
 printf("\n Nome: %s | Tamanho: %.2f | Prioridade: %d ", atual->nome, atual->tamanho, atual->prioridade); 
 atual = atual->prox;
 cont ++;
 }
 printf("\n\n ------- Soma tamanho: %.2f | Quantidade de processos: %d ------- \n", soma, cont);
 }
 printf("\n");
}
bool removePrimeiroDaFila(int pri){
 noProcesso *atual;
 int aux;
 
 atual = filaDeProcessos[pri];
 if(atual != NULL){
 if(atual->prox == NULL){
 ult[pri] = NULL;
 }
 filaDeProcessos[pri] = atual->prox;
 free(atual);
 return true;
 }
 return false;
}
void destroi(){
 noProcesso *atual;
 noProcesso *apaga;
 int i;
 for(i=0;i<3;i++){
 
 atual = filaDeProcessos[i]; 
 while(atual != NULL){
 apaga = atual;
 atual = atual->prox;
 free(apaga);
 }
 } 
}
int main(int argc, char *argv[]){
 inicializaFila();
 insereFila(1, "BrOfficeCalc", 3);
 insereFila(2.3, "CodeBlocks", 9);
 insereFila(0.5, "Calculadora", 1);
 insereFila(6.4, "Firefox", 7);
 insereFila(3.1, "PhpMyAdmin", 2);
 insereFila(2.9, "Kile", 4);
 insereFila(4.5, "Gimp", 9);
 insereFila(5.5, "BrOfficeWriter", 6);
 insereFila(5.8, "GCC", 2);
 imprimeDadosListasDeProcessos();
 removePrimeiroDaFila(2);
 system("pause");
 imprimeDadosListasDeProcessos();
 system("pause");
 destroi();
 return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando

Outros materiais