用栈和队列解决回文字符串

1、用栈和队列解决回文字符串

栈和队列的实现以及基本功能函数请参考:https://blog.csdn.net/qq_50504109/article/details/120330818和https://blog.csdn.net/qq_50504109/article/details/120384457(队列里面的数据我用的是int,你可以改成char类型)

/**
 *
 *
 *   判断是否为回文数其实很简单的,既然是回文数那么肯定满足对称性
 *   那么我们可以使用栈和队列的特性,
 *   先让数据进入队列和栈
 *   然后在出栈和队列,这个时候(假如输入:a+b&b+a@) 就会出现第一个a和最后一个a匹配,第二个b和倒数第二b匹配
 *   匹配结束的条件就是队列或者栈空,只要这个条件满足,那么就是回文,否则,不是
 */
#include
#include "InstanceQueue1.c"
#include"InstanceSqeStack.c"


int main(){
    int isPalindrome();
    isPalindrome();

}

int isPalindrome(){

    Queue Q = InitQueue();
    Sqe S = InitStack();
    printf("输入要判断的字符串,以@结束:");
    char data[MAXSIZE];
    int i = 0;
    scanf("%c",&data[i]);
    do{
        push(S,data[i]);
        EnterQueue(Q,data[i]);
        i++;
        scanf("%c",&data[i]);
    } while (data[i] != '@');

    char stackData = '\0',queueData = '\0';

    while(!isEmpty(S)){

            pop(S,&stackData);
            DeleteQueue(Q,&queueData);
        if (stackData != queueData){
              printf("该字符串不是回文字符串!");
            return -1;
        }

    }
    printf("该字符串是回文字符串!");
    return 1;

}

你可能感兴趣的:(数据结构,c语言,数据结构)