欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年06月29日 12:41:26   作者:叢曉男  
這篇文章主要介紹了C#實現(xiàn)順序表(線性表)的方法,結合完整實例形式分析了順序表的原理及C#相關實現(xiàn)技巧,需要的朋友可以參考下

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

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

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

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;//最大容量事先確定,使用數(shù)組必須先確定容量
    private T[] tItems;//使用數(shù)組盛放元素
    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,此時數(shù)組中元素個數(shù)為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開始。該函數(shù)表示在第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函數(shù)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;//結果為下界整數(shù),正好用于循環(huán)
        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#數(shù)據(jù)結構與算法教程》、《C#遍歷算法與技巧總結》、《C#程序設計之線程使用技巧總結》、《C#操作Excel技巧總結》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數(shù)組操作技巧總結》及《C#面向對象程序設計入門教程

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

相關文章

  • C#多線程爬蟲抓取免費代理IP的示例代碼

    C#多線程爬蟲抓取免費代理IP的示例代碼

    本篇文章主要介紹了C#多線程爬蟲抓取免費代理IP的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Unity實現(xiàn)Flappy Bird游戲開發(fā)實戰(zhàn)

    Unity實現(xiàn)Flappy Bird游戲開發(fā)實戰(zhàn)

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)Flappy Bird游戲開發(fā)實戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C#中POST接口formdata傳參模板的記錄

    C#中POST接口formdata傳參模板的記錄

    這篇文章主要介紹了C#中POST接口formdata傳參模板的記錄方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • c# Newtonsoft 六個值得使用的特性(下)

    c# Newtonsoft 六個值得使用的特性(下)

    這篇文章主要介紹了c# Newtonsoft 六個值得使用的特性,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • C#連接MySql數(shù)據(jù)庫的方法

    C#連接MySql數(shù)據(jù)庫的方法

    最近兩天在解決C#連接MySql數(shù)據(jù)庫的問題,通過不同的從網(wǎng)上學習,最終找到了解決的辦法,現(xiàn)在和大家分享一下
    2013-10-10
  • unity實現(xiàn)貪吃蛇游戲

    unity實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了unity實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#開發(fā)WinForm清空DataGridView控件綁定的數(shù)據(jù)

    C#開發(fā)WinForm清空DataGridView控件綁定的數(shù)據(jù)

    本文詳細講解了C#開發(fā)WinForm清空DataGridView控件綁定數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#實現(xiàn)XML文件與DataTable、Dataset互轉

    C#實現(xiàn)XML文件與DataTable、Dataset互轉

    這篇文章介紹了C#實現(xiàn)XML文件與DataTable、Dataset互轉的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#?form-data上傳圖片流到遠程服務器的詳細代碼

    C#?form-data上傳圖片流到遠程服務器的詳細代碼

    這篇文章主要介紹了C#?form-data上傳圖片流到遠程服務器的詳細代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#使用OpenCV剪切圖片中的人物頭像的實現(xiàn)方法

    C#使用OpenCV剪切圖片中的人物頭像的實現(xiàn)方法

    這篇文章主要介紹了C#使用OpenCV剪切圖片中的人物頭像,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論