/*
>>>Basic Array Queue<<<
Mod. able Variable List
1. maxQ = Max queue size
Method List
1. come(String name,int priority) ==> Add a new case with priority to the queue
2. come(String name) ==> Add a new case without priority to the queue
3. go() ==> remove first case in the queue & shift others instead
*/
class Queue
{
Case[] queue;
int maxQ;
Queue(int maxQ)
{
this.queue=new Case[maxQ];
this.maxQ=maxQ;
reset();
}
void come(String name,int priority)
{
int index;
index=findInsertIndex(priority);
insertCase(name,priority,index);
}
void come(String name)
{
int index;
index=findLastIndex();
insertNormalCase(name,index);
}
int findInsertIndex(int priority)
{
int index=maxQ;
for(int i=maxQ-1;i>=0;i--)
{
if(priority>queue[i].priority)
{
index=i;
}
}
return index;
}
int findLastIndex()
{
int last=maxQ;
for(int i=maxQ-1;i>=0;i--)
{
if(queue[i].priority==0)
{
last=i;
}
}
return last;
}
void insertCase(String name,int priority,int index)
{
for(int i=maxQ-1;i>index;i--)
{
queue[i]=queue[i-1];
}
queue[index]=new Case(name,priority);
}
void insertNormalCase(String name,int index)
{
if(index!=maxQ)
{
for(int i=maxQ-1;i>index;i--)
{
queue[i]=queue[i-1];
}
queue[index]=new Case(name,queue[index-1].priority);
}
}
void go()
{
for(int i=0;i<maxQ-1;i++)
{
queue[i]=queue[i+1];
}
queue[maxQ-1]=new Case("None",0);
}
void reset()
{
for(int i=0;i<this.maxQ;i++)
{
this.queue[i]=new Case("None",0);
}
}
void show()
{
println("Name - Priority");
for(int i=0;i<maxQ;i++)
{
println(this.queue[i]);
}
}
}
class Case
{
String name;
int priority;
Case(String name,int priority)
{
this.name=name;
this.priority=priority;
}
String toString()
{
String string;
string=this.name+" - "+this.priority;
return string;
}
}
void setup()
{
Queue q1=new Queue(5);
q1.come("A",10);
q1.come("B",9);
q1.come("C",8);
q1.come("D",9);
q1.come("E");
q1.go();
q1.go();
q1.show();
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น