Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ajuda com pilha estática


R!ck

Pergunta

Olá colegas, sou novato por aqui e queria saber se podem me ajudar.

Preciso informar o maior valor numa pilha, mas ando apanhando se alguém tiver como dar um help.

O código...

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define tamanho_pilha 10
/*1) Implementar as funções init, push, pop, stacktop e empty . 

2) Crie uma função (showStack) que exiba todos os elementos de uma pilha.

3) Crie um programa que receba via teclado um conjunto de dez números que serão 
colocados em uma pilha. Usando a função (showStack) exiba a pilha. 
Em seguida desempilhe os números, informando cada número desempilhado. Usando 
a função (showStack) exiba a pilha novamente. 

5) Utilizando o programa criado na 3ª questão, crie uma função que, após carregar a pilha,
informe o maior elemento e seu índice.
*/

typedef struct
{
   int top;
   int itens[tamanho_pilha];
}pilha;

void init(pilha *p)
{
     p->top=-1;
}

void top(pilha *p)
{
   if(isempty(p))
   {
      printf("\n Stack underflow \n");
   }
   else
   {
      printf("\n O primeiro elemento da pilha e %d", p->itens[p->top]);
   }
     
}

int isempty(pilha *p)
{
    if(p->top==-1)
       return 1;
    else
       return 0;
}

int isfull(pilha *p)
{
   if(p->top==tamanho_pilha-1)
      return 1;
   else
      return 0;
}

void push(pilha *p, int n)
{
   if(isfull(p))
   {
      printf("\n stack overflow \n");
   }
   else
   {
      p->top++;
      p->itens[p->top]=n;
   }   
}

int pop(pilha *p)
{
   if(isempty(p))
   {
      printf("\n stack underflow \n");
   }
   else
   {
      return p->itens[p->top--];
   }
}

void stacktop(pilha *p)
{
   if(isempty(p))
   {
      printf("\n Underflow \n");
   }
   else
   {
      printf("\n O primeiro elemento da pilha e %d \n",p->itens[p->top]);
   }
}

void showstack(pilha *p)
{
   int i;
   if(isempty(p))
   {
      printf("\n stack underflow \n");
   }
   else
   {
      for(i=0;i<=p->top;i++)
      {
         printf("\n %do elemento =%d",i+1,p->itens[i]);
      }
      printf("\n");       
   }
}

void funcmaior (pilha *p, int i,int maior)
{
   if(i<p->itens[i])
   {
      if(p->itens[i]>maior)
      {
         maior=p->itens[i];
      }
      i++;/*
      funcmaior(p->itens[i],0,0);*/
   }    
   printf("\n O maior elemento da pilha e %d \n",maior);    
}


int main()
{
int i,num;

pilha p;
init(&p);

for(i=0;i<1;i++)
{   
   for(i=0;i<10;i++)
   {
      printf("Informe um valor:");
      scanf("%d",&num);
      push(&p,num);   
   }

   showstack(&p);   
   funcmaior(&p);

   for(i=0;i<10;i++)
   {
      top(&p);
      printf("\n E Sera eliminado da pilha...");
      pop(&p);   
   }
   printf("\n ");
   showstack(&p);
}
system("pause");
}
Como não fixei muito bem esse lance de maiores e menores valores estudando c. Me deparei com essa dúvida em estrutura =/ O maior problema está nessa função mesmo. = /
void funcmaior (pilha *p, int i,int maior)
{
   if(i<p->itens[i])
   {
      if(p->itens[i]>maior)
      {
         maior=p->itens[i];
      }
      i++;/*
      funcmaior(p->itens[i],0,0);*/
   }    
   printf("\n O maior elemento da pilha e %d \n",maior);    
}

Bom, espero ansioso por resposta. Tomara que aprenda bastante aqui e possa ensinar também. Até logo. = ]

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Aweee! Apanhei mais consegui fazer. =]

Mudei a função maior para...

void funcmaior(pilha *p)
{
   int i,maior,ind;
   for(i=p->top;i>=0;i--)
   {
      if(i==p->top)
      {
         maior=p->itens[i];
         ind=i;
      }
      else
      {
         if(p->itens[i]>maior)
         {
            maior=p->itens[i];
            ind=i;
         }
      }
      
   }
   printf("\n\n Maior elemento da pilha é: %d" "\n No indice: %d \n",maior,ind);
}

...e pegou tranquilo. = ]

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...