国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#實現順序表(線性表)完整實例

2019-10-29 21:25:18
字體:
來源:轉載
供稿:網友

本文實例講述了C#實現順序表(線性表)的方法。分享給大家供大家參考,具體如下:

基本思想是使用數組作為盛放元素的容器,數組一開始的大小要實現確定,并使用一個Pointer指向順序表中最后的元素。順序表中的元素是數組中元素的子集。順序表在內存中是連續的,優勢是查找,弱勢是插入元素和刪除元素。

為避免裝箱拆箱,這里使用泛型,代替object。使用object的例子可以參照本站這篇文章:http://m.survivalescaperooms.com/article/87603.htm,這個鏈接中的例子實現的是隊列,并沒 有使用Pointer來標識 順序表中最后一個元素,而是動態的調整數組的大小,這與本例明顯不同,動態調整數組大小開銷較大。使用object同樣可以完成順序表數據結構,但是頻繁裝箱拆箱造成較大的開銷,應使用泛型代替。

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace LinearList{  public interface IListDS<T>  {    int GetLength();    void Insert(T item, int i);    void Add(T item);    bool IsEmpty();    T GetElement(int i);    void Delete(int i);    void Clear();    int LocateElement(T item);    void Reverse();  }  //順序表類  class SequenceList<T>:IListDS<T>  {    private int intMaxSize;//最大容量事先確定,使用數組必須先確定容量    private T[] tItems;//使用數組盛放元素    private int intPointerLast;//始終指向最后一個元素的位置    public int MaxSize    {      get { return this.intMaxSize; }      set { this.intMaxSize = value; }    }    public T this[int i]//索引器方便返回    {      get { return this.tItems[i]; }    }    public int PointerLast    {      get { return this.intPointerLast; }    }    public SequenceList(int size)    {      this.intMaxSize = size;      this.tItems = new T[size];//在這里初始化最合理      this.intPointerLast = -1;//初始值設為-1,此時數組中元素個數為0    }    public bool IsFull()//判斷是否超出容量    {      return this.intPointerLast+1 == this.intMaxSize;    }    #region IListDS<T> 成員    public int GetLength()    {      return this.intPointerLast + 1;//不能返回tItems的長度    }    public void Insert(T item, int i)//設i為第i個元素,從1開始。該函數表示在第i個元素后面插入item    {      if (i < 1 || i > this.intPointerLast + 1)      {        Console.WriteLine("The inserting location is wrong!");        return;      }      if (this.IsFull())      {        Console.WriteLine("This linear list is full! Can't insert any new items!");        return;      }      //如果可以添加      this.intPointerLast++;      for(int j=this.intPointerLast;j>=i+1;j--)      {        this.tItems[j] = this.tItems[j - 1];      }      this.tItems[i] = item;    }    public void Add(T item)    {      if (this.IsFull())//如果超出最大容量,則無法添加新元素      {        Console.WriteLine("This linear list is full! Can't add any new items!");      }      else      {        this.tItems[++this.intPointerLast] = item;//表長+1      }    }    public bool IsEmpty()    {      return this.intPointerLast == -1;    }    public T GetElement(int i)//設i最小從0開始    {      if(this.intPointerLast == -1)      {        Console.WriteLine("There are no elements in this linear list!");        return default(T);      }      if (i > this.intPointerLast||i<0)      {        Console.WriteLine("Exceed the capability!");        return default(T);      }      return this.tItems[i];    }    public void Delete(int i)//設i最小從0開始    {      if (this.intPointerLast == -1)      {        Console.WriteLine("There are no elements in this linear list!");        return;      }      if (i > this.intPointerLast || i < 0)      {        Console.WriteLine("Deleting location is wrong!");        return;      }      for (int j = i; j < this.intPointerLast; j++)      {        this.tItems[j] = this.tItems[j + 1];      }      this.intPointerLast--;//表長-1    }    public void Clear()    {      this.intPointerLast = -1;    }    public int LocateElement(T item)    {      if (this.intPointerLast == -1)      {        Console.WriteLine("There are no items in the list!");        return -1;      }      for (int i = 0; i <= this.intPointerLast; i++)      {        if (this.tItems[i].Equals(item))//若是自定義類型,則T類必須把Equals函數override        {          return i;        }      }      Console.WriteLine("Not found");      return -1;    }    public void Reverse()    {      if (this.intPointerLast == -1)      {        Console.WriteLine("There are no items in the list!");      }      else      {        int i = 0;        int j = this.GetLength() / 2;//結果為下界整數,正好用于循環        while (i < j)        {          T tmp = this.tItems[i];          this.tItems[i] = this.tItems[this.intPointerLast - i];          this.tItems[this.intPointerLast - i] = tmp;          i++;        }      }    }    #endregion  }  class Program  {    static void Main(string[] args)    {    }  }}

基于順序表的合并排序:

//基于順序表的合并排序static private SequenceList<int> Merge(SequenceList<int> s1,SequenceList<int> s2){  SequenceList<int> sList = new SequenceList<int>(20);  int i = 0;  int j = 0;  while(i<=s1.PointerLast&&j<=s2.PointerLast)  {    if (s1[i] < s2[j])    {      sList.Add(s1[i]);      i++;    }    else    {      sList.Add(s2[j]);      j++;    }  }  if (i > s1.PointerLast)  {    while (j <= s2.PointerLast)    {      sList.Add(s2[j]);      j++;    }    return sList;  }  else//即j>s2.PointerLast  {    while (i <= s1.PointerLast)    {      sList.Add(s1[i]);      i++;    }    return sList;  }}

希望本文所述對大家C#程序設計有所幫助。

 


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新安县| 石柱| 克山县| 桐梓县| 永泰县| 来宾市| 贵溪市| 崇阳县| 廊坊市| 嘉义市| 盐池县| 上高县| 罗城| 鄱阳县| 望城县| 醴陵市| 岳池县| 大荔县| 马尔康县| 白山市| 宜兰县| 从江县| 通化县| 玛纳斯县| 新闻| 三门峡市| 漳平市| 拜城县| 鲜城| 峨边| 广宗县| 南投县| 明水县| 鄄城县| 连州市| 大丰市| 镇坪县| 大连市| 广南县| 壤塘县| 迁安市|