Estrutura de dados em C -> Pilhas

Publicado por Thiago Gallo 29/10/2004

[ Hits: 27.038 ]

Download palindromo.c




Este é um programinha bem simples pra checar a existencia de um palindromo ( uma palavra ou frase que pode ser lida invertida tendo o mesmo sentido ), exemplo: "O Galo nada no lago".
O programa foi feito para mostrar uma possivel implementacao de pilhas em C.

  



Esconder código-fonte

#include <stdio.h>
#include <string.h>

/////////////////////////////////////////////////////////////
////////////////////////// defines //////////////////////////
/////////////////////////////////////////////////////////////

#define MAX 100          // mudar tamanho da pilha
typedef char TIPO_STACK; // mudar o tipo de pilha

/////////////////////////////////////////////////////////////
///////////////////// variaveis globais /////////////////////
/////////////////////////////////////////////////////////////

TIPO_STACK stack[MAX];
int top = -1;

/////////////////////////////////////////////////////////////
/////////////////// protótipos de funções ///////////////////
/////////////////////////////////////////////////////////////

void pop( TIPO_STACK * );
void push( TIPO_STACK  );

////////////////////////////FUNÇÃO///////////////////////////
//////////////////////////// MAIN ///////////////////////////
/////////////////////////////////////////////////////////////
int main(void)
{
         char fraseOriginal[MAX], fraseInvertida[MAX];
         int i, tamanho;
      
         printf("\n=== Checar existencia de palindromo ===\n\n    Entre com a frase a ser checada \n(sem caracteres especiais e sem espacos) \n\nFrase: ");
         scanf("%s", fraseOriginal);

         //// coloca frase na pilha ////
   
         tamanho = strlen( fraseOriginal );

         for( i = 0; i < tamanho; i++ )
                   push( fraseOriginal[i] );
   
   
          //// tira frase da pilha, agora invertida ////
   
          for( i = 0; i < tamanho; i++ )
                    pop( &fraseInvertida[i] );   
   
      
          fraseInvertida[tamanho] = '{FONTE}'; // finaliza string invertida

          //// mostra frase invertida ////
          printf("Frase Invertida: %s", fraseInvertida);
   
          //// checa se as duas strings sao iguais ////
          if( !strcmp( fraseOriginal, fraseInvertida) )
                     printf("\nResultado: Confere, palindromo existente\n\n");
   
          else
                     printf("\nResultado: Nao confere\n\n");
   
           return ( 0 );
    
} // fim main    

////////////////////////////FUNÇÃO///////////////////////////
/// Nome: pop()                                           ///
/// Descricao: remove elemento da pilha                   ///
/////////////////////////////////////////////////////////////

void pop( TIPO_STACK *elemento )
{
          if( top == -1 ) // pilha vazia
                   printf("\npilha vazia\n");
   
          else {
                    *elemento = stack[top];
                    top--;
          }
   
} // fim funcao

////////////////////////////FUNÇÃO///////////////////////////
/// Nome: push()                                                    ///
/// Descricao: insere elemento na pilha                    ///
//////////////////////////////////////////////////////////////

void push( TIPO_STACK elemento )
{
          if( top == MAX ) // pilha cheia
                    printf("\npilha cheia\n");
   
          else {
      top++;   
                    stack[top] = elemento; 
          }
} // fim funcao

Scripts recomendados

Intercalador de vetores em NCURSES com memória dinâmica

Calculadora simples

Conversão do número de dias em anos (meu segundo programa em C)

Jogo do adivinha para descontrair..

Cálculo do M.M.C


  

Comentários
[1] Comentário enviado por yurirbraz em 16/01/2008 - 20:31h

Bom exemplo... Mas não é uma pilha. "Uma pilha é um conjunto ordenado de itens no qual novos itens podem ser inseridos e a partir do qual podem ser eliminados itens em uma extremidade chamada topo da pilha."

[2] Comentário enviado por jmwho em 11/05/2022 - 12:56h


#include <stdio.h>
#include <string.h>

#define MAX 100
typedef char TIPO_STACK;

TIPO_STACK stack[MAX];
int top = -1;

void pop(TIPO_STACK *);
void push(TIPO_STACK);

int main(void)
{
system("clear||cls");
char fraseOriginal[MAX], fraseInvertida[MAX];
int i, tamanho;

printf("\n Checar existencia de palindromo\n\n Entre com a frase a ser checada \n (sem caracteres especiais e sem espacos) \n\n Frase: ");
scanf("%[^\n]", fraseOriginal);

tamanho = strlen(fraseOriginal);

for (i = 0; fraseOriginal[i]; i++)
{
fraseOriginal[i] = tolower(fraseOriginal[i]);
}

for (i = 0; i < tamanho; i++)
push(fraseOriginal[i]);

for (i = 0; i < tamanho; i++)
pop(&fraseInvertida[i]);

strcpy(fraseInvertida, fraseOriginal);

// Inverter a palavra copiada
strrev(fraseInvertida);

printf(" Frase Invertida: %s", fraseInvertida);

if (!strcmp(fraseOriginal, fraseInvertida))
printf("\n A palavra e palindroma\n\n");

else
printf("\n A palavra nao e palindroma\n\n");

return (0);
}

void pop(TIPO_STACK *elemento)
{
if (top == -1) // pilha vazia
printf("\n Pilha vazia\n");

else
{
*elemento = stack[top];
top--;
}
}

void push(TIPO_STACK elemento)
{
if (top == MAX) // pilha cheia
printf("\n Pilha cheia\n");

else
{
top++;
stack[top] = elemento;
}
}


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts