数据结构学习(一):入门

1. 算法 + 数据结构 = 程序

问题(problem):从输入到输出的一种映射函数

数据结构(Data Structure):逻辑数据结构在计算机中的存储表达,支持相应的操作

算法(algorithhm):对特定问题求解过程的描述方法

程序(program):算法在计算机程序设计语言中的实现

 

2.层次

逻辑结构:

(1).线性表、栈和队列、字符串

(2).二叉树、树、图

运算:

(1).内排序、文件管理、外排序

(2).检索、索引

扩展:

高级数据结构



3.问题求解

(1).编写计算机程序的目的:解决实际的应用问题

(2).问题抽象:分析和抽象任务需求,建立问题模型

(3).数据抽象:确定恰当的数据结构表示数学模型

(4).算法抽象:在数据模型的基础上设计合适的算法

(5).数据结构+算法,进行程序设计:模拟和解决实际问题


4.什么是数据结构

(1)结构:实体和关系

(2)数据结构:

  • 按照逻辑关系组织起来的一批数据
  • 按一定存储方法把它存储在计算机中
  • 在这些数据上定义一个运算的集合

  • 数据的逻辑结构:线性表 二叉树 
  • 数据的存储结构:顺序方法、链接方法、   索引方法、散列方法
  • 数据的运算:增、删、查、改、   排序、检索

(3)数据结构的逻辑组织

线性结构:线性表(表、栈、队列、串等)

非线性结构:树(二叉树、Huffman树、二叉检索树等)     图(有向图、无向图等)

(4)数据的存储结构

逻辑结构到物理存储空间的映射

计算机主存储器(内存)

  • 非负整数地址编码,相邻单元的集合
  • 基本单元是字节
  • 按地址随机访问
  • 访问不同地址所需时间基本相同

顺序方法 

用一块连续的存储区域存储数据称为 顺序存储
顺序存储把一组结点存储在按地址相邻的顺序存储单元里,结点间的逻辑后继关系用 存储单元的自然顺序关系 来表达
顺序存储结构称为 紧凑存储结构 ,其紧凑性是指它的存储空间除了存储有用数据外,没有用于存储其他附加的信息
紧凑性可以用“ 存储密度 ”来度量:它是一个存储结构所存储的“有用数据”和该结构(包括附加信息)整个存储空间大小之比
有时为了“ 用空间换取时间 ”,在存储结构中存储一些附加信息还是很必要的。譬如,用于提高算法的执行速度,或者让算法实现更为简便等

链接方法
利用指针,在结点的存储结构中附加指针字段称为 链接法 。两个结点的逻辑后继关系 用指针 来表达
任意的逻辑关系 r ,均可使用这种指针地址来表达。一般的做法是将数据结点分为两部分 :
一部分存放结点本身的数据,称为 数据字段
一部分存放指针,称 指针字段 ,链接到某个后继结点,指向它的存储单元的开始地址。多个相关结点的依次链接就会形成 链索

对于经常增删结点的复杂数据结构,顺序存储往往会难以应付,而链接方法结合动态存储为这些复杂问题提供了解决方法
缺点:
为了访问结点集 K 中某个结点,必须用该结点的存储指针
当不知道结点指针时,为了在结点集 K 中寻找某个符合条件的结点,就要沿着链接结点的链索,按结点逐个比较搜索,得花费相当可观的时间

索引方法
顺序存储法的一种推广,也使用 整数编码来访问数据结点位置
建造一个由整数域 Z 映射到存储地址域 D 的函数  Y Z→D ,把 结点的整数索引值 z∈Z 映射到 结点的存储地址 d∈D Y 称为 索引函数
为了构造任意的索引函数,可为索引函数提供附加的存储空间,称为 索引表 S
索引表中每一元素是指向数据结点的指针。因为索引表 S 由等长元素(指针)组成,故可进行线性的索引计算:

        始址(元素S[i]) =始址(元素S[0]) i ·(指针尺寸)

通过上述公式,由索引号i 可以计算出索引表中的单元S[i]的始址,再通过读出S[i]元素的内容(指针),访问真正需要访问的数据结点

索引方法付出了存储的开销,其数据结点要附加用于指针的存储空间
索引方法在程序设计中是一种经常使用的方法,主要原因是对于非顺序的存储结构来说,使用索引表是快速地由整数索引值找到其对应数据结点的 唯一 方法

散列方法
索引方法的一种延伸和扩展
利用一种称为 散列函数 (hashfunctions) 的机制来进行索引值的计算,然后通过索引表求出结点的指针地址
散列函数是将字符串 s 或关键码)映射到非负整数 z 的一类函数 h: S → Z

  对任意的 s∈ S,散列函数h(s)=zz∈ Z

散列函数 h(s) 除了取非负整数值外,关键的问题包括:
---如何恰当地选择散列函数
---如何建造散列表
---如何在构建散列表时解决“碰撞”问题

5.抽象数据类型

简称ADT(Abstract Data Type)

  • 定义了一组运算的数据模型

  • 与物理存储结构无关

  • 使软件系统建立在数据之上(面向对象)

模块化的思想的发展

  • 隐藏运算实现的细节和内部数据结构
  • 提高复用的力度和粒度(软件复用

由三元组   < 数据对象,数据关系,数据操作 > 表示

  • 数据对象D
  • 数据关系S
  • 数据操作P

template <class Type>  // 模板参数为类型Type
class className  {
private:    	// 数据结构的的取值类型和取值空间
	Type  dataList;       	 // 定义数据及其存储方式
	……							    	
public: 			 // 运算集
	methodName();	 // 定义对数据的操作
	……						
}; 





















  • 27
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值