“数据结构” 和 “数据类型” 两个概念的本质是什么,两者的区别与联系是什么?它们是从属关系吗?
数据结构与数据类型不是孤立的,首先你要知道他们都是为编程、为算法服务的,其次值,数据类型,数据结构相互是有关联的。
那么什么是算法?算法就是解决问题的步骤,即使是烹饪,也是算法,因为它需要一定的变量输入(各种原料配料),通过一定的解决问题的步骤(烹饪),然后得出结果,烹饪过程就是其中的算法。
这些输入的变量(比如盐、糖、油、调味料、肉块),就是数据(或者说是值),这些数据有自己的特点,油用ml衡量,糖盐用汤匙衡量,肉块用g衡量。这些衡量的方法就是数据类型。
在算法中,所有的数据都有类型,整数型、浮点型、字符型、字符串型、布尔型。。。
那么什么是数据结构?算法中要输入大量数据并对这些数据进行处理,最终得到输出结果。而在这些数据的输入输出、调用和处理过程中,我们要保存各种各样的数据并有效的管理数据。大量数据的有效管理机制就叫做数据结构。像上面烹饪的例子中,你如何安放这些糖盐肉,以便你在处理烹饪的时候可以更快捷不会手忙脚乱,这个安放的方法,就叫数据结构。
有代表性的数据结构:
数组:连续无间隙排列的数据结构叫做数组。线性排列的是一维数组,像长方形一样横竖排列的是二维数组,像立方体一样排列的是三维数组。
链表:数据按照顺序排列的数据结构叫做链表。链表中的数据可以远距离存放,数据是在链表的箭头连接的结点中顺序管理的。
栈:类似于在桌上堆书一样来管理数据的数据结构叫做栈。栈是一种与数据输入顺序相反逆序输出的数据管理方式。
队列:如同超市收银队列一样的数据结构叫做队列。队列是数据输出顺序与数据输入顺序一致的数据管理方式。
树:像倒置的树枝一样的分叉的数据结构。
全手打,我想应该说的够清楚了,希望楼主不要纠结课本上那些字面的意思,展开联想,全局把握。最后最重要的,请采纳,谢谢。
1,结构是实值类型(Value Types),而类则是引用类型(Reference Types)。
2,结构使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。
3,所有结构成员默认都是Public,而类的变量和常量数则默认位Private,不过其他类成员默认都是Public。
4,结构成员不能被声明位Protected,而类成员可以。
5,结构变量声明不能指定初始值、使用New关键字货对数组进行初始化,但是类变量声明可以。
6,结构不能声明默认的构造函数,也就是不拥有参数的非共享构造函数,但是类则无此限制。
7,二者都可以拥有共享构造函数,结构的共享构造函数不能带有参数,但是类的共享构造函数则可以带或者不带参数。
8,结构不允许声明析构函数(Destructor),类则无此限制。
9,结构的实例(Instance)声明,不允许对包含的变量进行初始化设定,类则可以在声明类的实例时,同时进行变量初始化。
10,结构是隐式继承自ValueType类,而且不能继承任何其他类型,类则可以继续自ValueType以外的任何类。
11,结构是无法被继承的,类则可以。
12,结构永远不会终止,因此CLR不会在任何结构上调用Finalize方法。类则是由内存回收进程加以终止,当内存回收进程检测到没有任何作用的类时,它就会调用类的Finalize方法。
13,结构不需要构造函数,类则需要构造函数。
14,结构只能在一种情况下使用非共享构造函数,那就是非共享构造函数会接受参数。但是类则无此限制,它可以使用带参数或不带参数的非共享构造函数。
14,每一个结构都具有无参数的隐含公共构造函数,此构造函数会将结构的所有成员初始化为其默认值。不需要重新定义这个行为。
在“实例和变量”层面上,由于结构是数值类型的,因此每一个结构变量会永远的绑定到结构实例上。然而类是引用类型的,而且对象变量可引用不同的类实例,在此方面的区别,会对使用将结构和类造成如下的影响:
15,结构变量会隐式的使用结构的无参数构造函数来初始化成员,这就意味语句 Struct S = new Struct()。
16,当您将一个结构变量赋值给另一个,或者将结构实例传递到程序变量时,所有变量成员的值会复制到新的结构中。当您将一个对象变量赋值给另一个,或者将对象变量传递给程序时,则只是复制指针。
17,您可以将Null值赋值给结构变量,但是该实例会一直与该变量保持关联。虽然变量成员会因此赋值而重新初始化,但是您还是可以调用变量的方法并访问其数据成员。相反的,如果您将对象变量设定为Null,您就会中断它与任何类型实例的关联,而且除非您再将另一个实例赋值给它,否则无法通过变量访问任何成员。
18,您可以在不同时间将不同的类的实例赋值给同一个对象变量,而且在同一时间可有好几个对象变量引用相同的类实例,如果您对类成员值做了改变,则其他指向相同实例的对象变量也会发生改变。然而,结构成员则会封装在他们自己的实例中,变更结构成员值并不会对其他任何结构变量的成员造成影响,甚至也不会影响相同结构声明的其他实例。
19,两个结构必须以成员对成员的比较方式来执行相等比较。两个对象变量可以使用Equals方法来加以比较。Equals会判断两个变量是否指向相同的实例。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!