队列应用1:求解报数问题

来源:互联网 发布:松下洗衣机 三洋 知乎 编辑:程序博客网 时间:2024/05/07 02:24

(1).问题描述:

           n个人从左向右编号1~n,然后从左向右报数“1,2,1,2,1,2...”

           数到1的人出队,数到2的人立即站到队列的最右端

           继续报数,直到所有人出列

(2).数据组织:使用顺序队列

(3)设计算法:

           1.全部入队

           2.出队一个,输出编号

           3.若队列不为空,再出队一个元素,并将刚出列的元素进队到队尾

package NumberOff;//队列类,先进先出class Queue{final int MaxSize = 10;int p[];// peopleint front;int rear;public Queue(){p = new int[MaxSize];front = 0;rear = 0;}// 进队列public void enQueue(int i){if ((rear + 1) % MaxSize == front){System.out.println("Queue full");return;}rear = (rear + 1) % MaxSize;p[rear] = i;}// 出队列public int deQueue(){if (rear == front){System.out.println("Queue empty");return -1;}front = (front + 1) % MaxSize;return p[front];}// 判断队列是否为空public boolean QueueEmpty(){if (rear == front)return true;elsereturn false;}}public class Main{public static void main(String args[]){Queue q = new Queue();//全员进队列System.out.println("进队顺序为:1 2 3 4 5 6 7 8");for (int i = 1; i < 9; i++){q.enQueue(i);}int temp;System.out.print("出队顺序为:");while (!q.QueueEmpty()){System.out.print(q.deQueue() + " ");//出队一个,输出编号if (!q.QueueEmpty()) //出队第二个,并将这个进队到队尾{temp = q.deQueue();q.enQueue(temp);}}}}

输出:

进队顺序为:1 2 3 4 5 6 7 8
出队顺序为:1 3 5 7 2 6 4 8 

0 0
原创粉丝点击