基本数据类型是对于指令操作的数据单元来说的。其决定了操作,字节数。这个概念很对编译有用。比如short int x = 2; 则是把数“2”指令中使用2个字节,X也用2个字节的存储。然后 int y = x;汇编代码为:
Movl $2,%ax # %ax=x.
Movswl %ax,%ecx #%ecx=y.
y使用4个字节的存储,而且因为x的int关系,决定了操作movswl。
结构体等复合数据类型:方便用户设计程序中对数据的处理,对现实世界数据语义的映射。(部分映射,只反映一个实体,对象,对象间关系没有,对于编程来说不重要,反映在程序设计过程中了。面向对象思想)如
struct student {
int age;
int scroe;
String name;
}
表征数据怎么组织,已经是数据结构(格式:信息的组织)了。(当然也和数据类型交叉)
数据结构:针对大量数据单元,包含逻辑结构,存储结构,操作(如栈,队列,图)。这个概念针对程序设计思想提出的。现实世界一些问题的基本模型(区别于复合数据类型,属于结构包含了操作,即问题对象的为行为模式,过程,比如用户的配对队列,用队列数据结构)。
是现实世界,语义关系的一个反应
所以,数据结构,是程序设计用的,基本数据类型,是编译器用的。
2013.6.1
基于这篇文章(http://blog.csdn.net/Cpp_Java_Man/article/details/722569)给出的解释,
广义的数据结构:包括数据的1.逻辑结构,2.存储结构,3.定义在逻辑结构上的操作。
狭义的数据结构:指的是数据的逻辑结构,是信息的组织方式,根据元素的前后趋情况划分。我们在讨论的时候,常用狭义概念,而研究数据结构这么课程的时候,就使用广义的数据结构。
数据的存储结构:4种,见文章(顺序,链,索引{关键字,地址},散列索引)。
定义在逻辑结构上的操作:增、删、改、查(重点)、排序(属于改,重点)的全部或一部分。
抽象数据结构:是数据的逻辑结构及其在逻辑结构上定义的操作。
数据类型:值和操作的集合。基本数据类型的操作由编译器实现了。自定义的抽象数据类型的实现基于基本刷数据类型。
这些概念如何使用??
- 数据的逻辑结构和抽象数据类型,都是在 概念(或抽象、逻辑)层次描述问题。 软件的设计,总是由
现实的实现—> 概念(抽象、逻辑)层次描述【考虑数据逻辑结构及定义在数据逻辑结构上的操作,即ADT】—> 程序的实现上【考虑存储结构及在此存储结构上操作的实现】。
- 由上可知,数据结构和数据抽象类型的关系即:数据结构包含了程序的设计及实现过程。而抽象数据类型是数据结构的一部分,指涉及了程序的设计部分。 数据存储结构,基本数据类型涉及了程序的实现部分。
- 数据类型,抽象数据类型,基本数据类型:
- 基本数据类型的概念符合数据类型(值,操作)。抽象数据类型同样符合数据类型概念。但是抽象数据类型额外涉及了数据逻辑结构,因为对于多个单元数据组成的值集合,集合富含了数据之间的关系,值得表示不能脱离关系的约束。
- 另外,对于操作,数据结构包含了操作的细节(如队列FIFO的插入),而抽象数据结构对操作只要求抽象的,无具体要求(队列即插入)。
- 过程例如:1.确定问题是什么数据逻辑结构(集合,线性表,树,图)。2.然后确定操作,结合操作特性的一些数据逻辑结构,有了新名字,比如,线性表+先进后出 = 栈。 3.给出ADT描述。 4。结合ADT,基于使用语言的基本数据类型,确定数据的存储结构(考虑各存储结构的优缺点),给出实现。
抽象数据类型(ADT):
抽象数据类型(ADT)的形式化描述,包含了数据逻辑结构的描述及操作的描述(也是函数的要素:输入输出【此处针对抽象数据类型,所以输入输出的数据基本上就是逻辑结构描述的数据,独立函数的话,则看参数及返回值了】,操作执行条件,【通常是要操作的数据具有约束,需要满足约束】,执行后数据状态。).
形式化描述:即具有严格语义及格式的描述形式,数学符号或图或语言(程序设计语言也是,但是太严格,太细节性)。
ADT ADT-Name{
Data://数据说明
数据元素之间逻辑关系的描述
Operations://操作说明
Operation1://操作1,它通常可用C或C﹢﹢的函数原型来描述
Input:对输入数据的说明
Preconditions:执行本操作前系统应满足的状态//可看作初始条件
Process:对数据执行的操作
Output:对返回数据的说明
Postconditions:执行本操作后系统的状态//"系统"可看作某个数据结构
Operation2://操作2
……
}//ADT
函数设计考虑的一些要素:
1.在无类的语言中,函数的设计通常会将要操作的数据对象作为参数,这样可以扩展函数的通用性。
2.如果输出值的范围是其类型的全集,那么不能放在返回值中返回,否则调用者不能判断函数是否执行失败。
参考文献:
【1】http://blog.csdn.net/Cpp_Java_Man/article/details/722569 (重)
【2】http://blog.csdn.net/wode1366/article/details/8941500