栈的基本操做

试写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如‘序列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;

}

相关文章
相关标签/搜索