#include"iostream"usingnamespace std;template<classT>classQueue{public:Queue(){
len =0;
size =30;
dp =new T[size];
start =0;
end =-1;}voidpush(T dat);
T pop();voidtravel();intgetlength();voidchangearray();~Queue();private:int len;//队列的长度
T* dp;//队列的数组int size;//队列的最大容量int start;//头指针int end;//尾指针};template<classT>void Queue<T>::push(T dat){if(len == size){changearray();//一旦长度不够,调用扩容}
end++;
end = end % size;
dp[end]= dat;
len++;}template<classT>void Queue<T>::changearray()//定义扩容函数{
T* tp = dp;
size = size *2;
dp =new T[size];for(int i =0; i < len; i++){*(dp + i)=*(tp + i);}}template<classT>
T Queue<T>::pop(){if(len ==0){printf("队列已空\n");exit(1);}
T temp = dp[start];
start =(start +1)% size;
len--;return temp;}template<classT>void Queue<T>::travel(){int length = len;
cout <<"***********************"<< endl;printf("size-%d\n", len);int t = start;while(length !=0){printf("%d ", dp[t++]);
t = t % size;
length--;}
cout << endl <<"***********************"<< endl;}template<classT>int Queue<T>::getlength(){return len;}template<classT>
Queue<T>::~Queue(){delete[]dp;}intmain(){
Queue<int>queue;for(int i =0; i <60; i++)//环的长度就在这里确定{
queue.push(i +1);}int count =0;
queue.travel();while(queue.getlength()!=1){
count++;int temp = queue.pop();if(count %3==0){
cout << temp <<" is killed!"<< endl;}else{
queue.push(temp);}}
cout << queue.pop()<<" is alive!"<< endl;return0;}
运行结果
***********************
size-60123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960***********************3 is killed!6 is killed!9 is killed!12 is killed!15 is killed!18 is killed!21 is killed!24 is killed!27 is killed!30 is killed!33 is killed!36 is killed!39 is killed!42 is killed!45 is killed!48 is killed!51 is killed!54 is killed!57 is killed!60 is killed!4 is killed!8 is killed!13 is killed!17 is killed!22 is killed!26 is killed!31 is killed!35 is killed!40 is killed!44 is killed!49 is killed!53 is killed!58 is killed!2 is killed!10 is killed!16 is killed!23 is killed!29 is killed!37 is killed!43 is killed!50 is killed!56 is killed!5 is killed!14 is killed!25 is killed!34 is killed!46 is killed!55 is killed!7 is killed!20 is killed!38 is killed!52 is killed!11 is killed!32 is killed!59 is killed!28 is killed!1 is killed!47 is killed!19 is killed!41 is alive!