import java.io.InputStreamReader;
import java.io.BufferedReader;
/**
* Class CycQueueDemo
* Description 循环队列的基本算法
* Company opendata
* Author Chenlly
* Date:08-12-06
* Version 1.0
*/
public class CycQueueDemo{
private static final int MAXSIZE=10;
private int[] intArray;
private int nItems;//队列元素的个数
private int rear;
private int front;
public CycQueueDemo(){
intArray=new int[MAXSIZE];
nItems=0;
rear=-1;
front=0;
}
//队尾插入
public void insert(int paraValue){
if(rear==MAXSIZE-1){//已经到了队尾
rear=-1;
}
intArray[++rear]=paraValue;
nItems++;
}
//队头删除
public int remove(){
int temp=intArray[front++];
if(front==MAXSIZE){
front=0;
}
nItems--;
return temp;
}
//查看对头元素
public int peekFront(){
return intArray[front];
}
//队列是否已满
public boolean isFull(){
return MAXSIZE==nItems;
}
//队列元素个数
public int size(){
return nItems;
}
//从控制台输入数据
public int putDate(String type){
boolean bflag=false;
int intValue=0;
if(type.equals("1")){
System.out.println("请输入操作序列");
}else{
System.out.println("请入队数据");
}
while(!bflag){
try{
InputStreamReader ir=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(ir);
String str=br.readLine();
intValue=Integer.parseInt(str);
bflag=true;
}catch(NumberFormatException ex){
ex.printStackTrace();
System.out.println("输入有误,请重新输入");
}catch (Exception ex){
ex.printStackTrace();
}
}
return intValue;
}
//主调函数
public static void main(String []args){
CycQueueDemo cd=new CycQueueDemo();
System.out.println("请选择");
System.out.println("1:入列");
System.out.println("2:出列");
System.out.println("3:查看队列头元素");
System.out.println("4:查看队列是否已满");
System.out.println("5:查看队列元素个数");
System.out.println("6:退出操作");
while(true){
int op=cd.putDate("1");
switch(op){
case 1:
int value=cd.putDate("2");
if(cd.isFull()){
System.out.println("队列已满,请出队列");
}else{
cd.insert(value);
}
break;
case 2:
if(cd.nItems==0){
System.out.println("队列已空,请入队列");
}else{
int data=cd.remove();
System.out.println("出队列的元素为:"+data);
}
break;
case 3:
if(cd.nItems==0){
System.out.println("队列已空,队列里已没有元素");
}else{
int front=cd.peekFront();
System.out.println("队列顶元素为:"+front);
}
break;
case 4:
if(cd.isFull()){
System.out.println("队列已满");
}else{
System.out.println("队列未满");
}
break;
case 5:
if(cd.nItems!=0){
System.out.println("队列中有"+cd.nItems+"个元素");
}else{
System.out.println("队列中没有元素");
}
case 6:
default:
System.exit(0);
}
}
}
}