链队列的实现

ExpandedBlockStart.gif 代码
    // 接口
    public   interface  IQueue < T >
    {
        
int  GetLength();  // 求队列的长度
         bool  IsEmpty();  // 判断对列是否为空
         void  Clear();  // 清空队列
         void  In(T item);  // 入队
        T Out();  // 出队
        T GetFront();  // 取对头元素
    }
   
// 接口的实现
    public   class  LinkQueue < T >  : IQueue < T >
    {
        
private  Node < T >  front;  // 队列头指示器
         private  Node < T >  rear;  // 队列尾指示器
         private   int  num;  // 队列结点个数

        
// 队头属性
         public  Node < T >  Front
        {
            
get
            {
                
return  front;
            }
            
set
            {
                front 
=  value;
            }
        }
        
// 队尾属性
         public  Node < T >  Rear
        {
            
get
            {
                
return  rear;
            }
            
set
            {
                rear 
=  value;
            }
        }
        
// 队列结点个数属性
         public   int  Num
        {
            
get
            {
                
return  num;
            }
            
set
            {
                num 
=  value;
            }
        }
        
// 构造器
         public  LinkQueue()
        {
            front 
=  rear  =   null ;

            num 
=   0 ;
        }
        
// 求链队列的长度
         public   int  GetLength()
        {
            
return  num;
        }
        
// 清空链队列
         public   void  Clear()
        {
            front 
=  rear  =   null ;
            num 
=   0 ;
        }
        
// 判断链队列是否为空
         public   bool  IsEmpty()
        {
            
if  ((front  ==  rear)  &&  (num  ==   0 ))
            {
                
return   true ;
            }
            
else
            {
                
return   false ;
            }
        }
        
// 入队
         public   void  In(T item)
        {
            Node
< T >  q  =   new  Node < T > (item);
            
if  (rear  ==   null )
            {
                rear 
=  q;
            }
            
else
            {
                rear.Next 
=  q;
                rear 
=  q;
            }
            
++ num;
        }
        
// 出队
         public  T Out()
        {
            
if  (IsEmpty())
            {
                Console.WriteLine(
" Queue is empty! " );
                
return   default (T);
            }
            Node
< T >  p  =  front;
            front 
=  front.Next;
            
if  (front  ==   null )
            {
                rear 
=   null ;
            }
            
-- num;
            
return  p.Data;
        }
        
// 获取链队列头结点的值
         public  T GetFront()
        {
            
if  (IsEmpty())
            {
                Console.WriteLine(
" Queue is empty! " );
                
return   default (T);
            }
            
return  front.Data;
        }
    }

 

转载于:https://www.cnblogs.com/hubcarl/archive/2010/04/07/1706373.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值