百科狗-知识改变命运!
--

“数据结构” 和 “数据类型” 两个概念的本质是什么,两者的区别与联系是什么?它们是从属关系吗?

泡在奶味里1年前 (2023-12-01)阅读数 8#综合百科
文章标签变量结构

数据结构与数据类型不是孤立的,首先你要知道他们都是为编程、为算法服务的,其次值,数据类型,数据结构相互是有关联的。

那么什么是算法?算法就是解决问题的步骤,即使是烹饪,也是算法,因为它需要一定的变量输入(各种原料配料),通过一定的解决问题的步骤(烹饪),然后得出结果,烹饪过程就是其中的算法。

这些输入的变量(比如盐、糖、油、调味料、肉块),就是数据(或者说是值),这些数据有自己的特点,油用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

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)