Skip to content

Commit 7901191

Browse files
authored
Merge pull request #10 from iguit0/master
Problema do Palíndromo em C
2 parents 5b48e60 + 06ada2e commit 7901191

File tree

2 files changed

+135
-0
lines changed

2 files changed

+135
-0
lines changed

C/Palindromo.c

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
5+
/*
6+
* Problema do palindromo
7+
* Desenvolvido por Igor Alves (https://github.com/iguit0)
8+
*/
9+
10+
typedef struct sCell{
11+
char info;
12+
struct sCell* next;
13+
}CELULA;
14+
15+
typedef struct sPilha{
16+
CELULA* topo;
17+
}PILHA;
18+
19+
CELULA* criarCelula(){
20+
CELULA* nova;
21+
nova = (CELULA *) malloc(sizeof(CELULA));
22+
return nova;
23+
}
24+
25+
void inicializar(PILHA* p){
26+
p->topo = NULL;
27+
}
28+
29+
int pilhaVazia(PILHA* p){
30+
if(p->topo == NULL) return 1;
31+
else return 0;
32+
}
33+
34+
int push(PILHA* p,char elemento){
35+
CELULA* nova = criarCelula();
36+
if(nova == NULL) return 0;
37+
nova->info = elemento;
38+
nova->next = p->topo;
39+
if(pilhaVazia(p)){
40+
p->topo = nova;
41+
return 1;
42+
}
43+
p->topo = nova;
44+
return 1;
45+
}
46+
47+
char pop(PILHA* p){
48+
CELULA* removida;
49+
char removido;
50+
if(pilhaVazia(p)){
51+
printf("\nPilha Vazia!");
52+
return removido;
53+
}
54+
removida = p->topo;
55+
removido = removida->info;
56+
p->topo = p->topo->next;
57+
free(removida);
58+
return removido;
59+
}
60+
61+
int palindromo(PILHA* p){
62+
if(pilhaVazia(p)){
63+
printf("Pilha Vazia!\n");
64+
return 0;
65+
}
66+
PILHA p2;
67+
inicializar(&p2);
68+
PILHA p3;
69+
inicializar(&p3);
70+
char aux;
71+
char aux2;
72+
while(!pilhaVazia(p)){
73+
aux = pop(p);
74+
if(aux != '.' && aux != ' '){
75+
push(&p2,aux);
76+
}
77+
}
78+
while(!pilhaVazia(&p2)){
79+
aux = pop(&p2);
80+
push(p,aux);
81+
push(&p3,aux);
82+
}
83+
while(!pilhaVazia(&p3)){
84+
aux = pop(&p3);
85+
push(&p2,aux);
86+
}
87+
while(!pilhaVazia(p)){
88+
aux = pop(p);
89+
aux2 = pop(&p2);
90+
if(aux != aux2){
91+
return 0;
92+
}
93+
}
94+
return 1;
95+
}
96+
97+
void imprimirInverso(PILHA* p){
98+
PILHA p2;
99+
inicializar(&p2);
100+
char aux;
101+
if(pilhaVazia(p)) return;
102+
while(!pilhaVazia(p)){
103+
aux = pop(p);
104+
putchar(aux);
105+
push(&p2,aux);
106+
}
107+
while(!pilhaVazia(&p2))
108+
push(p,pop(&p2));
109+
110+
}
111+
112+
int main(){
113+
PILHA p;
114+
inicializar(&p);
115+
int i=0;
116+
char palavra[100];
117+
char inverso[100];
118+
printf("\nPalavra: ");
119+
scanf("%s",palavra);
120+
121+
for(i=0;i<strlen(palavra);i++){
122+
push(&p,palavra[i]);
123+
}
124+
125+
printf("\nImprimindo inverso > ");
126+
imprimirInverso(&p);
127+
putchar('\n');
128+
129+
if(palindromo(&p)==1) printf("\nPalindromo");
130+
else printf("\nNao eh palindromo");
131+
132+
return 0;
133+
}

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ Algoritmos em C/C++, Java, Python, Go e Ruby desenvolvidos como estudo de Algori
6060
|----|-------------------------------------|-------|------|--------|----|------|
6161
| 49 | Lista com 2 Pilhas | C/C++ | Java | [Python](/Python/ListaComPilhas.py) | Go | Ruby |
6262
| 50 | Problema da Soma de 2 Números | C/C++ | Java | [Python](/Python/Soma2Numeros.py) | Go | Ruby |
63+
| 51 | [Palíndromo][49] | [C/C++](/C/Palindromo.c) | Java | Python | Go | Ruby |
6364

6465
Quem tiver interesse em colaborar basta enviar um pull request com seu algoritmo/correção.
6566

@@ -106,3 +107,4 @@ Quem tiver interesse em colaborar basta enviar um pull request com seu algoritmo
106107
[46]: https://pt.wikipedia.org/wiki/Radix_sort
107108
[47]: https://pt.wikipedia.org/wiki/Selection_sort
108109
[48]: https://pt.wikipedia.org/wiki/Shell_sort
110+
[49]: https://pt.wikipedia.org/wiki/Pal%C3%ADndromo

0 commit comments

Comments
 (0)