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?
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);
}
}
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);
}
Para escrever sua resposta aqui, entre ou crie uma conta
Compartilhar