基本数据类型与基本运算
- 格式:doc
- 大小:182.50 KB
- 文档页数:11
基本数据结构及其运算1.数组:数组是一种线性数据结构,可以存储相同类型的一组元素。
数组的特点是连续存储,可以通过索引快速访问元素。
数组的常用运算包括访问指定索引的元素、插入和删除元素等。
2.链表:链表也是一种线性数据结构,但不同于数组的连续存储,链表是由一系列节点组成的,每个节点包含元素和指向下一个节点的指针。
链表的常用运算包括在指定位置插入和删除节点、遍历链表等。
3. 栈:栈是一种后进先出(LIFO)的数据结构,用于存储和管理函数调用、表达式求值等需要按照特定顺序操作的场景。
栈的基本运算包括入栈(push)和出栈(pop)。
4. 队列:队列是一种先进先出(FIFO)的数据结构,用于存储和管理需要按照特定顺序处理的元素。
队列的基本运算包括入队列(enqueue)和出队列(dequeue)。
5.树:树是一种非线性数据结构,由一组节点和边组成,用于表示层次关系。
树的根节点是唯一的,每个非叶子节点可以有多个子节点。
树的常用运算包括遍历树(前序、中序、后序遍历)、特定节点等。
除了上述基本的数据结构,还有其它常见的数据结构如哈希表、图等。
不同的数据结构适用于不同的应用场景,具有不同的性能特点和运算复杂度。
在进行数据结构的运算时,可以使用不同的算法和技术来提高效率,常见的包括递归、迭代、排序算法、算法等。
此外,还可以使用一些高级数据结构如红黑树、堆等来优化特定的问题。
总结起来,数据结构是计算机科学中非常重要的基础概念,它提供了存储和组织数据的方法。
不同的数据结构适用于不同的应用场景,通过不同的算法和技术可以提高数据结构的运算效率。
第二章基本数据类型与基本运算本章主要介绍程序设计中高级语言提供的数据类型和其上允许的基本运算。
在介绍这些内容时,我们通过穿插一些实例介绍如何应用数据类型与基本运算来解决一些简单的问题。
2.1 数据类型的概念2.1.1 为什么程序设计语言中要引入“数据类型”这一概念?2.1.2 数据类型的概念数据类型是程序设计语言中的一个非常重要的概念。
那么,什么是数据类型呢?数据类型是由该类型的数据的值域(即值集)和在这些数据上所有施加的运算的集合(即运算集或操作集)组成。
值域指出了每一种数据类型的变量合法的数据取值范围,而运算集合则规定了每一种数据类型的变量和数据其上所允许进行的运算。
值域和运算集是数据类型的两个基本属性。
在下面介绍Pascal语言的数据类型的有关章节中,对每一种数据类型均将说明这两种属性。
2.1.3 数据类型的代数理论基础一个数据类型是一个二元组(D,R)。
其中,D是一个数据类型的值域,R是建立在D上的运算(操作)的集合。
这个二元组构成了一个代数系统。
其中,D叫做该系统的基集。
从本质上说,一个代数系统就是一个带运算的集合,而一个数据类型就是一个代数系统。
从这个概念出发,程序设计语言理论在数据结构的基础上发展了一些数据和类型的代数理论。
这些理论属于程序设计语言语义学的范畴,将来,有兴趣的学生在具备了比较深入的基础之后,可以作进一步的了解。
2.1.4 Pascal语言中数据类型的分类Pascal语言的优点之一是有丰富的数据类型,按照其定义者的不同可分为下面几类,如表2-1所示。
整数类型实数类型系统预定义的数据类型布尔类型(逻辑类型) 基本(标准)数据类型字符类型Pascal 枚举类型数据类型子界类型数组类型用户自定义的数据类型记录类型构造型数据类型集合类型文件类型指针类型图2-1 Pascal的数据类型2.2 基本数据类型本节介绍四种基本数据类型(Elementary Date Type),它们是整数类型、实数类型、布尔类型(逻辑类型)和字符类型。
基本数据类型又称为标准数据类型(Standard Date Type),我国国家标准中将它改称为需求数据类型。
基本数据类型是语言系统预先定义或规定的数据类型。
2.2.1 整数类型整数类型(Integer Date Type)简称整型,在Pascal语言中用类型标识符integer表示整数类型。
整型的数据可以是正整数、负整数和零,其中,正整数和零可以省略“+”号。
1.整数类型的值域任何计算机系统由于受机器字长的限制,它所能表示的整数只是数学中整数集合的一个有穷的子集合。
其中,最大整数为maxint,它的值与具体机器的字长有关。
一般地,若机器的字长为W时(假设用一位表示数符),由于整数在机器内采用二进制补码表示,因此,maxint=2w-1-1,其原因在“计算机组成原理”课程中将有详细解答。
整数类型的值域为[-maxint ,maxint]。
2.整数类型的数据允许进行的运算 (1) 算术运算若a,b 为整型数,两者进行算术运算如表2-1所示。
表2-1 整型数据的算术运算附注: 关于mod 运算符(Operator),不同的Pascal 语言版本的mod 运算是有差别的。
标准Pascal 中规定,a mod b 的结果都是正整数,而且要求b> 0;Turbo Pascal 语言中规定a 、b 可以为正数或负数,其运算结果的符号与被除数a 相同。
(2) 关系运算两个整型数据可以进行关系运算,其结果是一个布尔型的数据:true 或者false 。
关系运算共有六种:=(等于)、<>(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)。
例如,① 8 <> 9的结果为true ;② 3 > 9的结果为false 。
2.2.2 实数类型实数类型(Real Date Type)简称实型。
在Pascal 语言中用类型标识符real 表示实数类型。
整型的数据可以是正、负实数和实数零,其中,正实数和零可以省略“+”号。
实数在机器内的表示形式总是用浮点数的表示方法来实现的。
1.实数类型的值域在数学中,实数是一个无穷的连续集合。
但是,Pascal 语言中实数类型的数据只能是数学中实数的一个有穷的子集合,这是因为受计算机系统字长的限制。
不同的计算机系统,机器的字长不同,表示实数的方式不完全相同(虽然都用浮点数方式表示),表示实数在精度上210n -- 310n -图2-2 实数类型的数据的值域2.实数类型的数据允许进行的运算 (1) 算术运算若a,b 至少有一个为实型数据,两者进行算术运算的结果类型如表2-2所示。
表2-2 实型数据的算术运算附注: 若a,b均为整型数据,则a/b的结果类型也是实型数据。
(2) 关系运算两个实型数据,或一个为整型数据而另一个是实型数据,均可以进行关系运算,其结果是一个布尔型的数据:true或者false。
关系运算共有六种:=(等于)、<>(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)3.为什么把数区分为整数类型和实数类型?虽然在数学意义上整数是实数的一个子集,但是,在Pascal语言中还是将整数所属的整型类型从实数所属的实型类型中独立出来,这是为什么呢?首先,将两者分离出来,在机器中分别采用不同的表示方法,使它们分别表现出不同的特点,便于根据实际问题编写高质量的程序。
整型数据采用定点方式表示,优点是精确而且运算快速,缺点是数据的表示范围小;实型数据采用浮点方式表示,优点是其数据的表示范围比整数类型的数据的表示范围大得多(这给计算带来了很大方便),缺点是不精确而且运算速度较慢。
其次,便于编译程序生成高效的目标代码;第三,它符合人们的日常思维习惯。
2.2.3 布尔类型布尔类型(Boolean Date Type)又被称为逻辑类型,在Pascal语言中用类型标识符boolean表示布尔类型。
1.布尔类型的值域布尔类型的数据仅有两个:true(真)和false(假)。
2.布尔类型的数据允许进行的运算(1) 逻辑运算若a,b为布尔型数据,两者进行逻辑运算的结果类型如表2-3所示。
(2) 关系运算在Pascal语言中,布尔类型是有序类型,并且规定false < true。
因此,两个布尔类型数据可以进行关系运算,其结果是一个布尔型的数据:true或者false。
关系运算一共有六种:=(等于)、<>(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)。
例如,true<>false 的结果为true。
2.2.4 字符类型计算机系统所处理的绝大多数数据是以字符形式输入/输出的。
各种程序设计语言的编译程序通常都能自动将以字符形式输入/输出的数据与其它数据类型进行转换,但在许多情况下,需要程序员在设计程序时,直接处理字符数据。
字符数据类型是构成字符串类型的基础。
所谓字符串类型实际上是标准Pascal语言中的压缩的字符数组类型,Turbo Pascal语言中引入了专门的字符串数据类型。
字符数据类型(Character Date Type)简称字符型,在Pascal语言中用类型标识符char 表示字符类型。
在程序中,用单引号将字符类型数据的集合中的一个字符括起来以表示字符类型的数据值,也称字符常数,如′A′、′a′。
注意,用单引号括起来的字符序列被称为字符串,也称字符串常数,如′Ab′、′abc′等。
字符串不是字符型数据,它是字符型的一种扩展数据类型,我们将在第六章介绍。
1.字符类型数据的值域2.字符类型数据允许进行的运算——关系运算在Pascal语言中,字符类型是有序类型(即该类型的数据是有顺序的)。
ASCII码字符集中字符的顺序规定如下:① 0-9十个数字字符的ASCII码值依次增大;② A-Z二十六个大写英文字母的ASCII码值依次增大;③ a-z二十六个小写英文字母的ASCII码值依次增大;④在ASCII码字符集中数字、大写英文字母、小写英文字母的ASCII码值依次增大。
两个字符型数据可以进行关系运算,其结果是一个布尔型的值:true或者false。
关系运算共有6种:=(等于)、<>(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)。
2.3 常量与变量通过上面介绍我们知道,Pascal语言的计算机程序中所处理的任何数据均有其类型。
从任何类型的数据在程序运行过程中表现出的性态来看,有的数据在程序运行的过程中其值发生了变化,我们称之为变量(Variable),有的数据在程序运行的过程中其值始终不发生变化,这样的数据被称为常量(Constant)。
下面我们分别介绍变量和常量的概念。
2.3.1 常量常量分成字面常量和非字面常量。
常量本身有其数据类型。
1.字面常量字面常量(Literal Constant)又被称为字面值或直接量,它是某一类型的一个数据的具体值的字面表示。
(3) 布尔类型的字面常量布尔类型的字面常量仅有两个:true(真)和false(假)。
(4) 字符类型的字面常量字符类型的字面常量用单引号将字符类型数据集合中的一个字符值括起来,以避免与语言中出现的字符混淆。
例如,′A′,′a′,′0′,′&′, ′o′,等等。
2.非字面常量非字面常量又被称为符号常量(Symbolic Constant)。
在程序中,我们可以定义某标识符来代表某字面常量,这样定义之后就可以用该标识符来代表这个字面常量。
此后,该标识符即为符号常量。
符号常量的引入,可以帮助记忆,便于使用,提高程序的可读性和可维护性(Maintainability)。
2.3.2 变量1.变量说明在Pascal语言中,程序中所用到的(静态)变量必须遵循在变量说明部分中先说明(定义),然后再使用的原则。
下面先介绍(静态)变量说明语句(Variable Declaration Statement)的语法和语义,然后作几点说明。
(1) 语法变量说明的语法图如图2-8所示。
图2-8 变量说明的语法图(2) 语义上述变量说明的语义是给变量指定名字,并把每个变量与某一确定的数据类型联系起来,这样就规定了该变量的值域和其上允许进行的运算。
程序运行前,编译程序在编译时将事先给该变量分配相应的存储空间。
2.说明(1) 变量可以用名字、属性、存储空间和值四个要素来刻画,抽象地描述一个变量可以用一个(名字,属性,存储空间,值)四元组来表示,尽管在程序设计中形式上人们通常只通过变量名来使用变量。
正确理解变量的四个要素,是学习数组、指针等类型的基础。