A maior rede de estudos do Brasil

crie um program que demonstre o uso de uma estrutura de dados do tipo fila de inteiros que use como elemen

Utilizando a linguagem de programação C/C++ crie um program que demonstre o uso de uma estrutura de dados do tipo fila de inteiros que use como elemento de armazenamento uma estrutura do tiplo lista encadeada. Certifique-se que sua estrutura de fila tenha funções para inserir, apagar, criar e mostrar o conteúdo da lista além de uma função para devolver o tamanho da fila e outra para esvaziar a fila. Observe também que, para resolver este problema você precisará, obrigatoriamente utilizar alocação dinâmica de memória e que para testar a fila o usuário deve ter acesso a um menu contendo todas as funções especificadas. Alguem sabe essa?


7 resposta(s) - Contém resposta de Especialista

User badge image

RD Resoluções Verified user icon

Há mais de um mês

Para responder essa pergunta devemos colocar em prática nosso conhecimento sobre Algoritmo e Estrutura de Dados.


#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<conio.h>

typedef struct Node node;

struct Node{

int num;

struct Node *prox;

int tam;

int menu(void);

void opcao(node *FILA, int op);

void inicia(node *FILA);

int vazia(node *FILA);

node *aloca();

void insere(node *FILA);

node *retira(node *FILA);

void exibe(node *FILA);

void libera(node *FILA);

int main(void){

node *FILA = (node *)malloc(sizeof(node));

if(!Fila){

printf("sem memoria disponivel!\n");

exit(1);

}

else{

inicia(FILA);

int opt;

do{

opt = menu();

opcao(FILA, opt);

}

while(opt);

free(FILA);

return 0;

}

}

int menu(void){

int opt;

printf("Escolha a opcao:\n\n");

printf("1. Adicionar elemento na fila.\n");

printf("2. Exibir a fila.\n");

printf("3. Retirar elemento da fila.\n");

printf("4. Zerar a fila.\n");

printf("5. Vizualizar tamanho da fila.\n");

printf("0. Sair.\n");

printf("Opcao: ");

scanf("%d", &opt);

printf("\n");

return opt;

}

void opcao(node *FILA, int op){

node *tmp;

switch(op){

case 0: libera(FILA);

break;

case 1: insere(FILA);

break;

case 2: exibe(FILA);

break;

case 3: tmp = retira(FILA);

if(tmp != NULL){

printf("Retirado: %d.\n\n", tmp -> num);

free(tmp);

}

break;

case 4: libera(FILA);

inicia(FILA);

printf("Fila esvaziada.\n\n");

break;

case 5: printf("\n");

printf(" o tamanho da fila e %d.\n\n", tam);

break;

default: printf("Comando invalido.\n\n");

}

}

void inicia(node *FILA){

FILA ->prox = NULL;

tam = 0;

}

int vazia(node *FILA){

if(FILA -> prox == NULL)

return 1;

else return 0;

}

node *aloca (){

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

if(!novo){

printf("Sem memoria disponivel!\n");

exit(1);

}

else{

printf("Novo elemento: ");

scanf("%d", &novo -> num);

printf("\n");

return novo;

}

}

void insere(node *FILA){

node *novo = aloca();

novo -> prox = NULL;

if(vazia(FILA)) FILA -> prox = novo;

else{

node *tmp = FILA -> prox;

while(tmp -> prox!=NULL)

tmp = tmp -> prox;

tmp -> prox = novo;

}

tam++;

}

node *retira(node *FILA){

if(FILA -> prox == NULL){

printf("Fila ja esta vazia.\n");

return NULL;

}

else{

node *tmp = FILA -> prox;

FILA -> prox = tmp ->prox;

tam--;

return tmp;

}

}

void exibe(node *FILA{

if(vazia(FILA)){

printf("Fila vazia!\n\n");

return;

}

node *tmp = FILA -> prox;

int count;

printf("Valores do vetor:\n\n");

for(count = 0; count < tam; count++){

printf("Posicao[%d] -> %d.\n",count +1, tmp ->num);

tmp = tmp -> prox;

printf("\n");

}

}

void libera(node *FILA){

if (!vazia(FILA)){

node *proxNode, *atual;

atual = FILA -> prox;

while(atual != NULL){

proxNode = atual -> prox;

free(atual);

atual = proxNode;

}

}

}


Portanto, no algoritmo apresentado foi realizado um menu de opções, em cada opção existe uma função correspondente para realizar a ação, tais como: inserir, apagar, criar e mostrar o conteúdo da lista, como foi solicitado.

Para responder essa pergunta devemos colocar em prática nosso conhecimento sobre Algoritmo e Estrutura de Dados.


#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<conio.h>

typedef struct Node node;

struct Node{

int num;

struct Node *prox;

int tam;

int menu(void);

void opcao(node *FILA, int op);

void inicia(node *FILA);

int vazia(node *FILA);

node *aloca();

void insere(node *FILA);

node *retira(node *FILA);

void exibe(node *FILA);

void libera(node *FILA);

int main(void){

node *FILA = (node *)malloc(sizeof(node));

if(!Fila){

printf("sem memoria disponivel!\n");

exit(1);

}

else{

inicia(FILA);

int opt;

do{

opt = menu();

opcao(FILA, opt);

}

while(opt);

free(FILA);

return 0;

}

}

int menu(void){

int opt;

printf("Escolha a opcao:\n\n");

printf("1. Adicionar elemento na fila.\n");

printf("2. Exibir a fila.\n");

printf("3. Retirar elemento da fila.\n");

printf("4. Zerar a fila.\n");

printf("5. Vizualizar tamanho da fila.\n");

printf("0. Sair.\n");

printf("Opcao: ");

scanf("%d", &opt);

printf("\n");

return opt;

}

void opcao(node *FILA, int op){

node *tmp;

switch(op){

case 0: libera(FILA);

break;

case 1: insere(FILA);

break;

case 2: exibe(FILA);

break;

case 3: tmp = retira(FILA);

if(tmp != NULL){

printf("Retirado: %d.\n\n", tmp -> num);

free(tmp);

}

break;

case 4: libera(FILA);

inicia(FILA);

printf("Fila esvaziada.\n\n");

break;

case 5: printf("\n");

printf(" o tamanho da fila e %d.\n\n", tam);

break;

default: printf("Comando invalido.\n\n");

}

}

void inicia(node *FILA){

FILA ->prox = NULL;

tam = 0;

}

int vazia(node *FILA){

if(FILA -> prox == NULL)

return 1;

else return 0;

}

node *aloca (){

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

if(!novo){

printf("Sem memoria disponivel!\n");

exit(1);

}

else{

printf("Novo elemento: ");

scanf("%d", &novo -> num);

printf("\n");

return novo;

}

}

void insere(node *FILA){

node *novo = aloca();

novo -> prox = NULL;

if(vazia(FILA)) FILA -> prox = novo;

else{

node *tmp = FILA -> prox;

while(tmp -> prox!=NULL)

tmp = tmp -> prox;

tmp -> prox = novo;

}

tam++;

}

node *retira(node *FILA){

if(FILA -> prox == NULL){

printf("Fila ja esta vazia.\n");

return NULL;

}

else{

node *tmp = FILA -> prox;

FILA -> prox = tmp ->prox;

tam--;

return tmp;

}

}

void exibe(node *FILA{

if(vazia(FILA)){

printf("Fila vazia!\n\n");

return;

}

node *tmp = FILA -> prox;

int count;

printf("Valores do vetor:\n\n");

for(count = 0; count < tam; count++){

printf("Posicao[%d] -> %d.\n",count +1, tmp ->num);

tmp = tmp -> prox;

printf("\n");

}

}

void libera(node *FILA){

if (!vazia(FILA)){

node *proxNode, *atual;

atual = FILA -> prox;

while(atual != NULL){

proxNode = atual -> prox;

free(atual);

atual = proxNode;

}

}

}


Portanto, no algoritmo apresentado foi realizado um menu de opções, em cada opção existe uma função correspondente para realizar a ação, tais como: inserir, apagar, criar e mostrar o conteúdo da lista, como foi solicitado.

User badge image

Joao Andre

Há mais de um mês

TADFila.h

#include<stdlib.h>

struct No {
        int info;
        struct No *prox;
    };
    typedef struct No No;
    //--------------------------------------------------------------------------
    void init(No **fila); //Inicializa a fila
    void enqueue(No **fila, int info);//Insere no fim na fila
    void deenqueue(No **fila, int *info);//Retira o da fila (FIFO)
    void show(No *fila);//Exibe a fila
    char isEmpty(No *fila);//Verifica se a fila esta vazia
    int lenght(No *fila);// retorna o tamanho da fila
    void clearQueue(No **queue);//zera a fila
    void killNode(No **fila, int info);//Exclui um no da fila;
    //--------------------------------------------------------------------------
    void init(No **fila){
        *fila=NULL;
    }
    /*------------------------------------------------------------------------*/
    void enqueue(No **fila, int info){
        No *nova=(No*)malloc(sizeof(No));
        No *aux;
        nova->info=info;
        nova->prox=NULL;
        
        if(*fila==NULL){
            *fila=nova;
        }else{
           aux=*fila;
            while(aux->prox!=NULL){
                aux=aux->prox;
            }
            aux->prox=nova;
        }
    }
    /*------------------------------------------------------------------------*/
    void deenqueue(No **fila, int *info){
        No *aux;
        if(*fila!=NULL){    
            aux=*fila;
            *info=(*fila)->info;
            *fila=(*fila)->prox;
            free(aux);
        }
    }
    /*------------------------------------------------------------------------*/
    char isEmpty(No *fila){
        return(fila==NULL);
    }
    /*------------------------------------------------------------------------*/
    void list(No *fila){
        while(fila!=NULL){
            printf("[%d]",fila->info);
            fila=fila->prox;
        }
    }
    /*------------------------------------------------------------------------*/
    int lenght(No *fila){
        int cont=0;
        while(fila!=NULL){
            cont++;
            fila=fila->prox;
        }
        return cont;
    }
    void clearQueue(No **queue){
        No *aux;
        while(*queue!=NULL){
            aux=*queue;
            *queue=(*queue)->prox;
            free(aux);
        }
    }
   /*------------------------------------------------------------------------*/
    void killNode(No **fila, int info){
        No *aux=*fila,*ant;
        while(aux!=NULL && aux->info!=info){
            ant=aux;
            aux=aux->prox;
        }
        if(aux!=NULL){
            ant->prox=aux->prox;
            free(aux);
        }
    }

User badge image

Joao Andre

Há mais de um mês

Arquivo principal:

#include"TADFila.h"


/*
 *  
 */

/*---------------------------------------------------------------------------*/
int main() {
    char menu[7][28];
    int op, aux;
    No *fila;
    init(&fila);
    strcpy(menu[0], "[1] Inserir elementos na fila\n");
    strcpy(menu[1], "[2] Retirar elementos da fila\n");
    strcpy(menu[2], "[3] Exibir elementos da fila\n");
    strcpy(menu[3], "[4] Exibir tamanho da fila\n");
    strcpy(menu[4], "[5] Destruir a fila\n");
    strcpy(menu[5], "[6] tabela AscII\n");
    strcpy(menu[6], "[7] Sair\n");
    do {
        for (int i = 0; i < 7; i++)
            printf(menu[i]);

        scanf("%d", &op);
        switch (op) {
            case 1:
                for (int i = 0; i < 30; i++)
                    enqueue(&fila, i);
                printf("Total elementos na fila [%d]\n", lenght(fila));
                scanf("%d", &aux);
                break;
            case 2:
                deenqueue(&fila, &aux);
                printf("Elemento retirado [%d]\n", aux);
                printf("Total elementos restantes [%d]\n", lenght(fila));
                scanf("%d", &aux);
                break;
            case 3:
                list(fila);
                scanf("%d", &aux);
                break;
            case 4:
                printf("Total elementos restantes [%d]\n", lenght(fila));
                scanf("%d", &aux);

                break;

            case 5:
                while (!isEmpty(fila)) {
                    deenqueue(&fila, &aux);
                }
                printf("Total elementos restantes [%d]\n", lenght(fila));
                scanf("%d", &aux);

                break;
            case 6:
                for(char i=0;i<256;i++){
                    printf("%d - [%c]",i,i);
                       
                }
                scanf("%d",&aux);
                break;
        }
    } while (op != 6);
}

User badge image

Carlota

Há mais de um mês

Bom dia!

O programa está em duas partes?

Essa pergunta já foi respondida por um dos nossos especialistas