70,037
社区成员
发帖
与我相关
我的任务
分享#include <stdio.h>
#include <stdlib.h>
#define MAXQSIZE 100
#define ERROR 0
#define OK 1
typedef struct{
char *base;
int front;
int rear;
}SqQueue;
void InitQueue(SqQueue *Q) //建立顺序队列
{
Q->base=(char*)malloc(MAXQSIZE*sizeof(char));
if(!Q->base) exit(1);
Q->front=Q->rear=0;
}
int EnQueue(SqQueue *Q,char e)
{
if((Q->rear+1)%MAXQSIZE==Q->front) return ERROR; //队列满条件
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return OK;
}
int DeQueue(SqQueue *Q,char *e) //从队列头删除一个元素
{
if(Q->front==Q->rear) return ERROR; //队列空条件
*e=Q->base[Q->front];
Q->front=(Q->front+1)%MAXQSIZE;
return OK;
}
int DeQueue_rear(SqQueue *Q,char *e) //从队列尾删除一个元素
{
if(Q->front==Q->rear) return ERROR; //队列空
*e=Q->base[Q->rear];
Q->rear=(Q->rear-1)%MAXQSIZE;
return OK;
}
int GetHead(SqQueue Q,char *e)
{
if(Q.front==Q.rear) return ERROR; //队列空
*e=Q.base[Q.front];
return OK;
}
int QueueLength(SqQueue *Q)
{
return (Q->rear-Q->front+MAXQSIZE)%MAXQSIZE;
}
int CheckSymmetry(SqQueue *Q,char ch[])
{
InitQueue(Q);
int i=0;
char *e,*c;
while(ch[i]!='@') //@前字符入队列
{
EnQueue(Q,ch[i]);
i++;
}
i++;
while(ch[i]!='#') //@后#前字符入队列
{
EnQueue(Q,ch[i]);
i++;
}
while(QueueLength(Q)!=0)
{
if(!DeQueue(Q,c)) return ERROR;//取队头元素
if(!DeQueue_rear(Q,e)) return ERROR;//取队尾元素
if(*c!=*e) return 0;
}
if(Q->front==Q->rear) return 1; //队列为空,成功对称
}
int main()
{
SqQueue Q;
//Q=(SqQueue*)malloc(sizeof(*Q));
//if(!Q) exit(1);
int i=0;
char ch[100]={'0'},c;
do{
printf("请输入一个字符(形如a+b@b+a#的序列):\n");
scanf("%c",&c);
getchar();
ch[i]=c;
i++;
}while(c!='#');
if(CheckSymmetry(&Q,ch)) printf("是中心对称序列\n");
else printf("不是中心对称序列\n");
}
#include <stdio.h>
#include <stdlib.h>
#define MAXQSIZE 100
#define ERROR 0
#define OK 1
typedef struct{
char *base;
int front;
int rear;
}SqQueue;
void InitQueue(SqQueue *Q) //建立顺序队列
{
Q->base=(char*)malloc(MAXQSIZE*sizeof(char));
if(!Q->base)
exit(1);
Q->front = Q->rear = 0;
}
int EnQueue(SqQueue *Q,char e)
{
if((Q->rear+1)%MAXQSIZE==Q->front) return ERROR; //队列满条件
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return OK;
}
int DeQueue(SqQueue *Q,char *e) //从队列头删除一个元素
{
if(Q->front==Q->rear)
return ERROR; //队列空条件
*e=Q->base[Q->front];
Q->front=(Q->front+1)%MAXQSIZE;
return OK;
}
int DeQueue_rear(SqQueue *Q,char *e) //从队列尾删除一个元素
{
if(Q->front == Q->rear)
return ERROR; //队列空
//*e=Q->base[Q->rear];
*e=Q->base[Q->rear-1];
Q->rear=(Q->rear-1)%MAXQSIZE;
return OK;
}
int GetHead(SqQueue Q,char *e)
{
if(Q.front==Q.rear)
return ERROR; //队列空
*e=Q.base[Q.front];
return OK;
}
int QueueLength(SqQueue *Q)
{
return (Q->rear-Q->front+MAXQSIZE)%MAXQSIZE;
}
int CheckSymmetry(SqQueue *Q,char ch[])
{
InitQueue(Q);
int i=0;
//char *e,*c;
char e, c;
while(ch[i]!='@') //@前字符入队列
{
EnQueue(Q,ch[i]);
i++;
}
i++;
while(ch[i]!='#') //@后#前字符入队列
{
EnQueue(Q,ch[i]);
i++;
}
while(QueueLength(Q)!=0)
{
if(!DeQueue(Q, &c))
return ERROR;//取队头元素
if(!DeQueue_rear(Q, &e))
return ERROR;//取队尾元素
printf("%c:%c\n", c, e);
if(c != e)
return 0;
}
if(Q->front==Q->rear)
return 1; //队列为空,成功对称
return 0;
}
int main(void)
{
SqQueue Q;
//Q=(SqQueue*)malloc(sizeof(*Q));
//if(!Q) exit(1);
int i=0;
char ch[100]={'0'}, c;
do{
printf("请输入一个字符(形如a+b@b+a#的序列):\n");
scanf("%c",&c);
getchar();
ch[i]=c;
i++;
}while(c != '#');
if(CheckSymmetry(&Q,ch))
printf("是中心对称序列\n");
else
printf("不是中心对称序列\n");
}