数据结构(部分一)

程序设计=数据结构+算法

1、什么是数据结构
数据结构是研究非数值计算的,主要解决程序设计过程对象操作的问题,以及对象之间的关系和操作的相关问题(对象之间的关系,对象的操作)。

2、数据结构的基本概念:
数据:所有能输入到计算机中用来描述客观事物的符号。
数据项:有独立含义的数据的最小单位,也叫做域。
数据元素:数据的基本单位,也称为节点,或记录。
数据结构:若干数据元素和数据元素关系组成的集合。

算法:狭义的算法指的是一种数据结构能够具有的操作,广义上的算法指挥是对特定问题求解步骤的描述(指令的有限序列)。

数据结构的三个方面:
数据的逻辑结构
数据的存储结构
数据结构的运算

四种基本的逻辑结构:
集合结构:元素之间除同属一个区间外没有任何关系。
线型结构:元素之间存在一对一关系。
树型结构:元素之间存在一对多关系。
图型结构:元素之间存在多对多关系。

3、数据结构的存储方式:
顺序存储:元素之间是连续的,使用的是段连续的内存空间用数据元素在内存的相对位置表示数据之间的关系。
优点:能够随机访问,访问效率、速度极高。
缺点:空间的利用率比较低(对内存的要求高,必须是整块的内存),元素的插入和删除不方便。

链式存储:元素之间是分散的,每个元素存储在彼此独立的内存空间,每个元素中有一个指针记录了下一个元素的内存首地址。
优点:插入、删除方便,空间的利用率高(对内存要求低,内存可以是分散的)。
缺点:不能随机访问,只能逐个遍历,访问效率、速度低。

链式存储适用于在较频繁地插入、删除、更新元素时,顺序存储结构适用于频繁查询时使用。

在实践应用中怎样选取存储结构呢?通常有以下几点考虑:
  (1)顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规模,也就是说事先对“MaxSize”要有合适的设定,设定过大会造成存储空间的浪费,过小造成溢出。因此,当对线性表的长度或存储规模难以估计时,不宜采用顺序表。然而,链表的动态分配则可以克服这个缺点。链表不需要预留存储空间,也不需要知道表长如何变化,只要内存空间尚有空闲,就可以再程序运行时随时地动态分配空间,不需要时还可以动态回收。因此,当线性表的长度变化较大或者难以估计其存储规模时,宜采用动态链表作为存储结构。

但在链表中,除数据域外海需要在每个节点上附加指针。如果节点的数据占据的空间小,则链表的结构性开销就占去了整个存储空间的大部分。当顺序表被填满时,则没有结构开销。在这种情况下,顺序表的空间效率更高。由于设置指针域额外地开销了一定的存储空间,从存储密度的角度来讲,链表的存储密度小于1.因此,当线性表的长度变化不大而且事先容易确定其大小时,为节省存储空间,则采用顺序表作为存储结构比较适宜。

(2)基于运算的考虑(时间)

顺序存储是一种随机存取的结构,而链表则是一种顺序存取结构,因此它们对各种操作有完全不同的算法和时间复杂度。例如,要查找线性表中的第i个元素,对于顺序表可以直接计算出a(i)的的地址,不用去查找,其时间复杂度为0(1).而链表必须从链表头开始,依次向后查找,平均需要0(n)的时间。所以,如果经常做的运算是按序号访问数据元素,显然顺表优于链表。

反之,在顺序表中做插入,删除时平均移动表中一半的元素,当数据元素的信息量较大而且表比较长时,这一点是不应忽视的;在链表中作插入、删除,虽然要找插入位置,但操作是比较操作,从这个角度考虑显然后者优于前者。

顺序表:
元数之间具有一对一关系,但采用顺序结构存储。

链式表:
表结构的链式存储,元素之间存在一对一关系,元素的逻辑次序和物理次序可能不一致(在内存中是分散存储元素)。为了表示元素之间的逻辑关系,需要每个元素中有一个数据项(指针),记录下一元素的位置(地址)。

栈和队列:
栈和队列是两种应用非常广泛的数据结构,它们都是特殊的线性结构,操作受限的线性表。

栈:
基本特征:只有一个数据出入口,因此只能后进先出(先进后出)。
基本操作:压栈push,弹栈pop。

队列:
基本特征:是一种先进先出的线性表,只能在一端插入数据(队尾),另一端删除数据(队头),共两个控制数据的端口。
基本操作:入队、出队、查看队头、查看队尾。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值