数据结构 绪论

一、基本概念

 

        数据: 对客观事物的符号表示;在计算机科学中指能输入到计算机并被计算机程序处理的符号的总称。

        随着计算机应用领域的扩大,数据的范畴包括:整数、实数、字符串、图像和声音等。

 

        数据元素: 也称为记录、结点,是数据的基本单位,在计算机程序中作为一个整体来处理。一个数据元素可包含多个数据项。数据项是数据不可分割的最小单位。

        如一本书的书目信息是一个数据元素,它包含多个数据项,如书名、作者名、ISBN、价格等。

 

        数据对象: 是具有相同性质数据元素的集合,是数据的一个子集。

        如大写字母字符数据对象为集合C = {'A','B' ... 'Z'}。


        数据结构: 相互之间存在一种或多种特定关系的数据元素的集合,指数据之间的相互关系(此处指逻辑关系),即数据的组织形式。

 

        结构: 数据元素之间的关系。通常包括4类:集合、线性结构、树形结构、图形(网状)结构。

 

        数据结构的形式定义:

               Date_Structure = (D, S)

        其中D为数据元素的有限集,S为D上关系的有限集。


二、数据结构内涵

 

        数据结构指数据之间的关系(结构)。一般包括三方面的含义:

        逻辑结构:描述数据元素之间的逻辑关系,独立于计算机。可看做是从具体问题中抽象出来的数学模型。

        存储结构/物理结构:描述数据在计算机中的存储表示。依赖于计算机语言,相对逻辑结构来说它是具体的。

        数据的运算:数据可执行的操作,如插入、删除、排序等。定义在逻辑结构上,就是说我们只需知道这些操作“做什么”,而不需考虑如何实现这些操作,即“怎么做”。只有确定了存储结构后,才考虑如何实现这些操作。

 

        数据逻辑结构分类

        线性结构:结构为非空集,有且只有一个开始结点和终端结点。每个元素至多只有一个直接前驱和一个直接后继。如:栈、队列、串。

        非线性结构:每个元素可以对应多个直接前驱和多个直接后继。如树、图等。

 

        数据存储结构分类:

        顺序存储:通过存储单元的邻接关系来表示数据的逻辑关系。逻辑上相邻的结点存储在物理上相邻的存储单元里,通常用数组来描述。

        链式存储:通过指示存储单元地址的指针来表示数据的逻辑关系。不要求逻辑相邻的元素在物理存储上相邻,通常用指针类型描述。

 

        同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构来表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求。

 

        数据结构三方面的关系

        数据的逻辑结构、数据的存储结构及数据的运算这三方面是一个整体。孤立地去理解一个方面,而不注意它们之间的联系是不可取的。

        存储结构是数据结构不可缺少的一个方面:同一逻辑结构的不同存储结构可冠以不同的数据结构名称来标识。 

        【例】线性表是一种逻辑结构,若采用顺序方法的存储表示,可称其为顺序表;若采用链式存储方法,则可称其为链表。

        数据的运算也是数据结构不可分割的一个方面。在给定了数据的逻辑结构和存储结构之后,按定义的运算集合及其运算的性质不同,也可能导致完全不同的数据结构。

        【例】若对线性表上的插入、删除运算限制在表的一端进行,则该线性表称之为栈;若对插入限制在表的一端进行,而删除限制在表的另一端进行,则该线性表称之为队列。更进一步,若线性表采用顺序表或链表作为存储结构,则对插入和删除运算做了上述限制之后,可分别得到顺序栈或链栈,顺序队列或链队列。


三、数据类型和抽象数据类型 (ADT)

        数据类型:是一个值的集合以及定义在这个集合上的操作的总称。

        抽象数据类型:是指一个数学模型以及定义在该模型上的操作,是指抽象数据的组织和与之相关的操作。可以看作是数据的逻辑结构及其在逻辑结构上定义的操作。

        

        ADT可描述如下(以三元组为例):

        ADTTriplet{

         数据对象:D = {e1,e2,e3|e1,e2,e3∈ElemSet(定义了关系运算的某个集合)}

         数据关系:R1 ={<e1,e2>,<e2,e3>}

         基本操作:

                  InitTriplet(&T, v1, v2,v3)

                  操作结果:构造了三元组T,元素e1,e2,e3分别被赋以v1,v2,v3的值

                  DestoryTriplet(&T)

                  操作结果:三元组T被销毁

                  Get(T, i, &e)

                  初始条件:三元组T已存在,1 <= i <= 3

                  操作结果:用e返回T的第i元的值

                  Put(&T, i, e)

                  初始条件:三元组T已存在,1 <= i <= 3

                  操作结果:改变T的第i元的值为e

                  IsAscending(T)

                  初始条件:三元组T已存在

                  操作结果:如果T的3个元素按升序排序,则返回1,否则返回0

                  IsDescending(T)

                  初始条件:三元组T已存在

                  操作结果:如果T的3个元素按降序排序,则返回1,否则返回0

                  Max(T, &e)

                  初始条件:三元组T已存在

                  操作结果:用e返回T的3个元素中的最大值

                  Min(T, &e)

                  初始条件:三元组T已存在

                  操作结果:用e返回T的3个元素中的最小值

 

    }ADT Triplet


         将Triplet编程实现如下:

         其中c1.h文件内容如下:



         其中triplet.h文件内容如下:

         

         其中triplet.cpp文件内容如下:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值