Flipper for the application of queues and stacks to write algorithms every day

Using the nature of the stack to realize data inversion, there is no technology, but it was stuck for a long time, that is, the input of scanf, and finally changed to cin
#include<iostream>
#include<cstdio>
#include<string.h>
#include<stack>
#include<queue>
using namespace std ;
#define MAX 105
struct Node{
    int num ;
    char state ;
};
Node nodes[MAX];
stack<Node> reverse_stack;
queue<Node> reverse_queue ;
void stackReverse(stack<Node>&from , queue<Node>&to ){

    Node temp ;
    while(!from.empty())
    {
        temp =from.top();   from.pop();
        if(temp.state=='U')
            temp.state ='D' ;
        else
            temp.state = 'U';
        to.push(temp);
    }
    while(!to.empty())
    {
        from.push(to.front());
        to.pop();
    }
}

void trans(stack<Node>&from  , stack<Node>&to)
{
    int index = 1 ;
    while(!to.empty())
    {
        reverse_stack.push(to.top());
        to.pop();
    }
    while(!from.empty())
    {
       reverse_stack.push(from.top());
       from.pop();
    }
    while(!reverse_stack.empty())
    {
        nodes[index++] = reverse_stack.top();
        reverse_stack.pop();
    }
}
int main(){
    int Num,state ,i,j;
    char opt ;
    int case_num = 1 ;
    while(scanf("%d",&Num)&&Num!=0)
    {
        stack<Node> left_stack;
        stack<Node> right_stack;
        for(i= 1;i <=Num ; i ++ )
        {
            cin>>nodes[i].state;
            nodes[i].num = i;
        }
        int from = 1, to = Num;
        left_stack.push(nodes[from]);
        right_stack.push(nodes[to]);
        while(from!=to-1)
        {
            cin >> opt;
            if(opt=='R')
            {
                to--;
                stackReverse(right_stack,reverse_queue);
                right_stack.push(nodes[to]);
            }else {
                from ++;
                stackReverse(left_stack,reverse_queue);
                left_stack.push(nodes[from]);
            }
        }
        cin >> opt;
        if(opt == 'R')
        {
            stackReverse(right_stack,reverse_queue);
            trans(right_stack,left_stack);
        }
        else
        {
             stackReverse(left_stack,reverse_queue);
             trans(left_stack,right_stack);
        }
        scanf("%d",&Num);
        int temp ;
        printf("Pile %d\n",case_num++);
        for(i = 1 ; i <= Num ; i ++)
        {
            scanf("%d",&temp);
            if(nodes[temp].state == 'U')
                printf("Card %d is a face up %d.\n",temp ,nodes[temp].num);
            else
                printf("Card %d is a face down %d.\n",temp ,nodes[temp].num);
        }
    }
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325566344&siteId=291194637