Buscar

Palíndromo usando estruturas de dados

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct elemento{
	char dado;
	struct elemento * proximo;
}t_elemento;
typedef struct lista{
	t_elemento * primeiro;
	t_elemento * ultimo;
}t_lista;
typedef struct pilha{
	t_lista * l;
}t_pilha;
typedef struct fila{
	t_lista * l;
}t_fila;
/* INICIO LISTA */
t_lista * criaLista(){
 t_lista * l = (t_lista *)malloc(sizeof(t_lista));
 l->primeiro = NULL;
 l->ultimo = NULL;
 return l;
}
void insereInicio(char valor, t_lista * l){
 t_elemento * novoprimeiro = (t_elemento *)malloc(sizeof(t_elemento));
 novoprimeiro->dado = valor;
 novoprimeiro->proximo = l->primeiro;
 l->primeiro = novoprimeiro;
 if(l->ultimo == NULL){
 l->ultimo = novoprimeiro;
 }
}
void insereFinal(char valor, t_lista * l){
 t_elemento * novoultimo = (t_elemento *)malloc(sizeof(t_elemento));
 novoultimo->dado = valor;
 novoultimo->proximo = NULL; 
 if(l->primeiro == NULL){
 l->primeiro = novoultimo;
 }else{
 l->ultimo->proximo = novoultimo;
 }
 l->ultimo = novoultimo;
}
int removeInicio(t_lista * l){
 if(estaVazia(l)){
 return -1;
 }
 int tmp = l->primeiro->dado;
 t_elemento * removido = l->primeiro;
 l->primeiro = l->primeiro->proximo;
 free(removido);
 if(l->primeiro == NULL){
 l->ultimo = NULL;
 }
 return tmp;
}
int estaVazia(t_lista * l){
 if(l->primeiro == NULL){
 return 1;
 }
 return 0;
}
/* FIM LISTA */
/* INICIO PILHA */
t_pilha * criaPilha(){
 t_pilha * p = (t_pilha *)malloc(sizeof(t_pilha));
 p->l = criaLista();
 return p;
}
void empilhar(char valor,t_pilha * p){
 insereInicio(valor, p->l);
}
char desempilhar(t_pilha * p){
 return removeInicio(p->l);
}
int estaVaziaPilha(t_pilha * p){
 return estaVazia(p->l);
}
/* FIM PILHA */
/* INICIO FILA */
t_fila * criaFila(){
 t_fila * f = (t_fila *)malloc(sizeof(t_fila));
 f->l = criaLista();
 return f;
}
void enfileirar(char valor, t_fila * f){
 insereFinal(valor, f->l);
}
char desenfileirar(t_fila * f){
 return removeInicio(f->l);
}
int estaVaziaFila(t_fila * f){
 return estaVazia(f->l);
}
/* FIM FILA */
int palindromo(char palavra[]){
 int i = 0, retorno=1;
 char letra = 0;
 t_pilha *pilha = criaPilha();
 t_fila *fila = criaFila();
 for(i = 0; i < strlen(palavra); i++) {
 letra = palavra[i];
 if(letra != ' ') {
 empilhar(letra, pilha);
 enfileirar(letra, fila);
 }
 }
 while(1) {
 if(estaVazia(pilha)) {
 break;
 }
 if(desempilhar(pilha) != desenfileirar(fila)){
 retorno = 0;
 }
 }
 return retorno;
}
int main(void){
 int j = 0, i = 0;
 char palavra[100] = {0};
 scanf("%[^\n]", palavra);
 if(palindromo(palavra)) {
 printf("Eh palindrome\n");
 } else{
 printf("Nao eh palindrome!\n");
 }
 return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando

Outros materiais