Estrutura de dados em C -> Pilhas
Publicado por Thiago Gallo 29/10/2004
[ Hits: 27.183 ]
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.
#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
Número Quadrado perfeito e capicúa
Escrevendo um arquivo Unicode em C#
Conversão do número de dias em anos (meu segundo programa em C)
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Problemas com Driver NVIDIA (0)
Programa fora de escala na tela do pc (19)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)









