精华内容
下载资源
问答
  • 主要介绍了C#基础语法:结构和类详解,本文总结了一些结构和类的不同之处并给出了测试区别特性代码,需要的朋友可以参考下
  • 数据结构:八大数据结构分类

    万次阅读 多人点赞 2018-09-05 18:23:28
    数据结构是指相互之间存在着一种或多种关系的数据元素的集合该集合中数据元素之间的关系组成 。 常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都有着独特的数据...

    本文目录:

    数据结构分类

    数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。
    常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:
    这里写图片描述
    每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。

    1、数组

    数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。

    int[] data = new int[100];data[0]  = 1;
    

    优点:
    1、按照索引查询元素速度快
    2、按照索引遍历数组方便

    缺点:
    1、数组的大小固定后就无法扩容了
    2、数组只能存储一种类型的数据
    3、添加,删除的操作慢,因为要移动其他的元素。

    适用场景:
    频繁查询,对存储空间要求不大,很少增加和删除的情况。

    2、栈

    栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。
    这里写图片描述
    栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。

    3、队列

    队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队,示例图如下:
    这里写图片描述
    使用场景:因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。

    4、链表

    链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。
    这里写图片描述
    链表的优点:
    链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素;
    添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快;

    缺点:
    因为含有大量的指针域,占用空间较大;
    查找元素需要遍历链表来查找,非常耗时。

    适用场景:
    数据量较小,需要频繁增加,删除操作的场景

    5、树

    是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

    • 每个节点有零个或多个子节点;
    • 没有父节点的节点称为根节点;
    • 每一个非根节点有且只有一个父节点;
    • 除了根节点外,每个子节点可以分为多个不相交的子树;

    在日常的应用中,我们讨论和用的更多的是树的其中一种结构,就是二叉树
    这里写图片描述
    二叉树是树的特殊一种,具有如下特点:

    1、每个结点最多有两颗子树,结点的度最大为2。
    2、左子树和右子树是有顺序的,次序不能颠倒。
    3、即使某结点只有一个子树,也要区分左右子树。

    二叉树是一种比较有用的折中方案,它添加,删除元素都很快,并且在查找方面也有很多的算法优化,所以,二叉树既有链表的好处,也有数组的好处,是两者的优化方案,在处理大批量的动态数据方面非常有用。

    扩展:
    二叉树有很多扩展的数据结构,包括平衡二叉树、红黑树、B+树等,这些数据结构二叉树的基础上衍生了很多的功能,在实际应用中广泛用到,例如mysql的数据库索引结构用的就是B+树,还有HashMap的底层源码中用到了红黑树。这些二叉树的功能强大,但算法上比较复杂,想学习的话还是需要花时间去深入的。

    6、散列表

    散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

    记录的存储位置=f(key)

    这里的对应关系 f 成为散列函数,又称为哈希 (hash函数),而散列表就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势来查找元素,所以查找的速度很快。

    哈希表在应用中也是比较常见的,就如Java中有些集合类就是借鉴了哈希原理构造的,例如HashMap,HashTable等,利用hash表的优势,对于集合的查找元素时非常方便的,然而,因为哈希表是基于数组衍生的数据结构,在添加删除元素方面是比较慢的,所以很多时候需要用到一种数组链表来做,也就是拉链法。拉链法是数组结合链表的一种结构,较早前的hashMap底层的存储就是采用这种结构,直到jdk1.8之后才换成了数组加红黑树的结构,其示例图如下:
    这里写图片描述
    从图中可以看出,左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。

    哈希表的应用场景很多,当然也有很多问题要考虑,比如哈希冲突的问题,如果处理的不好会浪费大量的时间,导致应用崩溃。

    7、堆

    堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质:

    • 堆中某个节点的值总是不大于或不小于其父节点的值;

    • 堆总是一棵完全二叉树。

    将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

    堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
    (ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2),满足前者的表达式的成为小顶堆,满足后者表达式的为大顶堆,这两者的结构图可以用完全二叉树排列出来,示例图如下:
    这里写图片描述
    因为堆有序的特点,一般用来做数组中的排序,称为堆排序。

    8、图

    图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

    按照顶点指向的方向可分为无向图和有向图:
    这里写图片描述
    这里写图片描述
    图是一种比较复杂的数据结构,在存储数据上有着比较复杂和高效的算法,分别有邻接矩阵 、邻接表、十字链表、邻接多重表、边集数组等存储结构,这里不做展开,读者有兴趣可以自己学习深入。

    展开全文
  • 结构和类区别

    千次阅读 2018-08-01 21:00:10
    结构和类: 1.结构可以不通过new操作符来实例化; 2.结构在使用之前必须进行数据初始化; 3.结构不可以定义无参构造函数; 4.结构定义有参的构造函数,必须在构造函数对字段进行初始化; 5.结构不可以继承,也不可以...

    结构和类:
    1.结构可以不通过new操作符来实例化;
    2.结构在使用之前必须进行数据初始化;
    3.结构不可以定义无参构造函数;
    4.结构定义有参的构造函数,必须在构造函数对字段进行初始化;
    5.结构不可以继承,也不可以被继承,但可以实现接口;
    6.结构是值类型;

    1.类必须通过new实例化
    2.引用类型
    3.可以定义无参构造函数
    4.可以被继承,可以继承其他类;

    展开全文
  • 结构和类区别结构的使用

    千次阅读 2018-05-28 20:01:51
    类和结构是 .NET Framework 中的常规类型系统的两种基本构造。 两者在本质上都属于数据结构。封装着一组总体作为一个逻辑单位的数据行为。 数据行为是该结构的“成员”,它们包括各自的方法、属性事件等 ...

    类和结构是 .NET Framework 中的常规类型系统的两种基本构造。 两者在本质上都属于数据结构。封装着一组总体作为一个逻辑单位的数据和行为。 数据和行为是该类或结构的“成员”,它们包括各自的方法、属性和事件等

    与类不同的是,结构体用struct 修饰;结构体中的实例字段不能自定义默认值,而类可以,编译器会隐式的给出结构体和类的默认构造函数,但是结构体的默认构造不能显示给出,不然编译器会报错,当类有自定义的构造函数时,默认构造会被隐藏,要想使用默认构造,必须显示给出;结构体的自定义构造函数必须初始化所有的实例字段和未初始化的属性,而类不是.

     

    类在传递的时候,传递的内容是位于托管内存中的位置,结构体在传递的时候,传递的内容是位于程序堆栈区的内容。当类的传递对象修改时,将同时修改源对象,而结构体的传递对象修改时,不会对源对象产生影响。

     

    这是我总结的结构与类的区别

     

     

    在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。

    定义一个玩家的结构:

     public struct StructHero
        {
            //玩家名字
            public string HeroName;
            //原始生命值
            public int OriginalBlood;
            //攻击力
            public int AttackPower;
            //防御力
            public int DefendPower;
            //玩家的图片
            public Image Image;
            //原始位置
            public Point OriginalLocation;
            //当前位置
            public Point CurrentLocation;
            // 大小
            public Size Size;
    
            public void Move(StructMonster monster)
            {
                //移动到怪物左下角
                this.CurrentLocation = new Point(
                    monster.OriginalLocation.X,
                    monster.OriginalLocation.Y + monster.Size.Height);
            }
    
    
            public void Move()
            {
                //返回是将原始位置设为当前位置
                this.CurrentLocation = this.OriginalLocation;
            }
    
        }

    定义一个怪物结构:

    public struct StructMonster
        {
            //怪物名字
            public string MonsterName;
            //原始生命值
            public int OriginalBlood;
            //当前生命值
            public int CurrentBlood;
            //攻击力
            public int AttackPower;
            //防御力
            public int DefendPower;
            //怪物的图片
            public Image Image;
            //原始位置
            public Point OriginalLocation;
            //当前位置
            public Point CurrentLocation;
            // 大小
            public Size Size;
    
    
    
    
            public void Move(StructHero hero)
            {
                //移动到怪物左下角
                this.CurrentLocation = new Point(
                    hero.OriginalLocation.X,
                    hero.OriginalLocation.Y - hero.Size.Height);
            }
    
    
            public void Move()
            {
                //返回是将原始位置设为当前位置
                this.CurrentLocation = this.OriginalLocation;
            }
        }
    
    

     

    展开全文
  • VB.Net中结构和类区别

    千次阅读 2012-11-16 08:39:02
    用了很久才知道结构和类有这么多区别,参考微软的官方文档  原文:http://msdn.microsoft.com/zh-cn/library/vstudio/2hkbth2a.aspx  Visual Basic 统一了结构和类的语法,因此两个实体支持的大多数功能...

       用了很久才知道结构和类有这么多区别,参考微软的官方文档


     原文:http://msdn.microsoft.com/zh-cn/library/vstudio/2hkbth2a.aspx


      Visual Basic 统一了结构和类的语法,因此两个实体支持的大多数功能都是相同的。 但是,在结构和类之间还有着重要的区别。

    类的优点在于它可以作为引用类型:与将结构变量与它的所有数据一起传递相比,传递引用更有效。 但是,结构不要求在全局堆中分配内存。

    因为不能从结构继承,结构只应当用于不需要扩展的对象。 当希望创建的对象实例较小时使用结构,并要考虑类与结构之间性能特点的对比。

    结构和类在以下方面相同:

    • 两者都属于“容器”类型,这意味着它们包含其他以成员形式存在的类型。

    • 两者都具有成员,成员可以包括构造函数、方法、属性、字段、常数、枚举、事件和事件处理程序。 但是,不要将这些成员与结构的声明“元素”混淆。

    • 两者的成员可以分别有不同的访问级别。 例如,一个成员可以声明为 Public,而另一个可以声明为 Private

    • 都可实现接口。

    • 都有共享的构造函数,有或没有参数。

    • 两者都可以公开“默认属性”,前提是该属性至少带有一个参数。

    • 两者都可以声明和引发事件,而且两者都可以声明委托。

    结构和类在以下方面有所不同:

    • 结构是“值类型”,而类是“引用类型”结构类型的变量包含此结构的数据,而不是像类类型那样包含对数据的引用。

    • 结构使用堆栈分配,类使用堆分配。

    • 所有的结构元素都默认为 Public;类变量和常数默认为 Private,而其他的类成员默认为 Public类成员的这一行为提供与 Visual Basic 6.0 默认值系统的兼容。

    • 结构必须至少具有一个非共享变量或非共享的非自定义事件元素;而类可以完全是空的。

    • 结构元素不可声明为 Protected;类成员可以。

    • 只有 Shared (Visual Basic)Sub 结构过程才能处理事件,并且只能使用 AddHandler 语句 语句;而任何类过程都可以处理事件,并且可以使用 Handles 子句 (Visual Basic) 关键字或 AddHandler 语句。 有关更多信息,请参见 事件 (Visual Basic)

    • 结构变量声明不能指定初始值设定项或数组初始大小,而类变量声明可以。

    • 结构从 System.ValueType 类隐式继承,不能从任何其他类型继承;而类可以从 System.ValueType 以外的其他任何类继承。

    • 结构是不可继承的;而类可以继承。

    • 结构从不终止,所以公共语言运行时 (CLR) 从不对任何结构调用 Finalize 方法;而类可由垃圾回收器 (GC) 终止,当检测到没有剩余的活动引用时,垃圾回收器将对类调用 Finalize

    • 结构不需要构造函数;而类需要。

    • 结构仅当没有参数时可以有非共享的构造函数;类无论有没有参数都可以。

    每一个结构都有不带参数的隐式公共构造函数。 这个构造函数将结构的所有数据元素都初始化为默认值。 不能重定义此行为。

    由于结构是值类型,每个结构变量都永久地绑定到一个单独的结构实例。 而类是引用类型,对象变量可在不同的时间引用各种类实例。 此区别在下列方面影响结构和类的使用:

    • 初始化。结构变量使用结构的无参数构造函数隐式包含元素的初始化。 因此,Dim s As struct1 等效于 Dim s As struct1 = New struct1()

    • 给变量赋值。当将一个结构变量赋给另一个,或将结构实例传递给过程参数,所有变量元素的当前值都复制到新结构中。 当将一个对象变量赋给另一个,或传递一个对象变量到过程,仅有引用指针被复制。

    • 给 Nothing 赋值。您可以将值 Nothing (Visual Basic) 赋给结构变量,但实例继续保持与变量的关联。 您仍可以调用变量的方法和访问它的数据元素,但赋值重新初始化了变量元素。

      相比之下,如果将对象变量设为 Nothing,将其与任何类实例断开关联,在给它赋予另一个实例前,不能通过变量访问其他成员。

    • 多个实例。一个对象变量可以有在不同时间赋给它的不同的类实例,多个对象变量可以同时引用同一个类实例。 当通过指向同一实例的另一个变量访问时,更改的类成员的值会影响这些成员。

      但是,结构元素独立存在于其自身实例中。 更改其值不会在其他任何结构变量中反映出来,即使是在同一 Structure声明的其他实例中。

    • 相等。两个结构的相等测试必须以逐个元素地进行测试的方式执行。 可以使用 Equals 方法来比较两个对象变量。 Equals 指示两个变量是否指向同一实例。


    展开全文
  • 本篇文章是对c#中类和结构区别进行了详细的分析介绍,需要的朋友参考下
  • 类和结构区别

    2019-04-22 11:04:58
    2 struct作为数据结构的实现体,它默认的数据访问控制是public的。 而class作为对象的实现体,它默认的成员变量访问控制是private的 3“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”...
  • 结构和类区别c#

    千次阅读 2009-01-13 11:43:00
    结构的实例比较 结构差别 如何选择结构还是 一.结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight() { //implement ...
  • C#中类和结构区别

    2014-06-17 21:24:26
    在C#中类和结构区别主要有: 1.是引用类型; 而
  • 结构共享几乎所有相同的语法,但结构受到的限制更多:尽管结构的静态字段可以初始化,结构实例字段声明还是不能使用初始值设定项。  结构不能声明默认构造函数(没有参数的构造函数)或析构函数。  结构...
  • 本文主要对C#结构区别进行简要分析,文中举了实例,便于理解,具有很好的参考价值,需要的朋友一起来看下吧
  • 主要介绍了理解C#中参数的值引用以及传递结构和类引用的区别,文中举了两段代码例子来简单说明,需要的朋友可以参考下
  • 理解结构和类区别

    千次阅读 2006-03-07 15:47:00
    本文介绍了结构和类的几点区别。主要参考了Microsoft Visual C# 2005 Step by Step。如有值得商榷之处,还请各位读者不吝指教。 结构和类非常类似,但是仍然有许多重要的区别。 第一,对于结构,不能声明一个不带...
  • C++类和结构区别

    2010-06-29 16:54:00
    C++类和结构区别
  • 主要介绍了C#中结构区别,结构是C#初学者比较轻易混淆的概念,本文加以实例说明,需要的朋友可以参考下
  • c++ 结构和类

    2012-07-25 10:31:00
     结构差别   如何选择结构还是  一.结构的示例比较:  结构示例:  public struct Person  {   string Name;   int height;   int weight  public bool overWeight()  {  ...
  • 目录类和结构的实例比较 类和结构差别 如何选择结构还是 一.类和结构的示例比较:结构示例: public struct Person { string Name; int height; int weight public bool overWeight() { //implement something ...
  • 结构的示例比较: 结构示例: public struct Person {  string Name;  int height;  int weight public bool overWeight() {  //implement something } }  ...
  • 注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样 例如:结构实现接口 interface IImage { void Paint(); } struct Picture : IImage { public void Paint() { // painting code goes here } ...
  • c#类和结构区别

    2012-03-18 14:39:42
    结构的示例比较:  结构示例:  public struct Person  {  string Name;  int height;  int weight  public bool overWeight()  {  //implement something  ...
  • 结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight() { //implement something } } 示例: public class TestTime ...
  • Struct结构和Class区别

    千次阅读 2016-11-23 20:29:58
    1,定义使用非常相似,例子如下: public struct Student {  string Name;  int Age; } public class Question {  int Number;  string Content; } 使用: Student s=new Student(); Questi
  • VC++入门经典学习笔记--结构和类

    千次阅读 2016-09-10 11:16:15
    C++中的结构在功能上可以由代替,因为任何使用结构能够做到的事情都可以使用做到。但是因为Windows是在广泛应用C++之前用C语言编写的,所以结构遍布在Windows编程的各个方面。今天,结构仍然被广泛使用,因此...
  • C# 结构区别

    千次阅读 2014-03-20 22:26:39
    结构区别 C++中结构的唯一区别是在于默认的访问级别,但是C#中的区别就稍微多了点,C#中如下 (1)是引用类型,结构是值类型。 中: public class Person { public string Name { get; set; } ...
  • c#中类和结构区别

    2006-10-25 18:01:00
    在C#中的类和结构十分相似,用struct声明一个结构而用class生命一个 如:定义一个class example{string blog}定义一个结构struct example{string blog}结构和类也存在区别这主要包括1。结构是值类型,它存储在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 957,912
精华内容 383,164
关键字:

结构和类区别