队列判断回文

题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
1)建立顺序循环队列SeqQueue。 2)编写程序判断一个字符序列是否是回文。

输入输出格式
输入描述:
字符串
输出描述:
判断的结果,是回文就输出“yes”,否则就输出“no”。
输入输出样例
输入样例#:
复制
abcab
输出样例#:
复制
no

直接数组或者reverse就可ac,这样做可以锻炼一下队列的使用。。。。


#include
#include
#define size  50;
using namespace std;
typedef char ElemType;
typedef struct{
    ElemType data[50];
    int front,rear;
}que;
void initque(que &q){
    q.rear = q.front =0;
}

bool inq(que &q,char x){      //入队函数
if((q.rear+1)%50 == q.front) return false;
q.data[q.rear] = x;
q.rear = (q.rear+1)%size;
return true;
}

bool outq(que &q,char &x ){   //出队函数
    if(q.rear == q.front) return false;
    x = q.data[q.front];
    q.front = (q.front+1)%size;
    return true;
}


int main(){
que q;

initque(q);

char a,b,c,d,e;
char p[100];

gets(p);

int len = strlen(p);
for(int i = 0; i < len; i++){
    inq(q,p[i]);      //输入要判断的样例
}

if(len%2 == 1){    //奇数个就去掉中间的元素
    int t= len/2;
    for(int i = 0; i < t ; i++){
       outq(q,a);
       inq(q,a);
    }
    outq(q,b);

}

int m = len/2;
int t = m;
 
 for(int i = 0; i <t; i ++)
   {
     for(int j = 0; j < m -1;j ++)  //偶数个回文中间两个一定相同,先把队头                     元素放到对尾去判断中间的是否符合
       {
         outq(q,c);
         inq(q,c);
          }
      outq(q,d);   //出队中间的两个判断是否相等
       outq(q,e);
     m--;    //下一次出队入队次数减一
     if(e!= d){cout<<"no"; break;}
      }
      
 if(e == d)
       cout<<"yes";
   



    return 0;
}

你可能感兴趣的:(队列判断回文)