队列用法示例:解密QQ号

小红给小明一串加密后的数字,同时告诉他解密规则:
首先将第一个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删并将第4个数放到这串数的末尾,再将第5个数删除。。。。直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连载一起就是小明的QQ啦。
小红给小明加密过的一串数是
9
6 3 1 7 5 8 9 2 4
解密后的输出为
6 1 5 9 4 7 2 8 3


代码示例:

import  java.util.Scanner;

public  class  ExampleJiemi {

      public  static  void  main(String[] args) {
           Scanner cin =  new  Scanner(System.  in );
             int  n = cin.nextInt();
             int  a[] =  new  int [101];
             for  (  int  i = 0; i < n; i++) {
                a[i] = cin.nextInt();
           }
           cin.close();
           
             //初始化队列
             int  head = 0;
             int  tail = n;
             while (head < tail){                    //当队列不为空的时候执行循环
                  //打印队首并将队首出队
                System.  out .print(a[head]+  " " );
                head++;
                
                  //先将新队首的数添加到队尾
                a[tail] = a[head];
                tail++;
                
                  //再将队首出队
                head++;
           }
     }
}

也可以使用结构体来实现队列的操作,下面这种写法虽然冗余了一些但是可以加强你对队列的理解。
使用C语言,代码如下:
#include <stdio.h>
struct  queue
{
      int  data[100];
      int  head;
      int  tail;
};

int  main()
{
      struct  queue q;
      int  n = 0;
      // 初始化队列
     q.head = 0;
     q.tail = 0;
     scanf(  "%d" ,&n);
      for ( int  i = 0;i < n;i++)
     {
             // 依次向队列插入  n 个数
           scanf(  "%d" ,&q.data[q.tail]);
           q.tail++;
     }
     
      while (q.head < q.tail)  // 当队列不为空的时候执行循环
     {
             // 打印队首并将队首出队
           printf(  "%d" ,q.data[q.head]);
           printf(  " " );
           q.head++;
             // 先将新队首的数添加到队尾
           q.data[q.tail] = q.data[q.head];
           q.tail++;
             // 再将队首出队
           q.head++;
     }

     getchar();getchar();
      return  0;
}


C语言的结构体也可以用JAVA里面的类实现
package  chapter1_SortingOrder;

import  java.util.Scanner;

class  Queue{
      int  data [] =  new  int [100];      //此处必须要定义一个数组对象而不是声明
      int  head ;
      int  tail ;
}
public  class  ExampleJiemiQQhao {

      public  static  void  main(String[] args) {
           Scanner cin =  new  Scanner(System.  in );
           Queue q =  new  Queue();
           q.  head  = 0;
           q.  tail  = 0;
             int  n = cin.nextInt();
             for  (  int  i = 0; i < n; i++) {
                q.  data [q.  tail ] = cin.nextInt();
                q.  tail ++;
           }
           cin.close();
             while (q.  head  < q.  tail ){
                System.  out .print(q.  data [q.  head ]+  " " );
                q.  head ++;
                
                q.  data [q.  tail ] = q.  data [q.  head ];
                q.  tail ++;
                
                q.  head ++;
           }          
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值