数据结构的概述

1.数据结构


数据结构是研究数据元素存储数据元素之间的关系的存储;因此数据结构可以简化成。 

数据结构=数据元素+数据元素之间的关系

数据结构一般包含三个方面:

(1).数据之间的逻辑关系,是根据实际问题抽象出来的;

(2).数据、数据关系的存储,即在计算机内存中表示方式;

(3).数据的操作

例如:下面以学生的成绩表为例,进行讲述


逻辑结构

表的一行代表一个数据元素,它由学号、姓名、成绩、分数等级等数据项组成。

表中数据元素之间的逻辑关系是:对表中任一个结点,与它相邻且在它前面的结点(亦称为直接前趋(Immediate Predecessor))最多只有一个;与表中任一结点相邻且在其后的结点(亦称为直接后继(Immediate Successor))也最多只有一个。表中只有第一个结点没有直接前趋,故称为开始结点;也只有最后一个结点没有直接后继。故称之为终端结点。

存储结构:

该表的存储结构是指用计算机语言如何表示结点之间的这种关系,即表中的结点是顺序邻接地存储在一片连续的单元之中,还是用指针将这些结点链接在一起?

数据的操作:

在上面的学生成绩表中,可能要经常查看某一学生的成绩;当学生退学时要删除相应的结点;进来新学生时要增加结点。究竟如何进行查找、删除、插入,这就是数据的运算问题。
    搞清楚了上述三个问题,也就弄清了学生成绩表这个数据结构。

  算法:对存储数据的操作,因此数据的存储方式不同,相同的操作一般对应的算法也不同。


2.数据的逻辑结构分类


    在不产生混淆的前提下,常将数据的逻辑结构简称为数据结构。数据的逻辑结构有两大类:

1)线性结构
    线性结构的逻辑特征是:若结构是非空集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。
    线性表是一个典型的线性结构。栈、队列、串等都是线性结构。

2)非线性结构
    非线性结构的逻辑特征是:一个结点可能有多个直接前趋和直接后继。数组、广义表、树和图等数据结构都是非线性结构。

3.数据的四种基本存储方法


     数据的存储结构可用以下四种基本存储方法得到:
1)顺序存储方法
    该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。
    由此得到的存储表示称为顺序存储结构  (Sequential Storage Structure),通常借助程序语言的数组描述。
     该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。

(2)链接存储方法
    该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。由此得到的存储表示称为链式存储结构(Linked Storage Structure),通常借助于程序语言的指针类型描述。

(3)索引存储方法
    该方法通常在储存结点信息的同时,还建立附加的索引表。
    索引表由若干索引项组成。若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(Dense Index)。若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引(Spare Index)。索引项的一般形式是:
                     (关键字、地址)

关键字是能唯一标识一个结点的那些数据项。稠密索引中索引项的地址指示结点所在的存储位置;稀疏索引中索引项的地址指示一组结点的起始存储位置。

(4)散列存储方法
    该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。 
    四种基本存储方法,既可单独使用,也可组合起来对数据结构进行存储映像。
    同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构来表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求。


4.数据结构三方面的关系


    数据的逻辑结构数据的存储结构数据的运算这三方面是一个整体。孤立地去理解一个方面,而不注意它们之间的联系是不可取的。
    存储结构是数据结构不可缺少的一个方面:同一逻辑结构的不同存储结构可冠以不同的数据结构名称来标识。 
    【例】线性表是一种逻辑结构,若采用顺序方法的存储表示,可称其为顺序表;若采用链式存储方法,则可称其为链表;若采用散列存储方法,则可称为散列表。
    数据的运算也是数据结构不可分割的一个方面。在给定了数据的逻辑结构和存储结构之后,按定义的运算集合及其运算的性质不同,也可能导致完全不同的数据结构。
    【例】若对线性表上的插入、删除运算限制在表的一端进行,则该线性表称之为栈;若对插入限制在表的一端进行,而删除限制在表的另一端进行,则该线性表称之为队列。更进一步,若线性表采用顺序表或链表作为存储结构,则对插入和删除运算做了上述限制之后,可分别得到顺序栈或链栈,顺序队列或链队列。


例2.

电话号码查询问题。
     编一个查询某个城市或单位的私人电话号码的程序。要求对任意给出的一个姓名,若该人有电话号码,则迅速找到其电话号码;否则指出该人没有电话号码。
    要解此问题首先构造一张电话号码登记表。表中每个结点存放两个数据项: 姓名和电话号码。
    要写出好的查找算法,取决于这张表的结构及存储方式。最简单的方式是将表中结点顺序地存储在计算机中。查找时从头开始依次查对姓名,直到找出正确的姓名或是找遍整个表均没有找到为止。这种查找算法对于一个不大的单位或许是可行的,但对一个有成千上万私人电话的城市就不实用了。若这张表是按姓氏排列的,则可另造一张姓氏索引表,采用如下图所示的存储结构。那么查找过程是先在索引表中查对姓氏,然后根据索引表中的地址到电话号码登记表中核查姓名,这样查找登记表时就无需查找其它姓氏的名字了。因此,在这种新的结构上产生的查找算法就更为有效。


5.衡量算法的标准:


1.时间复杂度

大概程序要执行的次数,而非执行的时间

2.空间复杂度

算法执行过程中大概所占的最大内存

3.难易程度

4.健壮性


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值