試寫一個算法,識別依次讀入的一個以@爲結束符的字符序列是否爲形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。輸出YES或者NO。算法
#include "stdio.h"spa
#include "stdlib.h"get
#define MAX 1024it
struct dataio
{top
int data[MAX];di
int top;while
};co
typedef struct data SEQSTACK;字符
SEQSTACK *init_seqstack(void) /*初始化棧*/
{
SEQSTACK *head;
head=(SEQSTACK *)malloc(sizeof(SEQSTACK));
if(!head)
return NULL;
else
{
head->top=-1;
return head;
}
}
int empty_seqstack(SEQSTACK *head) /*判斷棧是否爲空*/
{
if(head->top==-1)
return 0;
else
return 1;
}
int push_seqstack(SEQSTACK *head,char num) /*入棧*/
{
if(head->top==MAX-1)
return 1;
else
{
head->top++;
head->data[head->top]=num;
return 0;
}
}
void pop_seqstack(SEQSTACK *head,char *num) /*出棧*/
{
*num=head->data[head->top];
head->top--;
}
int top_seqstack(SEQSTACK *head) /*棧頂元素*/
{
if(!empty_seqstack(head))
return 0;
else
return head->data[head->top];
}
int main()
{
SEQSTACK *head;
int h=1;
char c,x,d;
head=init_seqstack();
c=getchar();
while(c!='&')
{
push_seqstack(head,c);
c=getchar();
}
c=getchar();
while(c!='@'&&empty_seqstack(head)==1)
{
x=top_seqstack(head);
pop_seqstack(head,&d);
if(c==x)
c=getchar();
else{
h=0;
break;
}
}
if(h==1)
printf("YES\n");
else
printf("NO\n");
return 0;
}