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; }