亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

c#數據結構之集合的實現(數組及鏈表兩種實現)

2019-11-17 04:16:46
字體:
來源:轉載
供稿:網友

集合的概念
集合是由一些確定的、彼此不同的成員或者元素構成的一個整體。如果將緊密相關的數據組合到一個集合中,則能夠更有效地處理這些緊密相關的數據。代替編寫不同的代碼來處理每一單獨的對象,您可以使用相同的調用代碼來處理一個集合的所有元素。

在c#中可以使用 Array 類和 System.Collections 類添加、移除和修改集合中的個別元素或某一范圍內的元素。甚至可以將整個集合復制到另一個集合中。在 .NET Framework 2.0 版中,泛型集合類提供了新功能,并使得創建強類型集合變得容易。

雖然c#中提供了多種集合類可供我們選擇,但為了加深對這種數據類型的理解,構造自己的集合類無疑是最好的選擇。下面給出了基于數組及鏈表兩種實現的集合類。

定義集合實現的接口

view plaincopy to clipboardPRint?
public interface IBag:IEnumerable  
  {  
      void Add(object element);  
      void AddAll(IBag bag);  
      int Size{get;}  
      bool IsEmpty();  
      object RemoveRandom();  
      object Remove(object target);  
      IBag Union(IBag bag);  
      bool Contains(object target);  
  } 
  public interface IBag:IEnumerable
    {
        void Add(object element);
        void AddAll(IBag bag);
        int Size{get;}
        bool IsEmpty();
        object RemoveRandom();
        object Remove(object target);
        IBag Union(IBag bag);
        bool Contains(object target);
    }

 

基于數組的集合實現

view plaincopy to clipboardprint?
public class ArrayBag:IBag  
{  
    int DEDAULT_CAPACITY = 1000;  
    Random random = new Random();  
    int count=0;  
    object[] contents;  
    public ArrayBag()  
    {  
        contents = new object[DEDAULT_CAPACITY];  
        //count = 0;  
    }  
    public ArrayBag(int initialCapacity)  
    {  
        contents = new object[initialCapacity];  
       // count = 0;  
    } 
    #region IBag 成員  
    public void Add(object element)  
    {  
        if (Size == contents.Length)  
        {  
            ExpandCapacity();  
        }  
        contents[count] = element;  
        count++;  
    }  
    private void ExpandCapacity()  
    {  
        object[] temp = new object[contents.Length * 2];  
        for (int index = 0; index < contents.Length; index++)  
        {  
            temp[index] = contents[index];  
        }  
        contents = temp;  
    }  
    public void AddAll(IBag bag)  
    {  
        foreach (object o in bag)  
        {  
            Add(o);  
        }  
    }  
    public int Size  
    {  
        get { return count; }  
    }  
    public bool IsEmpty()  
    {  
       return (count==0);  
    }  
    public object RemoveRandom()  
    {  
        if (IsEmpty())  
        {  
            throw new Exception("this colleciton is empty!");  
        }  
        int choice = random.Next(count);  
          
        object result = contents[choice];  
        contents[choice] = contents[count - 1];  
        contents[count - 1] = null;  
        count--;  
        return result;  
    }  
    public object Remove(object target)  
    {  
        if (IsEmpty())  
        {  
            throw new Exception("the collection is empty");  
        }  
        int index = Find(target);  
        if (index == -1)  
        {  
            throw new Exception("not found!");  
        }  
        else 
        {  
            object result = contents[index];  
            contents[index] = contents[count - 1];  
            contents[count - 1] = null;  
            count--;  
            return result;  
        }  
    }  
    private int Find(object target)  
    {  
        for (int i = 0; i < count; i++)  
        {  
            if (contents[i].Equals(target))  
                return i;  
        }  
        return -1;  
    }  
    public IBag Union(IBag bag)  
    {  
        ArrayBag both = new ArrayBag();  
        for (int index = 0; index < count; index++)  
        {  
            both.Add(contents[index]);  
        }  
        foreach (object o in bag)  
        {  
            both.Add(o);  
        }  
        return both;  
    }  
    public bool Contains(object target)  
    {  
        if (Find(target) != -1)  
        {  
            return true;  
        }  
        else 
        {  
            return false;  
        }  
    }  
    public IEnumerator GetEnumerator()  
    {  
        for (int index = 0; index < count; index++)  
        {  
            yield return contents[index];  
        }  
    } 
    #endregion  
    public override string ToString()  
    {  
        StringBuilder sb = new StringBuilder();  
        for (int i = 0; i < count; i++)  
        {  
            sb.Append(contents[i] + " ");  
        }  
        return sb.ToString();  
    }  

    public class ArrayBag:IBag
    {
        int DEDAULT_CAPACITY = 1000;
        Random random = new Random();
        int count=0;
        object[] contents;
        public ArrayBag()
        {
            contents = new object[DEDAULT_CAPACITY];
            //count = 0;
        }
        public ArrayBag(int initialCapacity)
        {
            contents = new object[initialCapacity];
           // count = 0;
        }
        #region IBag 成員
        public void Add(object element)
        {
            if (Size == contents.Length)
            {
                ExpandCapacity();
            }
            contents[count] = element;
            count++;
        }
        private void ExpandCapacity()
        {
            object[] temp = new object[contents.Length * 2];
            for (int index = 0; index < contents.Length; index++)
            {
                temp[index] = contents[index];
            }
            contents = temp;
        }
        public void AddAll(IBag bag)
        {
            foreach (object o in bag)
            {
                Add(o);
            }
        }
        public int Size
        {
            get { return count; }
        }
        public bool IsEmpty()
        {
           return (count==0);
        }
        public object RemoveRandom()
        {
            if (IsEmpty())
            {
                throw new Exception("this colleciton is empty!");
            }
            int choice = random.Next(count);
           
            object result = contents[choice];
            contents[choice] = contents[count - 1];
            contents[count - 1] = null;
            count--;
            return result;
        }
        public object Remove(object target)
        {
            if (IsEmpty())
            {
                throw new Exception("the collection is empty");
            }
            int index = Find(target);
            if (index == -1)
            {
                throw new Exception("not found!");
            }
            else
            {
                object result = contents[index];
                contents[index] = contents[count - 1];
                contents[count - 1] = null;
                count--;
                return result;
            }
        }
        private int Find(object target)
        {
            for (int i = 0; i < count; i++)
            {
                if (contents[i].Equals(target))
                    return i;
            }
            return -1;
        }
        public IBag Union(IBag bag)
        {
            ArrayBag both = new ArrayBag();
            for (int index = 0; index < count; index++)
            {
                both.Add(contents[index]);
            }
            foreach (object o in bag)
            {
                both.Add(o);
            }
            return both;
        }
        public bool Contains(object target)
        {
            if (Find(target) != -1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public IEnumerator GetEnumerator()
        {
            for (int index = 0; index < count; index++)
            {
                yield return contents[index];
            }
        }
        #endregion
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < count; i++)
            {
                sb.Append(contents[i] + " ");
            }
            return sb.ToString();
        }
    }
 

 

 

基于鏈表的集合實現

view plaincopy to clipboardprint?
public class LinkNode  
   {  
       object element;  
       public object Element  
       {  
           get { return element; }  
           set { element = value; }  
       }  
       LinkNode next;  
       public LinkNode Next  
       {  
           get { return next; }  
           set { next = value; }  
       }  
       public LinkNode(object element)  
       {  
           this.element = element;  
           next = null;  
       }  
       public LinkNode()  
       {  
       }  
   }  
   public class LinkedBag:IBag  
   { 
       #region IBag 成員  
       LinkNode contents;  
       int count;  
       Random r = new Random();  
       public void Add(object element)  
       {  
           LinkNode node = new LinkNode(element);  
           node.Next = contents;  
           contents = node;  
           count++;  
       }  
       public void AddAll(IBag bag)  
       {  
           foreach (object o in bag)  
           {  
               Add(o);  
           }  
       }  
       public int Size  
       {  
           get { return count; }  
       }  
       public bool IsEmpty()  
       {  
           return (count==0);  
       }  
       public object RemoveRandom()  
       {  
           object result = null;  
           LinkNode previous, current;  
           if (IsEmpty())  
           {  
               throw new Exception("collection is empty!");  
           }  
           int choice = r.Next(count);  
           if (choice == 0)  
           {  
               result = contents.Element;  
               contents = contents.Next;  
           }  
           else 
           {  
               previous = contents;  
               for (int i = 1; i < choice; i++)  
               {  
                   previous = previous.Next;  
               }  
               current = previous.Next;  
               result = current.Element;  
               previous.Next = current.Next;  
           }  
           count--;  
           return result;  
       }  
       public object Remove(object target)  
       {  
           bool found = false;  
           LinkNode previous, current;  
           object result = null;  
           if (IsEmpty())  
           {  
               throw new Exception("collection is empty!");  
           }  
           if (contents.Element.Equals(target))  
           {  
               result = contents.Element;  
               contents = contents.Next;  
           }  
           else 
           {  
               previous = contents;  
               current = previous.Next;  
               for(int i=1;i<count&&!found;i++)  
               {  
                   if (current.Element.Equals(target))  
                   {  
                       found = true;  
                   }  
                   previous = current;  
                   current = previous.Next;  
               }  
                 if (!found)  
               {  
                   throw new Exception("Elements not found!");  
               }  
               result = current.Next;  
               previous.Next = current.Next;  
           }  
           count--;  
           return result;  
       }  
       public IBag Union(IBag bag)  
       {  
           LinkedBag both = new LinkedBag();  
           foreach (LinkNode node in this)  
           {  
               both.Add(node.Element);  
           }  
           foreach (LinkNode node in bag)  
           {  
               both.Add(node.Element);  
           }  
           return both;  
       }  
       public bool Contains(object target)  
       {  
           bool found = false;  
           LinkNode current = contents;  
           while (current != null && !found)  
           {  
               if (current.Element.Equals(target))  
               {  
                   found = true;  
               }  
               current = current.Next;  
           }  
           return found;  
       } 
       #endregion 
       #region IEnumerable 成員  
       public System.Collections.IEnumerator GetEnumerator()  
       {  
           LinkNode current = contents;  
           while (current != null)  
           {  
               yield return current;  
               current = current.Next;  
           }  
       } 
       #endregion  
       public override string ToString()  
       {  
           StringBuilder sb = new StringBuilder();  
           foreach (LinkNode node in this)  
               sb.Append(node.Element.ToString() + " ");  
           return sb.ToString();  
       }  
   } 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图综合久久| 亚洲片在线资源| 韩国一区二区电影| 国产69久久精品成人看| 欧美在线免费观看| 秋霞成人午夜鲁丝一区二区三区| 欧美巨大黑人极品精男| 日韩免费精品视频| 久久91超碰青草是什么| 日韩专区在线观看| 日韩在线播放一区| 动漫精品一区二区| 国产视频福利一区| 亚洲a中文字幕| 久久人人爽人人| 亚洲精品中文字幕有码专区| 精品国产乱码久久久久久天美| 欧美成人精品在线观看| 亚洲日韩第一页| 日韩在线播放av| 国产在线拍偷自揄拍精品| 成人精品一区二区三区电影免费| 91免费视频网站| 在线亚洲午夜片av大片| 亚洲丁香久久久| 欧美性69xxxx肥| 理论片在线不卡免费观看| 欧美激情一级二级| 97香蕉久久夜色精品国产| 欧美小视频在线观看| 亚洲免费av电影| 97avcom| 亚洲国产99精品国自产| 91精品中国老女人| 亚洲福利在线看| 亚洲性生活视频在线观看| 日韩精品中文字幕在线观看| 久国内精品在线| 日韩在线观看免费高清完整版| 国内精品在线一区| 亚洲图片制服诱惑| 国产精品尤物福利片在线观看| 中文字幕亚洲综合久久| 国产专区精品视频| 中文字幕精品—区二区| 91久久久亚洲精品| 成人黄色免费网站在线观看| 久久久久久久亚洲精品| 欧美xxxx综合视频| 午夜精品久久久久久久白皮肤| 欧美在线一级视频| 中文字幕欧美精品在线| 欧美精品www| 视频直播国产精品| 成人黄色短视频在线观看| 日本免费一区二区三区视频观看| 国产热re99久久6国产精品| 日韩av在线免费看| 国产成人涩涩涩视频在线观看| 国产亚洲欧美日韩美女| 国产99久久久欧美黑人| 亚洲深夜福利网站| 久久久久一本一区二区青青蜜月| 国产精品极品尤物在线观看| 亚洲欧美日韩中文在线制服| 欧美午夜视频一区二区| 最近更新的2019中文字幕| 91精品国产91久久久| 欧美亚洲成人网| 日韩精品免费在线观看| 日本一本a高清免费不卡| 国产精品亚洲欧美导航| 欧美日韩国产一区二区三区| 欧美午夜久久久| 国内偷自视频区视频综合| 国内精品视频在线| 亚洲美女av电影| 国产精品偷伦一区二区| 国产精品女视频| 欧美日韩国产丝袜另类| 黄网动漫久久久| 日韩网站免费观看高清| 国产精品久久999| 亚洲精品日韩久久久| 伊人久久久久久久久久久久久| 黑人巨大精品欧美一区免费视频| 91精品国产自产在线老师啪| 亚洲性生活视频在线观看| 久久99精品久久久久久琪琪| 久久精品国产久精国产一老狼| 国产精品一区二区3区| 欧美激情国产高清| 欧美电影在线免费观看网站| 精品久久久一区| 日韩视频免费在线观看| 亚洲黄色免费三级| 国产精品日韩欧美综合| 国内自拍欧美激情| 91久久久久久久久久| 91色在线观看| 成人国内精品久久久久一区| 国产一区二区三区视频在线观看| 亚洲精品suv精品一区二区| 日本免费久久高清视频| 一本一本久久a久久精品牛牛影视| 91久久久久久久久久久| 57pao国产精品一区| 国产成人欧美在线观看| 国产999精品视频| 日韩高清免费在线| 国产精品久久久久久亚洲调教| 亚洲成人黄色网| 日韩中文字幕国产| 亚洲精品一区二区三区婷婷月| 九九热这里只有精品6| 亚洲精选在线观看| 亚洲高清免费观看高清完整版| 亚洲性69xxxbbb| 综合av色偷偷网| 欧美日韩中文字幕在线| 午夜精品国产精品大乳美女| 在线精品国产成人综合| 国外日韩电影在线观看| 亚洲精品第一页| 国产精品99一区| 成人在线视频网| 韩国v欧美v日本v亚洲| 欧美人与物videos| 欧美裸体男粗大视频在线观看| 伊人久久精品视频| 国产日本欧美一区| 色偷偷9999www| 欧美猛交免费看| 97视频国产在线| 欧美在线xxx| 亚洲精品国精品久久99热一| 成人伊人精品色xxxx视频| 欧美在线视频免费| 日韩免费看的电影电视剧大全| 亚洲日本欧美中文幕| 欧美激情亚洲激情| 国产午夜精品全部视频播放| 亚洲精品日韩激情在线电影| 日韩美女av在线免费观看| 亚洲奶大毛多的老太婆| 国产精品视频网址| 欧美大片免费观看在线观看网站推荐| 日本中文字幕久久看| 日韩亚洲欧美中文高清在线| 午夜精品福利在线观看| 欧美日韩午夜视频在线观看| 久久精品91久久久久久再现| 66m—66摸成人免费视频| 亚洲激情在线观看视频免费| 精品视频在线播放色网色视频| 91美女福利视频高清| 日本精品性网站在线观看| 国产精品一二三视频| 26uuu久久噜噜噜噜| 亚洲福利视频二区| 亚洲一区亚洲二区| 欧美有码在线观看视频| 欧美大肥婆大肥bbbbb| 成人免费观看a|