#include <stdio.h> #include <conio.h> #include "pila.h" #include "cola.h" #include "secuen.h"
#define VERDADERO 1 #define FALSO 0
void RevisarFinDatos(int*seguir){
char rta; *seguir = FALSO;
do { printf("\nDesea seguir ingresando datos ? (s/n)\t"); fflush(stdin); scanf ("%c",&rta); }while ((rta != 's') && (rta != 'n'));
if (rta =='s'){ *seguir = VERDADERO;
} clrscr(); }
void CrearSecuenciaEntrada ( Tsecuencia *se ){
char c; int rsta;
spreparar(se);
RevisarFinDatos (&rsta);
while (rsta == VERDADERO) { fflush(stdin); printf("Ingrese caracter\n"); scanf("%c",&c); sescribir(se,c);
RevisarFinDatos (&rsta);
}
smarcar(se); }
void MandarColayPila ( Tcola *c, Tcola *c2 , Tpila *p){
char ch;
while (!cvacia(c2) && !cllena(c) && !pllena(p)){ csacar(c2,&ch); cponer(c,ch); pponer(p,ch); } }
void MandarSecPilayCola ( Tsecuencia *se,Tcola *c, Tpila *p) {
char ch;
sleerprim(se,&ch);
while (!sfin(se) && !cllena(c) && !pllena(p)){ pponer(p,ch); cponer(c,ch); sleersig(se,&ch); }
if (!sfin(se)) { printf("memoria insuficiente"); exit(0); } }
void SacarElementosHastaCar ( Tpila *p, char dato){
char c;
c = '*' ;
while (!pvacia(p) && c != dato) { psacar(p,&c); } }
void MandarPpalyCpal (Tpila *p, Tcola *p2, Tpila *c, int *cont) {
char ch;
while (!pvacia(p) && !pllena(p2) && !cllena(c) ){ psacar(p,&ch); pponer(p2,ch); *cont = *cont + 1; cponer(c,ch); }
if (!pvacia(p) ) { printf ("memoria insuficiente"); exit(0); } }
void AnalisisPalindromo ( Tpila *p, Tpila *p2, Tcola *c, Tpila *p3, int *es) {
char c1,c2;
c1 = '*'; c2 = '* '; *es = 0;
while (!pvacia(p) && !cvacia(c) && c1 == c2) { psacar(p,&c1); csacar(c,&c2); pponer(p2,c1); pponer(p3,c1); }
if ( c1 == c2) { *es = 1; } }
void MandarPila ( Tpila *p, Tpila *p2 ) {
char c;
while (!pvacia(p2) && !pllena(p)) {
psacar(p2,&c); pponer(p,c); }
if (!pvacia(p2) ) {
printf ("memoria insuficiente"); exit(0); } }
void VaciarCola ( Tcola *c ) {
char ch;
while (!cvacia(c)) { csacar(c,&ch); } }
void MandarCola ( Tcola *c, Tcola *c2) {
char ch;
while (!cvacia(c) && !cllena(c2)) {
csacar(c,&ch); cponer(c2,ch); }
if (!cvacia(c)) { printf ("memoria insuficiente"); } exit(0); }
void VaciarPila ( Tpila *p){
char ch;
while (!pvacia(p)) { psacar(p,&ch); }
}
void SiguienteCaracter (Tcola *c,Tcola *c2,Tpila *p,Tcola *c3,Tpila *p2,int *aux){
int ch;
VaciarPila(p); VaciarCola(c3); VaciarPila(p2);
if ( cvacia(c) ) { MandarColayPila(c,c2,p); csacar(c,&ch); *aux = ch; }else{ if ( cvacia(c2) ) { MandarColayPila(c2,c,p); csacar(c2,&ch); *aux = ch; } } }
main() {
int espal,cont,maslargo; char car,aux; Tpila p,ptop,plar,ppal; Tcola c,caux,cpal; Tsecuencia sent;
maslargo = 2; cont = 0;
pcrear(&p); pcrear(&ptop); pcrear(&plar); pcrear(&ppal);
ccrear(&c); ccrear(&caux); ccrear(&cpal);
CrearSecuenciaEntrada (&sent);
MandarSecPilayCola (&sent,&c,&p);
csacar(&c,&car); aux = car;
while (( !cvacia(&c) || !cvacia(&caux) ) && !pllena(&ppal) && !pllena(&plar) && !cllena(&cpal) && !pllena(&p) && !pllena(&ptop) ) {
SacarElementosHastaCar(&p,aux);
pponer(&ppal,aux); cponer(&cpal,aux);
MandarPpalyCpal(&p,&ppal,&cpal,&cont);
if (cont > 2) {
AnalisisPalindromo(&ppal,&p,&cpal,&plar,&espal);
if (espal == 0) { MandarPila(&p,&ppal); psacar(&p,&car); VaciarPila(&plar); VaciarCola(&cpal); }else{ if ( cont > maslargo ) { maslargo = cont; MandarPila(&ptop,&plar); }
SiguienteCaracter(&c,&caux,&p,&cpal,&ppal,&aux); cont = 0; } }else{ SiguienteCaracter(&c,&caux,&p,&cpal,&ppal,&aux); cont = 0; } }
if (!cvacia(&c) || !cvacia(&caux) ) { printf("Memoria insuficiente\n"); }else{ if ( maslargo > 2) { while (!pvacia(&ptop)) { psacar(&ptop,&car); printf("%c",car); } }else{ printf("No hay palindromo"); } } return (0); }
|