Ir para conteúdo
Luísa Brandão

Ajuda em fila e pilha - linguagem c

Recommended Posts

você conta os elementos de cada pilha separadamente e retorna o maior valor.

Na segunda questão você sempre vai retirar o primeiro elemento da fila e adicionar ao final da outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tive que fazer algumas adaptações como por exemplo criar as pilhas com uma posição a mais pra sinalizar que as pilhas estão vazias por que com esses parâmetros nao há como mudar os valores dos ponteiros de pilha entre as chamadas de funções.

#include<stdlib.h>

typedef struct pilha{
  float valor; 
}Pilha;

void pilha_push(Pilha *p1, float valor){
  p1++;
  p1->valor=valor;
}

float pilha_pop(Pilha *p1){
  return p1->valor;
}

int pilhavazia(Pilha *p1){
  if(p1->valor==-1)
    return 1;
  else
    return 0;
}

int numelementodamaior(Pilha *p1,Pilha *p2){
  float pilhaauxiliar[20];
  int i,contadorpilha1=0,contadorpilha2=0;
  while(!pilhavazia(p1)){
    pilhaauxiliar[contadorpilha1]=pilha_pop(p1--); //O -- no ponteiro foi uma de minhas adaptacoes
    contadorpilha1++;
  }
  for(i=contadorpilha1-1;i>=0;i--)
    pilha_push(p1,pilhaauxiliar[i]);
  while(!pilhavazia(p2)){
    pilhaauxiliar[contadorpilha2]=pilha_pop(p2--);
    contadorpilha2++;
  }
  for(i=contadorpilha2-1;i>=0;i--)
   pilha_push(p2,pilhaauxiliar[i]);
  if(contadorpilha1>contadorpilha2)
    return contadorpilha1;
  else
    return contadorpilha2;
}

int main(){
  Pilha p1[11],
  p2[11],*p1ptr=p1,*p2ptr=p2;
  p1[0].valor=-1;//-1 na primeira posicao significa pilha vazia. Os valores inseridos virao a partir da segunda posicao e em diante.
  p2[0].valor=-1;
  
  /*Aqui se insere quantos valores quiser nas duas pilhas sempre apos isso apontando os ponteiros de pilha para as posicoes das pilhas aonde estiverem os ultimos elementos que foram inseridos*/

  printf("Numero de elementos da maior pilha:%d",numelementodamaior(p1ptr,p2ptr));
  system("pause");
}

 

#include<stdlib.h>

typedef struct fila{
  int valor;
  struct fila *proximo;
}Fila;

Fila *fila_cria(){
  return malloc(sizeof(Fila));
}

int fila_retira(Fila *f){
  int valor;
  while(f->proximo)
    f=f->proximo;
  valor=f->valor;
  
  f->proximo=NULL;

  return valor;


} 

void fila_insere(Fila *f,int v){
  while(f->proximo)
    f=f->proximo;
  f->proximo=malloc(sizeof(Fila));
  f->proximo->valor=v;
  f->proximo->proximo=NULL;
}

void TrocaElementos(Fila *f1,Fila *f2,int n){
  int i,auxiliar;
  
  for(i=0;i<n;i++)
    if(!f1->proximo){
      i++;
      break;
    }
  if(n>i)
    printf("n e maior do que uma das filas. A troca nao pode ser feita.");
  else{
    for(i=0;i<n;i++)
      if(!f2->proximo){
        i++;
        break;
      }
    if(n>i)
      printf("n e maior do que uma das filas. A troca nao pode ser feita.");
    else
      for(i=0;i<n;i++){
        auxiliar=f1->valor;
        f1->valor=f2->valor;
        f2->valor=auxiliar;
        f1=f1->proximo;
        f2=f2->proximo;
      }
  }    
}

void imprimefila(Fila *f){
  do{
    printf("%d\n",f->valor);
    f=f->proximo;
  }while(f);    
}

int main(){
  Fila *f1=fila_cria(),*f2=fila_cria();
  f1->valor=5;
  f1->proximo=NULL;
  f2->valor=10;
  f2->proximo=NULL;
  fila_insere(f1,12);
  fila_insere(f2,13);

  TrocaElementos(f1,f2,1);
  imprimefila(f1);
  
  system("pause");
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

  • Conteúdo Similar

    • Por rsantosfer
      Olá amigos, 
      gostaria de uma ajuda com php,  gostaria de um script para fila de taxi, onde o taxista clica em entrar na fila e vai para o fim da fila, e quando ele clicar em sair da fila, ele some da fila e o anterior vai para o lugar dele. Ao clicar em entrar na fila ele vai para o ultimo lugar. Ja conseguir fazer a tela de login e os botões entrar e sair da fila. Só não estou conseguindo fazer a fila.
      quem pudar ajudar eu agradeço.  
       
       
       


    • Por paulopoxoreo1234@gmail.com
      Dado o trecho de código em C listado abaixo responda as perguntas a seguir.
      Cont = result = 1;
      For ( i=0; i<5; i= i+0.1){
            Cont = cont+i;
            Result  *= cont;
            Printf(“%f", result);
      }
      a)      O que será impresso depois da primeira iteração deste código?
      b)      Quantas vezes este laço precisará ser executado para que encontre a condição de término ?
      c)      Faça um trecho de código em C para quebrar esse laço na decima quinta iteração.
    • Por ednan
      estou precisando de ajuda neste trabalho se alguem souber e puder ajudar agradeço de coraçao
       
    • Por Hokage1
      Boa Tarde estou quebrando a cabeça com um trabalho, podem me ajudar ?:
       
      ara execução do projeto final siga as instruções: 
       
      (Tarefa 1) Elaborar um programa em Linguagem de Programação C com 2 interfaces (telas); uma para o cadastro dos 10 estudantes e outra para os dados analíticos. (Tarefa 2) Somente após finalizar a Tarefa 1, faça uma investigação para identificar quais recursos (não abordados nesta disciplina), em Linguagem de Programação C, que poderiam tornar a construção desta aplicação mais sofisticada e, até mesmo, mais fácil de implementar? Explique (não há necessidade de implementar o novo recurso). Enviar a resposta da Tarefa 1 (código-fonte escrito em Linguagem de Programação C) e da Tarefa 2 para avaliação em um arquivo no formato MS-Word com nome no seguinte padrão: LCC-IA-2020-3-Mod3-Projeto-Seu_Nome.docx (Arquivos nomeados fora deste padrão serão descartados). Use o fórum do Módulo 03 para postar suas dúvidas e/ou colaborar com os colegas.  
      TAREFA 1 – Programa de cadastro e análise de dados de 10 Estudantes:
      1.Tela: Criar a tela a seguir que permita a entrada de dados de 10 estudantes diferentes. Assim que o usuário digitar os dados do último estudante, o programa deverá ir para a 2.tela.
      Tela 1 – Interface (Tela) para cadastro de 10 estudantes
      2.Tela: Criar a tela a seguir que apresente os dados analíticos, a partir dos dados digitados na Tela 1. Na sequência, encerrar o programa.
       
      tela 2 – Interface (Tela) do quadro analítico
      OBSERVAÇÕES:
      Todos indicadores do Quadro Analítico deverão ser calculados (nenhum digitado pelo usuário);
       
      A “Maior Nota Individual” deverá ser a maior nota obtida por um estudante em qualquer uma das 2 avaliações; A “Menor Nota Individual” deverá ser a menor nota obtida por um estudante em qualquer uma das 2 avaliações; A “Média da Sala” deverá ser a média das médias dos 10 estudantes; A “Melhor Média da Sala” deverá ser a maior média obtida por 1 estudante; A “Pior Média da Sala” deverá ser a menor média obtida por 1 estudante.
    • Por joaquim_bezzera
      Estou fazendo um trabalho para a faculdade criando uma estrutura de cadastro de uma corrida. Já consegui fazer grande parte mas não consigo resolver esses pontos. Alguém saberia resolver?

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.