棧的基本操做

試寫一個算法,識別依次讀入的一個以@爲結束符的字符序列是否爲形如‘序列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;

}

相關文章
相關標籤/搜索