队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(back)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。这也就是我们平常经常用说到的先进先出法则(FIFO),队列这种法则,在中国好久以前就开始运用了,例如粮仓管理官员,在没掌握这种法则前,仓库底部的粮食都因时间太久而坏掉了,后来有聪明人士在粮仓二边开个门,一边进仓一边出仓,这样管理就方便多了。队列中没有元素时,称为空队列。
队列实现的接口如下:
    public interface IQueen<T>
    {
        
int Length();
        
bool IsEmpty();
        
bool IsFull();
        
void Clear();
        
void IN(T items);
        T Out();
        T GetFrontItem();
    }
队列实现的原理与代码如下:

    public class JQueen<T> : IQueen<T>
    {
        
private int size;
        
private T[] item;
        
private int front;
        
private int back;

        
public JQueen()
            : 
this(100)
        {
            size 
= 100;
            item 
= new T[100];
            front 
= back = -1;
        }

        
public JQueen(int length)
        {
            size 
= length;
            item 
= new T[length];
            front 
= back = -1;
        }

        
public T this[int index]
        {
            
get { return item[index]; }
            
set { item[index] = value; }
        }

        
public int Front
        {
            
get { return front; }
            
set { front = value; }            
        }

        
public int Back
        {
            
get { return back; }
            
set { back = value; }
        }

        
public int MaxLength
        {
            
get { return size; }
            
set { size = value; }
        }        

        
public int Length()
        {
            
return (back - front + size) % size;
        }

        
public bool IsEmpty()
        {
            
return (front == back);
        }

        
public bool IsFull()
        {
            
return ((back + 1% size == front);
        }

        
public void Clear()
        {
            front 
= back = -1;
        }

        
public void IN(T items)
        {
            
if (IsFull())
            {
                
throw new ArgumentOutOfRangeException("RangeException""Queen RangeException: queen is full");
            }
            item[
++back] = items;
        }

        
public T Out()
        {
            T tmp 
= default(T);
            
if (IsEmpty())
            {
                
throw new ArgumentOutOfRangeException("RangeException""Queen RangeException: queen is empty");
            }
            tmp 
= item[++front];
            
return tmp;
        }

        
public T GetFrontItem()
        {
            
if (IsEmpty())
            {
                
throw new ArgumentOutOfRangeException("RangeException""Queen RangeException: queen is empty");
            }
            
return item[front + 1];
        }

    }

测试队列代码:

   

Code


结果如下:


posted on 2009-08-03 17:00  superlee  阅读(228)  评论(0编辑  收藏  举报