Stack && Queue(啊哈!算法)

1.Queue

FIFO

解密一串数字将第一位删除,第二位移到数字串末尾,重复此操作,直到所有数字被删除,被删除的数字依次形成一个新数字串,解密完成,用队列实现该操作

#include<iostream>
using namespace std;
struct queue{
	int data[100];
	int head;
	int tail;
};
int a[9]={6,3,1,7,5,8,9,2,4};
int main(){
	struct queue q;
	q.head=q.tail=0;
	for(int i=0;i<9;i++){
		q.data[q.tail++]=a[i];
	}
	while(q.head != q.tail){
		cout<<q.data[q.head++];
		q.data[q.tail++]=q.data[q.head++];
	}
	return 0;
}

  

2.Stack

FILO

回文数的判断,回文数如AHA,AHH

#include<iostream>
#include<string>
using namespace std;
string k;
int top;
int next;
int stack[100];
int main(){
	cin>>k;
	int len=k.length();
	int mid=len/2-1;
	for(int i=0;i<=mid;i++){
		stack[++top]=k[i];
	}
	if(len%2 == 0){
		next=mid+1;
	}else{
		next=mid+2;
	}
	for(int i=next;i<len;i++){
		if(stack[top--] !=k[i]){
			break;
		}else{
			continue;
		}
	}
	if(top != 0){
		cout<<"NO!";
	}else{
		cout<<"Yes";
	}
	return 0;
}

 综合例题

Card Game----小猫钓鱼

 

 #include<iostream>
 using namespace std;
 struct queue{
     int data[1000];
     int head;
     int tail;
 };
 struct stack{
     int data[1000];
     int top;
 };
 int main(){
     struct queue q1,q2;
     struct stack s1;
     q1.head=q1.tail=1;
     q2.head=q2.tail=1;
     s1.top=0;
    bool flag;
     int temp;
     for(int i=1;i<=6;i++){
         cin>>q1.data[q1.tail++];
    }
    for(int i=1;i<=6;i++){
         cin>>q2.data[q2.tail++];
     }
     while(q1.head!=q1.tail && q2.head !=q2.tail){
         //一方出牌 
         flag=0;
         temp=q1.data[q1.head++];
         for(int i=1;i<=s1.top;i++){
             if(s1.data[i] == temp){
                 flag=true;
                 break;
             }
        }
        if(flag){
            q1.data[q1.tail++]=temp;
            while(s1.data[s1.top] != temp){
                q1.data[q1.tail++]=s1.data[s1.top];
                s1.top--;
            }
        }if(flag ==0 ){
            s1.top++;
            s1.data[s1.top]=temp;
        }
        //对方出牌
        flag=0;
        temp=q2.data[q2.head++];
        for(int i=1;i<=s1.top;i++){
            if(s1.data[i] == temp){
                flag=true;
                break;
            }
        }
        if(flag == 0){
            s1.top++;
            s1.data[s1.top]=temp;
        }
        if(flag){
            q2.data[q2.tail++]=temp;
            while(s1.data[s1.top] !=temp){
                q2.data[q2.tail++]=s1.data[s1.top];
                s1.top--;
            }
        }
    }
    if(q1.head ==q1.tail){
        cout<<"2哥 wins the game!";
        cout<<endl;
        cout<<"2哥手里的牌是:"<<' ';
         for(int i=q2.head;i<=q2.tail-1;i++){
             cout<<q2.data[i]<<' ';
         }
         cout<<endl;
         cout<<"The cards on Table:";
         if(s1.top){
             for(int i=1;i<=s1.top;i++){
                 cout<<s1.data[i]<<' ';
             }
         }else{
             cout<<"Nothing!";
         }
    }
    if(q2.head ==q2.tail){
        cout<<"1哥 wins the game!";
        cout<<endl;
        cout<<"1哥手里的牌是:"<<' ';
         for(int i=q1.head;i<q1.tail;i++){
             cout<<q1.data[i]<<' ';
         }
         cout<<endl;
         cout<<"The cards on Table:";
         if(s1.top){
             for(int i=1;i<=s1.top;i++){
                 cout<<s1.data[i]<<' ';
             }
         }else{
             cout<<"Nothing!";
         }
    }
    return 0;

}

 

posted on 2020-03-26 16:07  二进制dd  阅读(143)  评论(0编辑  收藏  举报

导航