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

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

C#順序表

2019-11-17 02:35:39
字體:
來源:轉載
供稿:網友

C#順序表

1 數據是外部世界的載體,能夠被計算機處理加工。2數據元素是數據的基本單位,如,學生的姓名、性別、班級等等。

3數據對象是數據的一個集合,如 人類,狗類,等等屬于數據對象,對象里又有數據元素

4數據類型,如整形,字符串,結構體等等,

5.數據結構通常分為4種,5.1集合 如HashSet<T>類主要是設計用來做高性能集運算的,(交集、并集、差集)

后續再談HashSet<>.

5.2線性結構 數據元素從在一對一的關系 如 數組、list<>、Stack<>、Queue<>

5.3樹形結構,如二叉樹等等。圖形結構,以后再說

第一天主要學習順序表,保存線性表的方式就是把表中的元素一個接一個的放進順序的存儲單元,這就是線性表的順序存儲。在內存中用一塊地址連續的存儲空間一次存放數據元素,稱為順序表。如圖

//自己實現順序表    public class SeqList<T> //: IList<T>    {        PRivate int maxsize; //順序表的容量        public int Maxsize        {            get { return maxsize; }        }        private T[] data; //數組,用于存儲順序表中的數據元素        private int last; //指示順序表最后一個元素的位置下標        public int Last        {            get { return last; }            set { last = value; }        }        // 索引器        public T this[int index]        {            get { return data[index]; }            set { data[index] = value; }        }        public SeqList( int size )        {            data = new T[size];            maxsize = size;            last = - 1;        }        // 順序表的長度由于數組是 0 基數組,即數組的最小索引為 0,所以,順序表的長度就是數        // 組中最后一個元素的索引 last 加 1。        public int GetLength()        {            return last + 1;        }        // 清空        public void Clear( )        {            last = -1;        }        public bool IsEmpty( )        {            if ( last < 0 )            {                return true;            }            return false;        }        // 判斷順序表是否已滿        public bool IsFull( )        {            if ( last == maxsize - 1 )// 元素下標從0開始            {                return true;            }            return false;        }        // 在順序表末尾添加新元素        public void Appled(T item)        {            if ( !IsFull( ) )            {                data[++last] = item;            }            else            {                Console.WriteLine(" 順序表已滿無法添加 ");            }        }        //在順序表的第i個數據元素的位置插入一個數據元素        /*            算法的時間復雜度分析:順序表上的插入操作,時間主要消耗在數據的移動        上,在第i個位置插入一個元素,從ai到an都要向后移動一個位置,共需要移動n-i+1        個元素,而i的取值范圍為 1≤i≤n+1,當i等于 1 時,需要移動的元素個數最多,        為n個;當i為n+1 時,不需要移動元素。設在第i個位置做插入的概率為pi,則平        均移動數據元素的次數為n/2。這說明:在順序表上做插入操作平均需要移動表        中一半的數據元素,所以,插入操作的時間復雜度為O(n)。         */        public void Insert(T item, int i)        {            if ( i < 1 || i > last + 1 )            {                Console.WriteLine(" 位置非法 ");                return;            }            if ( IsFull() )            {                Console.WriteLine(" 順序表已滿無法添加 ");                return;            }            if (i == last + 2)// 判斷是不是末尾插入            {                data[ last + 1 ] = item;            }            else            {                // i后面的元素往后移                for (int j = last; j >= i - 1; --j  )                {                    data[j + 1] = data[j];                }                //將新的數據元素插入到第i-1個位置上                data[i - 1] = item;             }            ++last;        }        //刪除順序表的第i個數據元素        /*         而i的取值范圍為 1≤i≤n,當i等于 1 時,需要移動        的元素個數最多,為n-1 個;當i為n時,不需要移動元素。設在第i個位置做刪除        的概率為pi,則平均移動數據元素的次數為(n-1)/2。這說明在順序表上做刪除操        作平均需要移動表中一半的數據元素,所以,刪除操作的時間復雜度為O(n)         */        public T Delete(int i)        {            T temp = default(T);// default 為泛型代碼中的默認關鍵字            if ( IsEmpty( ) )            {                Console.WriteLine("順序表為空");                return temp;            }            if (i < 1 || i > last + 1 )            {                Console.WriteLine(" 位置非法 ");                return temp;            }            if ( i == last + 1 )            {                data[last--] = temp;            }             else            {                temp = data[i - 1];                for (int j = i; j <= last; ++j )                {                    data[j] = data[j - 1];                }            }            --last;            return temp;        }        //獲得順序表的第i個數據元素        public T GetElem(int i)       {             if ( IsEmpty( ) || (i < 1) || ( i > last + 1 ) )             {                 Console.WriteLine("順序表為空 or 位置非法!");                 return default(T);             }             return data[i-1];         }         //在順序表中查找值為value的數據元素        public int Locate(T value)        {            if (IsEmpty( ))            {                Console.WriteLine("順序表為空");                return -1;            }            for (int j = 0; j < last; ++j )            {                if ( data[j].Equals( value) )                {                    return j;                }            }            return -1;        }        /*         算法的時間復雜度分析:順序表中的按值查找的主要運算是比較,比較的次        數與給定值在表中的位置和表長有關。當給定值與第一個數據元素相等時,比較        次數為 1;而當給定值與最后一個元素相等時,比較次數為 n。所以,平均比較        次數為(n+1)/2,時間復雜度為 O(n)         */        public void Reverse()        {            T temp = default(T);            int len = GetLength();            for (int i = 0; i <= len >> 1; ++i)            {                temp = data[i];                data[i] = data[len - i];                data[len - i] = temp;            }        }    }

List<T>他是表示通過索引訪問的對象的強制類型列表。提供搜索、排序、插入、刪除等操做

通過學習線性表我們知道了,List<T>實現了順序表的功能,但List<T>是一個動態存儲數據的鏈表,這就是順序表的缺點,明天我們學習單鏈表

本人希望和各位較多,互相想學習,下面簡單介紹List<>

作用:泛型最常見的用途是泛型集合我們在創建列表類時,列表項的數據類型可能是int,string或其它類型,如果對列表類的處理方法相同,就沒有必要事先指定數據類型,留待列表類實例化時再指定。相當于把數據類型當成參數,這樣可以最大限度地重用代碼,保護類型的安全以及提高性能。 List的一般用法所屬命名空間: System.Collections.Genericpublic class List<T>:IList<T>,Icollection<T>,IEnumerable<T>,IList,Icollection,IenumerableList<T>是ArrayList類的泛型等效類,該類使用大小可按需動態增加的數組實現IList<T>泛型接口 (1)聲明 List<T>mlist = new List<T>(); eg: string[] Arr = {"a","b","c"};     List<string> mlist = new List<string>(Arr); (2)添加一個元素 List.Add(T item)    eg: mlist.Add("d"); (3)添加集合元素   eg: string[] Arr2 ={"f","g"."h"};       mlist.AddRange(Arr2); (4)在index位置添加一個元素 Insert(int index,T item)   eg: mlist.Insert(1,"p"); (5)遍歷List中元素  foreach(T element in mlist) T的類型與mlist聲明時一樣     {       Console.WriteLine(element);          }    eg:    foreach(string s in mlist)          {             Console.WriteLine(s);           } (6)刪除元素    List.Remove(T item) 刪除一個值    eg: mlist.Remove("a");    List.RemoveAt(int index);刪除下標為index的元素    eg: mlist.RemoveAt(0);        List.RemoveRange(int index,int count); 下標index開始,刪除count個元素    eg:mlist.RemoveRange(3,2);  (7)判斷某個元素是否在該List中    List.Contains(T item) 返回true或false    eg:    if(mlist.Contains"("g"))       Console.WriteLine("g存在列表中");    else       mlist.Add("g"); (8)給List里面元素排序 List.Sort() 默認是元素每一個字母按升序   eg: mlist.Sort(); (9)給List里面元素順序反轉 List.Reverse() 可以與List.Sort()配合使用 (10)List清空 List.Clear()   eg: mlist.Clear();(11)獲得List中元素數目 List.Count() 返回int值   eg: mlist.count(); List進階,強大方法 (1)List.FindAll方法:檢索與指定謂詞所定義的條件相匹配的所有元素         class program    {       static void Main(stirng[] args)       {         student stu = new student();         stu.Name="arron";         List<student> students= new List<student>();         students.Add(stu);         students.Add(new student("candy"));         FindName myname = new FindName("arron");         foreach(student s in students.FindAll(new Predicate<student>(myname.IsName)))         { Console.WriteLine(s);}       }    public class student    {       public string Name{get;set;}       public student(){}       public override string ToString()        {            return string.Format("姓名:{0}",Name);         }     }    public class FindName    {      private string _name;      public FindName(string Name)      {  this._name=Name;}      public bool IsName(student s)       { return (s.Name==_name)?true:false;}    } (2)List.Find方法 搜索與指定謂詞所定義的條件相匹配的元素,并返回整個List中的第一個匹配元素  eg:    //Predicate是對方法的委托,如果傳遞給它的對象與委托定義的條件匹配,則該方法返回true,當前List的元素  被逐個傳遞給Predicate委托,并在List中間前移動,從第一個元素開始,到最后一個元素結束,當找到匹配項  時處理停止  第一種方法 委托給拉姆達表達式:  eg:       string listFind = mlist.Find(name=>       {          if(name.length>3)             return true;          return false;       });    第二種方法 委托給一個函數    eg:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 许昌县| 萍乡市| 安庆市| 花莲市| 安泽县| 阿荣旗| 修武县| 黄大仙区| 柳江县| 林西县| 昭通市| 涞水县| 乐亭县| 永修县| 皮山县| 通海县| 柘荣县| 独山县| 克山县| 日土县| 盘锦市| 宾川县| 鹿泉市| 呼伦贝尔市| 清流县| 浦北县| 呈贡县| 沾益县| 南澳县| 朔州市| 汽车| 宜川县| 龙门县| 宁阳县| 手机| 团风县| 礼泉县| 历史| 许昌县| 肥西县| 武平县|