- 1、本文档共135页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法数据数据结构
算法和数据结构 算法数据和数据结构 刘宇 2001年 程序=算法+数据结构 软件:刻画现实世界,解决现实世界中的问题 语言:实现的工具 算法:解的描述(日常的:如魔方) 数据结构:现实世界的数据模型 程序=算法+数据结构 几个例子(问题) 表达式解释 6+5*4=? 字符串匹配 串“ABCAC”出现在另一个串“ABCABCACAC”的第几个位置上 排序 一个序列,如何最快地对其进行排序 压缩编码 AAAABBBCDDE?? 图的最短路径 地理研究中的交通网络 课程讲述的内容 上述问题的答案,包括 一些常用的数据结构类型以及其应用 与这些数据结构的有关算法 空间数据结构 数据结构(一) 作为学科的数据结构 数据结构是研究非数值计算的程序设计问题中计算机的操作对象以及它们之间关系和操作等等的学科。 非数值计算 操作对象(数组) 数据结构(二) 作为研究对象的数据结构 数据 数据项目 数据对象 数据结构 存在一种或多种特定关系的数据元素的集合 集合 关系 Data_Structure = (D,S) D:数据元素的有限集合 S:关系 数据结构(三) 几个例子 图书管理 对弈 道路交叉口 数据结构的分类(例子) 集合 线性 树型 网状 数据结构(四) 数据结构?物理结构 顺序存储 链式存储 抽象数据类型 数据类型(int,float) 抽象数据类型 原子类型 固定聚合类型 可变聚合类型 面向对象技术与数据结构 算法 定义 为了完成特定任务指令的有穷序列 好的算法的特性 正确性 可读性 健壮性 效率和存储要求 算法的效率 时间复杂性 问题规模 大O记法 空间复杂性 线性表的定义 线性表的定义 唯一的第一个元素 唯一的最后一个元素 前驱 后继 相关概念和例子 数据项 纪录 文件 例子 字母表 数据库表 线性表操作(一) 初始化:Initiate 求长度:Length 得到第I个元素:Get 设置第I个元素:Set 求前驱:Prior 求后继:Next 定位:Locate 插入:Insert 线性表操作(二) 删除操作:Delete 判断表是否为空:Empty 置空表操作:Clear 线性表的存储结构 顺序存储 链式存储 两种存储方式的比较 顺序存储 优点:元素访问方便 缺点:内存使用;插入删除不方便 链式存储 优点:内存利用好,插入删除方便 缺点:元素访问不方便 链式存储的代码(C)(一) struct Node { Data_Type Data; struct Node *pNext; }; 具体的两种实现 1:pHeader指针指向的地址存放数据 这样,链表为空时: pHeader = NULL;(未分配任何空间) 链表不为空时(一个元素): 2:pHeader指针指向的地址不存放数据 链表为空时,分配了一个节点的空间。 链式存储的代码(C)(二) //得到第nIndex个元素 //注意的问题 //基0还是基1 //两种实现方式的不同,以下的代码是基1,第二种实现方式 Data_Type Get(struct Node *pHeader,int nIndex) { struct Node *p = pHead; for(int i=0;inIndex;i++) { p=p-pNext; assert(p!=NULL); } return p-Data; } 链式存储的代码(C)(三) //向第nIndex个位置上插入数据元素dataInsert void Insert(struct Node *pHeader,int nIndex,Data_Type dataInsert) { struct Node *p = pHeader; struct Node *pInsert = new struct Node[1]; pInsert-Data = dataInsert;(注意赋值) for(int i=0;inIndex-1;i++) { p=p-pNext; assert(p!=NULL); } pInsert-pNext = p-pNext; p-pNext = pInsert; } 链式存储的代码(C)(四) //删除第nIndex个位置上的数据元素 void Insert(struct Node *pHeader,int nIndex) { struct Node *p = pHead; for(int i=0;inIndex-1;i++) { p=p-pNext; assert(p!=NULL); } assert(p-pNext!=NULL); struct Node *pTemp = p-pNext-pNext; delete []p-
文档评论(0)