• 自动机转换


    #include<stdio.h>
    #define N 30
    char str[N]={NULL};
    void Print(int i,char y);
    int st[N];
    int t=0,k=0;
    struct node//定义一个队列
    {
        char data;
        struct node * next;
    };
    typedef struct node QueueNode;
    struct node2//定义一个链队列
    {
        QueueNode *front;
        QueueNode *rear;
    };
    typedef struct node2 Queue;
    Queue InitQueue()//初始化队列
    {
        Queue Q;
        Q.front=(QueueNode *)malloc(sizeof(QueueNode));
        Q.front->next=NULL;
        Q.rear=Q.front;
        return(Q);
    }
    Queue InserQ(Queue Q,char x)//x进队列
    {
        QueueNode *p;
        p=(QueueNode *)malloc(sizeof(QueueNode));
        p->data=x;
        p->next=NULL;
        Q.rear->next=p;
        Q.rear=p;
        return(Q);
    }
    Queue DeleteQ(Queue Q)//出队列
    {
        int i=t++,j;
        QueueNode *p;
        char y=NULL;
        if(Q.front==Q.rear)
        {
            printf("队列为,无法出队列!");//判断队列是否为空
            return(Q);
        }
        p=Q.front->next;
        y=Q.front->next->data;//将队列中的元素赋值给y
        Q.front->next=p->next;
        if(p==Q.rear)
            Q.rear=Q.front;
        str[t]=y;
        st[k]=t;
        if(y!='|')
        {
            if(p->next->data=='*'&&p->next!=NULL)
            {
                str[t]='~';
                Print(0,'~');
                str[t+1]=y;
                Print(t,y);
                str[t+2]='~';
                k--;
                Print(t,'~');
                free(p->next);
            }
            else
                Print(i,y);
        }
        if(y=='|')
        {
            k--;
            t--;
        }
        k++;
        free(p);
        return Q;
    }
    void Print(int i,char y);//调用函数来判断并输出
    main()
    {
        char x,y;
        Queue p,q;
        p=InitQueue();
        printf("请输入正规式:");
        while(scanf("%c",&x)==1&&x!='\n')//大神的方法,牛
            p=InserQ(p,x);
        q=p;
        while(p.front!=p.rear)
            p=DeleteQ(p);
    }
    void Print(int i,char y)//调用函数来判断并输出
    {
        printf("f(%d,%c)=%d\n",i,y,st[k]);
    
        memset(str,0,N);//清空数组str里的所有元素
    }
  • 相关阅读:
    HDU 4772 Zhuge Liang's Password (矩阵旋转)
    POJ 1141 Brackets Sequence(区间DP)
    POJ 2531 Network Saboteur (DFS)
    HDU 2680 Choose the best route (最短路)
    HDU 1285 确定比赛名次 (预处理+拓扑排序)
    HDU 4540 威威猫系列故事——打地鼠 (DP)
    HDU 2899 Strange fuction (二分)
    HDU 3485 Count 101(DP)
    codeforces 510c (拓扑排序)
    codeforces 510B Fox And Two Dots(dfs)
  • 原文地址:https://www.cnblogs.com/YY0302/p/6144228.html
Copyright © 2020-2023  润新知