#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");
}

這是問題截圖,好像沒辦法判斷,不知道代碼哪里出錯了??
麻煩說詳細一點,我的程式好幾個都出現了運行一半不動了的問題,不知道是不是共性問題
非常感謝!!!
uj5u.com熱心網友回復:
#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");
}
供參考~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/238240.html
標籤:C語言
上一篇:用*號列印實型心形圖案
