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; }
浙公网安备 33010602011771号