(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[];// people
int 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;
else
return 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