Baixe o app para aproveitar ainda mais
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; }
Compartilhar