Informática, perguntado por alessandraoliveiraso, 1 ano atrás

Faça um programa em linguagem C, que implemente uma fila simples de números inteiros, com quantidade dinâmica de elementos a serem digitados pelo usuário e de forma que permita as seguintes interações.

Mostrar elementos da pilha desordenados (ou seja, na sequencia em que o usuário inseriu os elementos);

Mostrar elementos da pilha em ordem crescente;

Mostrar elementos da pilha em ordem decrescente;

Remover elementos da pilha;

Inserir elementos da pilha;

Obs: O método de ordenação a ser utilizado é BubbleSort

Soluções para a tarefa

Respondido por alexandrefaroni
6

Resposta:

Estrutura Pilha embora o enunciado seja fila a solicitação de inserir, mostrar, retirar ... é de pilha

#include <stdio.h>

#include <stdlib.h>

   int w=0; //contador geral

   

   struct no

{

 int valor;

 struct no *proximo;

}*topo, *aux;

 

void Inserir(void);  

void Remover(void);  

void Mostrar(void);  

void MostrarOrdenado(int ordem);

 

int vazio(struct no *campo);

 

void bubble_sortCre(int *V, int N);

   void bubble_sortDec(int *V, int N);

 

  int main() //ponto onde o programa inicia sua execu??o ou entrada principal do programa

  {

 topo=NULL;

 int opcao;

 int sair=1;

 

 while (sair>0&&sair<6)  

 {

  system("cls");  

  printf("Escolha a opcao desejada: ");

  printf("\n1- Mostrar elementos da pilha original");

  printf("\n2- Mostrar elementos da pilha em ordem crescente");

  printf("\n3- Mostrar elementos da pilha em ordem decrecente");

  printf("\n4- Remover elemento no topo da Pilha");

  printf("\n5- Inserir elemento no topo da Pilha");

  printf("\n6- Sair do programa");

  printf ("\n");

  printf("\nDigite a opcao: ");

  scanf("%d", &opcao);

 

  if(opcao==1){

   Mostrar(); //chama o m?todo para mostrar elementos da pilha orginal

  }

  else if(opcao==2){

   MostrarOrdenado(1); //chama o m?todo para mostrar elementos da pilha em ordem crescente

  }

  else if(opcao==3){  

      MostrarOrdenado(2); //chama o m?todo para mostrar elementos da pilha em ordem decrescente

  }

  else if(opcao==4){  

    Remover(); //chama o m?todo para remover elemento da pilha

     }

  else if(opcao==5){

   Inserir(); //chama o m?todo para inserir elemento da pilha

  }

  else if(opcao==6){

     system ("pause");  

     exit(0); //encerra o programa

  }

  else{

   printf("Voce digitou uma opcao invalida, favor tentar novamente!\n");

   system ("pause");

  }  

 }    

 system("cls");

 exit(0);  

}

 

void Inserir(void) { //metodo pata inserir elementos na pilha

    int x;

 printf("Digite um numero inteiro para inserir na pilha: ");

 scanf("%i",&x);

 if(aux==NULL){ //inserindo primeiro elemento da pilha

  aux=(struct no *)malloc(sizeof(aux));

  aux->valor=x;

  aux->proximo=NULL;

  //aux->proximo=topo;

  topo=aux;

  printf("Elemento inserido na pilha\n ");

  system("pause");

 }

 else { //inserindo elemento no topo da pilha

  printf("Elemento inserido na pilha\n");

  aux=(struct no *)malloc(sizeof(aux));

  aux->valor=x;

  aux->proximo=topo;

  topo=aux;

  system("pause");

 }

 w++;    

}

 

void Remover(void)

{

  if(vazio(topo)==1)

 {

  printf("Pilha vazia, necessario inserir algum item primeiro\n");

  system ("pause");  

 }  

 else {

           aux=topo;

   topo=aux->proximo;

   free(aux);

   printf("\nElemento removido da pilha");  

  }

 w--;  

 system("pause");

}

void Mostrar(void)//Metodo para mostrar elementos da pilha inicial

{

 printf("O tamanho da pilha eh: %i \n",w);

 if(vazio(topo)==1)  

 {

  printf("Pilha vazia, necessario inserir algum item primeiro\n");

  system ("pause");

 }  

 else

 {

  aux=topo;

  int a =1;

  while(aux!=NULL)

  {          

   printf("Elemento [%i]: %i\n",a,aux->valor);

   aux=aux->proximo;

   a++;  

  }  

  aux=topo;

  system("pause");

 }  

}  

void MostrarOrdenado(int ordem)

{  

 int i, tam;

 tam = w;

 printf("O tamanho da pilha eh: %i \n",tam);

 int vetor[tam];

 i = 0;

 if(vazio(topo)==1){

  printf("Pilha vazia, necessario inserir algum item primeiro\n");

 }  

 else if(ordem==1)

 {

  aux=topo;

  while(aux!=NULL)

  {

   vetor[i]= aux->valor;

         aux=aux->proximo;

         i++;

     }

  aux=topo;

  bubble_sortCre(vetor,tam);

 }

 else if(ordem==2)

 {

  aux=topo;

  while(aux!=NULL)

  {

   vetor[i]= aux->valor;

         aux=aux->proximo;

         i++;

     }

  aux=topo;

  bubble_sortDec(vetor,tam);  

 }

 system("pause");

}

 

void bubble_sortCre(int *V, int N){ //cria m?todo bolha  

     int j, i, aux;  

do {

     j = 0;

     for (i = 0; i < ( N - 1); i++) {

 

/* Verfica se o vetor está em ordem, no caso ele coloca em ordem crescente, para decrescente trocar '>' por '<' */

if (V[i] > V[i+1]) {

  /* Caso não esteja, ordena */

  aux = V[i];

  V[i] = V[i+1];

  V[i+1] = aux;

  j =1;

}

     }

   /* Repete enquanto algum valor estiver fora de ordem */  

   } while (j == 1);

   

   /* Imprime o vetor ordenado em ordem crescente */

   for (i = 0; i < N; i++) {

     printf ("%d \n", V[i]);

   }

   printf ("\n");

 }

 

void bubble_sortDec(int *V, int N){

    int j, i, aux;  

   printf ( " Os numeros em ordem decrescente sao:, \n");

do {

     j = 0;

     for (i = 0; i < ( N - 1); i++) {

 

/* Verfica se o vetor está em ordem, no caso ele coloca em ordem crescente, para decrescente trocar '>' por '<' */

if (V[i] < V[i+1]) {

  /* Caso não esteja, ordena */

  aux = V[i];

  V[i] = V[i+1];

  V[i+1] = aux;

  j =1;

}

     }

   /* Repete enquanto algum valor estiver fora de ordem */  

   } while (j == 1);

   

   /* Imprime o vetor ordenado em ordem crescente */

   

for (i = 0; i < N; i++) {

     printf ("%d \n",  V[i]);

   }

   printf ("\n");

 }

int vazio(struct no *campo)

{

 if(campo==NULL)

 {

  return 1;

 }

 else

 {

  return 0;

 }

}

Perguntas interessantes