程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Queue類的簡化實現

Queue類的簡化實現

編輯:.NET實例教程

針對特殊需要時修改比較方便。

 



using System;
public class FIFO
...{
    private object[] _Buffer;
    private float _Grow;
    private int _Head;
    private int _Tail;
    private int _ItemCount;
    public int Count ...{ get ...{ return this._ItemCount; } }

    public FIFO(int BufferSize, float Grow)
    ...{
        if (BufferSize < 0) ...{ throw new ArgumentOutOfRangeException(); }
        if (Grow < 1 || Grow > 10) ...{ throw new ArgumentOutOfRangeException(); }
        this._Buffer = new object[BufferSize];
     this._Grow = Grow;
    }
    public FIFO() : this(32, 2) ...{ }

    void ChangeBufferSize(int Size)
    ...{
        object[] newbuf = new object[Size];
        if (this._ItemCount > 0)
        ...{
            if (this._Head < this._Tail)
            ...{
                Array.Copy(this._Buffer, this._Head, newbuf, 0, this._ItemCount);
            }
            else
       ...{
                Array.Copy(this._Buffer, this._Head, newbuf, 0, this._Buffer.Length - this._Head);
                Array.Copy(this._Buffer, 0, newbuf, this._Buffer.Length - this._Head, this._Tail);
            }
        }
        this._Buffer = newbuf;
        this._Head = 0;
        this._Tail = this._ItemCount;
    }
    public void PUT(object obj)
    ...{
        if (this._ItemCount == this._Buffer.Length)   //空間不足
        ...{
            int newSize = (int)(this._Buffer.Length * this._Grow);
            if (newSize < (this._Buffer.Length + 4)) newSize = this._Buffer.Length + 4;
            this.ChangeBufferSize(newSize);
        }
        this._Buffer[this._Tail] = obj;
        this._Tail = (this._Tail + 1) % this._Buffer.Length;
        this._ItemCount++;
    }
    public object GET()
       ...{
        if (this._ItemCount == 0) ...{ throw new InvalidOperationException(); }
        object ret = this._Buffer[this._Head];
        this._Buffer[this._Head] = null;
        this._Head = (this._Head + 1) % this._Buffer.Length;
        this._ItemCount--;
        return ret;
    }


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved