数据结构,你还记得吗(中)_玖富娱乐主管发布


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。 2000年6月,微软公司宣布了一种新的编程言语C#,主要由安德斯·海尔斯伯格(Anders Hejlsberg)掌管开辟,它是第一个面向组件的编程言语,其源码会编译成msil(中央言语)再运转。
  C#是一种平安的、稳固的、简朴的、文雅的,由C和C 衍生出来的面向工具的编程言语。它在继承C和C 壮大功用的同时去掉了一些它们的庞杂特征(比方没有宏和不允很多重继承)。C#综合了VB简朴的可视化操纵和C 的高运转效力,以其壮大的操纵能力、文雅的语法作风、立异的言语特征和便利的面向组件编程的支撑成为.NET开辟的首选言语。
  接下来,我会引见C#的数据构造。

跟上一篇《数据构造,你还记得吗(上)》目次举行一一对应解说C#中种种数据构造,以此来提拔人人的明白。

数组

统一范例和分歧范例的多个工具

  • 统一范例多个工具
    • 能够运用鸠合和数组治理。
    • C#用特别的暗号声明、初始化和运用数组。
    • Array类在背景施展作用,它为数组中元素的排序和过滤供应了几个要领。
    • 运用罗列器,能够迭代数组中的一切元素。
  • 分歧范例多个工具
    • 能够运用Tuple(元组)范例治理。

数组范例

  • 一维数组
  • 多维数组
  • 锯齿数组
        多维数组,行和列是流动的:
        int[][] arrMore=new int[3][6];

        锯齿数组只要在第一个方括号设置行数,每行的个数是可变的。
        int[][] jagged=new int[3][];
        jagged[0]=new int[2]{1,2};
        jagged[1]=new int[6]{1,2,3,4,5,6};
        jagged[2]=new int[3]{1,2,3};

Array

Array 类是 C# 中一切数组的基类,它是在 System 定名空间中界说(System.Array)。Array 类供应了种种用于数组的属性和要领。
用方括号声明数组是C#中运用Array类的透露显示法。在背景运用C#语法,会建立一个派生自笼统基类Array的新类。如许,就能够运用Array类为每一个C#数组界说的要领和属性了。

建立数组

  Array类是一个笼统类,所以不克不及运用组织函数来建立数组。但除能够运用C#语法建立数组实例以外,还能够运用静态要领CreateInstance()建立数组。若是事前不知道元素的范例,该静态要领就异常有效,由于范例能够作为Type工具传递给CreateInstance()要领。

比方:
  Array arr=Array.CeateInstance(typeof(int),5);
  for(int i=0;i<5;i  )
   { 
     arr.SetVaule(i,i);
   }
  for(int i=0;i<5;i  )
   { 
     int  vaule=arr.getVaule(i);
   }

羽毛球筒

Stack

  客栈(Stack)代表了一个后进先出的工具鸠合。当您须要对各项举行后进先出的接见时,则运用客栈。当您在列表中增加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。

  • 栈和泛型栈 
public class Stack<T> : IEnumerable<T>, ICollection, IEnumerable

public class Stack : ICollection, IEnumerable, ICloneable
属性 形貌
Count 猎取 Stack 中包罗的元素个数
要领 形貌
Pop public virtual object Pop();移除并返回在 Stack 的顶部的工具
push public virtual void Push(object obj);向 Stack 的顶部增加一个工具
peek public virtual object Peek();返回在 Stack 的顶部的工具,但不移除它
ToArray public virtual object[] ToArray();建立数组并将客栈元素复制到个中
Contains public virtual bool Contains(object obj);推断一个元素是不是在栈中
Clear public virtual void Clear();从 Stack 中移除一切的元素。

行列

水管子

Queue

行列(Queue)代表了一个先进先出的工具鸠合。当您须要对各项举行先进先出的接见时,则运用行列。当您在列表中增加一项,称为入队,当您从列表中移除一项时,称为出队。

  • 行列和泛型行列
public class Queue : ICollection, IEnumerable, ICloneable

public class Queue<T> : IEnumerable<T>, IEnumerable, IReadOnlyCollection<T>, ICollection
属性 形貌
Count 猎取 Queue 中包罗的元素个数
要领 形貌
Clear public virtual void Clear(); 从 Queue 中移除一切的元素。
Contains public virtual bool Contains( object obj ); 推断某个元素是不是在 Queue 中。
Dequeue public virtual object Dequeue();移除并返回在 Queue 的开首的工具。
Enqueue public virtual void Enqueue( object obj ); 向 Queue 的末端增加一个工具。
ToArray public virtual object[] ToArray();复制 Queue 到一个新的数组中。
TrimToSize public virtual void TrimToSize();设置容量为 Queue 中元素的实际个数。

链表

单链表

  • 啥是单链表?
     单链表是一种链式存取的数据构造,用一组地点恣意的存储单元寄存线性表中的数据元素。这组存储单元既能够是一连的,也能够是不一连的。
     链表中的数据是以结点来透露显示的,每一个结点的组成:元素(数据元素的映象) 指针(指导后继元素存储地位),元素就是存储数据的存储单元,指针就是衔接每一个结点的地点数据。
  • 链表的结点构造
    ┌───┬───┐
    │data│next │
    └───┴───┘
     data域--寄存结点值的数据域[元素]
     next域--寄存结点的直接后继的地点(地位)的指针域(链域)[指针]
完成体式格局
public class Node<T>
{
    public T Data { set; get; }          //数据域,以后结点数据
    public Node<T> Next { set; get; }    //地位域,下一个结点地点

    public Node(T item)
    {
        this.Data = item;
        this.Next = null;
    }

    public Node()
    {
        this.Data = default(T);
        this.Next = null;
    }
}

请转到《数据构造:单链表》检察更细致内容!

双向链表

  LinkedList 是一个双向链表,其元素会指向它前面和背面的元素。如许,经由过程挪动到下一个元素能够正向遍历链表,经由过程挪动到前一个元素能够反向遍历链表。

链表在存储元素时,不只要存储元素的值,还必须存储每一个元素的下一个元素和上一个元素的信息。这就是LinkedList 包罗LinkedListNode 范例的元素的缘由。运用LinkedListNode ,能够获得列表中的下一个和上一个元素。LinkedListNode 界说了属性List,Next,Previous和Value。List属性返回与节点相干的LinkedList 工具。Next和Previous属性用于遍历链表,接见以后节点以后和之前的节点。Value属性返回与节点相干的元素,其范例是T。
  链表的长处是,若是将元素插进去到列表的中央地位,运用链表就会很快。在插进去一个元素时,只须要修正上一个元素的Next援用和下一个元素的Previous援用,使它们援用所插进去的元素。在List 中,插进去一个元素,须要挪动该元素背面的所以元素。
  链表的瑕玷是,链表元素只能一个接一个的接见,这须要较长时候来查找位于链表中央或尾部的元素。
LinkedList 类界说的成员能够接见链表中的第一个和末了一个元素(First和Last);
  在指定地位插进去元素:AddAfter(),AddFirst()和AddLast();
  删除指定地位的元素:Remove(),RemoveFirst(),RemoveLast();
  搜刮:Find(),FindLast()。

菜单树

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-

C#中没有完成树的详细类,一样平常能够经由过程自身完成。
结点树包罗:父结点(根结点的父结点为null)、子结点(List鸠合)、数据工具。

请转到《 数据构造:树》检察更细致的内容!

  图状构造简称图,是另一种非线性构造,它比树形构造更庞杂。树形构造中的结点是一对多的干系,结点间具有显着的条理和分支干系。每一层的结点能够和下一层的多个结点相干,但只能和上一层的一个结点相干。而图中的极点(把图中的数据元素称为极点)是多对多的干系,即极点间的干系是恣意的,图中恣意两个极点之间都能够相干。也就是说,图的极点之间无显着的条理干系,这类干系在实际天下中大批存在。因而,图的运用相称普遍,在自然科学、社会科学和人文科学等很多范畴都有着异常普遍的运用。

c#没有完成图的数据构造,然则能够自身完成,参考以下
请转到《数据构造:图》检察更细致内容!

字典树

c#也没有完成字典树,能够自身完成,参考以下

请转到《数据构造:字典树》检察更细致内容!

散列表(哈希表)

哈希表(HashTable)简述

  Hashtable是System.Collections定名空间供应的一个容器,用于处置惩罚和显示相似keyvalue的键值对,个中key一般可用来疾速查找,同时key是辨别大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object范例,所以Hashtable能够支撑任何范例的keyvalue键值对.

甚么情况下运用哈希表

  • 某些数据会被高频率查询
  • 数据量大
  • 查询字段包罗字符串范例
  • 数据范例不独一

运用要领

  • 哈希表须要运用的namespace
using System.Collections;
using System.Collections.Generic;
  • 哈希表的基础操纵:
//增加一个keyvalue键值对:
HashtableObject.Add(key,value);

//移除某个keyvalue键值对:
HashtableObject.Remove(key);

//移除一切元素:           
HashtableObject.Clear(); 

// 推断是不是包罗特定键key:
HashtableObject.Contains(key);
  • 遍历哈希表
 遍历哈希表须要用到DictionaryEntry Object,代码以下:
for(DictionaryEntry de in ht) //ht为一个Hashtable实例
{
   Console.WriteLine(de.Key);  //de.Key对应于keyvalue键值对key
   Console.WriteLine(de.Value);  //de.Key对应于keyvalue键值对value
}

请转到《数据构造:哈希表》检察更细致内容!

总结

综上所述,找了相干的文档以后,发明C#自身没有封装局部数据构造,多是让人人自身施展,也能够跟它现在设想的缘由有关,由于它不是专们为处置惩罚数据而降生的。真的又是写了一篇小白文,发明写到这里还不敷,因而将题目改成《数据构造,你还记得吗(中)》,接下来还要继承《数据构造,你还记得吗(下)》 未完待续!

其他系列的C#数据构造参考《C# 数据构造》

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。