




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本课程内容结构 数据结构 线性结构 非线性结构 线性表栈队列串数组和广义表 顺序表链表 单链表双向链表循环链表 两种存储结构 顺序存储链式存储 树图 二叉树的遍历树和森林哈夫曼树及哈夫曼编码 图的存储图的遍历最小生成树拓扑排序和关键路径最短路径 查找排序 静态动态哈希表 内部外部 1 2 一 问题引入 程序 实际问题 数学模型 计算机 实际问题中元素的数学抽象 建立和解决数学模型的方法 指针的数据类型 3 C语言 数据结构 数据库 会武会功 第1章C语言概述 了解该语言程序的格式 构成及基本要求 编程的基本思路和方法 上机调试的基本步骤和方法 注意在书写或输入程序时采用缩进格式 第2章C语言程序设计的初步知识 标识符 基本数据类型及不同之间赋值规律 算术运算符 编辑 编译 链接和运行的过程 第3章顺序结构程序设计 各种类型数据的输入输出方法 格式转换字符 顺序结构 程序设计的一般思路 第4章选择结构程序设计 关系和逻辑运算符及表达式值 if和switch语句 简单的算法 第5章循环结构程序设计 循环含义 while和for和do while语句 break和continue的作用 算法 如穷举 迭代 递推 自顶向下 逐步求精 第6章数组 一二维的应用 字符数组 数组算法 排序 第7章函数 定义 形参 实参 值传递 调用自定义函数条件及嵌套和递归调用 变量的作用域和存储类别 多文件程序 模块化程序设计 第8章编译的预处理 宏定义 文件包含处理 条件编译 第9章指针 指针变量 数组 字符串 的指针和指向数组 字符串或函数 的指针变量 指向指针的用法 第10章构造数据类型 结构体类型变量 数组 链表的操作 共用体类型 typedef 第11章文件 缓冲文件 文件指针 打开 关闭 读 写文件操作 第12章位运算 使用位运算 某些位的操作 4 上机题P44第9题讲解 指导老师 许晓5 题面 设有多项式 A x 7 3x 9x8 3x15B x 5x 6x7 9x8 1 用单链表给出A x 的存储表示 2 用单链表给出B x 的存储表示 3 以上述两个单链表为基础 通过插入和删除等运算给出A x B x 的存储表示 其存储空间覆盖A x 和B x 的存储空间 6 首先 我们自己会做一元多项式的相加 不失一般性 设有两个一元多项式 P x p0 p1x p2x2 pnxn Q x q0 q1x q2x2 qmxm m n R x P x Q x R x 由线性表R p0 q0 p1 q1 p2 q2 pm qm pn 唯一表示 分步走 第一步 寻找和比较相加项的幂指数 操作条件 第二步 幂指数相同 系数相加 操作内容 7 解 首先要解决多项式的表征问题 即在程序中如何表征多项式 如写成 f x p1xe1 p2xe2 p3xe3 pnxen很明显 我们可以把多项式看作是一个线性表 线性表中的数据元素是一个二元组 系数 指数 用线性表 p1 e1 p2 e2 pn en 唯一代表一个多项式 其次 是选取顺序表还是链表来存储多项式 如果用户输入的多项式的项数事先无法知道 最好采用链表来存储多项式 再次 程序的主要操作是多项式相加 相加结果存储到新的链表中还是占用原来的链表 为了操作方便 先采用将相加结果存放到一个新链表中 最后 方便相加 表征多项式的链表应该按照指数降序排列 想一想 降低程序的空间复杂度 两个多项式相加的结果被存放到了一个新的链表中 可以设计一个程序 利用第二个链表存放相加后的结果 减少主函数代码 分项建子函数 模拟计算机运行 先主函数 调用子函数 8 一元多项式相加的实质是 指数不同 是链表的合并 指数相同 系数相加 和为0 去掉结点 和不为0 修改结点的系数域 算法之一 就在原来两个多项式链表的基础上进行相加 相加后原来两个多项式链表就不在存在 当然再要对原来两个多项式进行其它操作就不允许了 算法之二 对两个多项式链表进行相加 生成一个新的相加后的结果多项式链表 原来两个多项式链表依然存在 不发生任何改变 如果要再对原来两个多项式进行其它操作也不影响 9 怎么表征 p1 e1 p2 e2 pn en 为了正确表示结点间的逻辑关系 在存储每个结点值的同时 还必须存储指示其直接后继结点的地址 或位置 称为指针 pointer 或链 link 这两部分组成了链表中的结点结构 如图2 2所示 链表是通过每个结点的指针域将线性表的n个结点按其逻辑次序链接在一起的 每一个结只包含一个指针域的链表 称为单链表 为操作方便 总是在链表的第一个结点之前附设一个头结点 头指针 head指向第一个结点 头结点的数据域可以不存储任何信息 或链表长度等信息 10 1结点的描述与实现C语言中用带指针的结构体类型来描述typedefstructLnode ElemTypedata 数据域 保存结点的值 structLnode next 指针域 LNode 结点的类型 2结点的实现结点是通过动态分配和释放来的实现 即需要时分配 不需要时释放 实现时是分别使用C语言提供的标准函数 malloc realloc sizeof free 11 顺序表还应该有表示线性表的长度属性 所以用结构类型来定义顺序表类型 defineOK1 defineERROR 1 defineMAX SIZE100typedefintStatus typedefintElemType typedefstructsqlist ElemTypeElem array MAX SIZE intlength SqList 12 动态分配p LNode malloc sizeof LNode 函数malloc分配了一个类型为LNode的结点变量的空间 并将其首地址放入指针变量p中 动态释放free p 系统回收由指针变量p所指向的内存区 P必须是最近一次调用malloc函数时的返回值 3最常用的基本操作及其示意图 结点的赋值LNode p p LNode malloc sizeof LNode p data 20 p next NULL 13 常见的指针操作 14 15 单链表是由表头唯一确定 因此单链表可以用头指针的名字来命名 例1 线性表L bat cat eat fat hat 其带头结点的单链表的逻辑状态和物理存储方式如图2 3所示 2020 3 19 16 正反向建立链表 教材P22页 反向建立链表NODE int a int b intiMax NODE head s inti 教材原来有一个malloc 是错误的 head NODE malloc sizeof NODE for 循环 s NODE malloc sizeof NODE s Ai a i s Xp b i if i iMax 1 s next NULL elses next head head s returnhead 17 18 链表的逻辑结构 对于单链表 无论是哪种操作 只要涉及到钩链 或重新钩链 如果没有明确给出直接后继 钩链 或重新钩链 的次序必须是 先右后左 对于单链表 不能象顺序表中那样直接按序号i访问结点 而只能从链表的头结点出发 沿链域next逐个结点往下搜索 直到搜索到第i个结点为止 因此 链表不是随机存取结构 按值查找是在链表中 查找是否有结点值等于给定值key的结点 若有 则返回首次找到的值为key的结点的存储位置 否则返回NULL 查找时从开始结点出发 沿链表逐个将结点的值和给定值key作比较 顺序存储表示的相加线性表的定义typedefstruct ElemTypea MAX SIZE intlength Sqlist 用顺序表示的相加非常简单 访问第5项可直接访问 L a 4 coef L a 4 expn 2 链式存储表示的相加当采用链式存储表示时 根据结点类型定义 凡是系数为0的项不在链表中出现 从而可以大大减少链表的长度 19 算法1描述Ploy add ploy ploy La ploy Lb 将以La Lb为头指针表示的一元多项式相加 ploy Lc pc pa pb ptr floatx Lc pc La pa La next pb Lb next while pa NULL 将pb所指的结点合并 pb指向下一个结点 20 else x pa coef pb coef if abs x next free ptr ptr pb pb pb next free ptr else 如果系数和不为0 修改其中一个结点的系数域 删除另一个结点 pc next pa pa coef x pc pa pa pa next ptr pb pb pb next free pb 21 endofwhile if pa NULL pc next pb elsepc next pa return Lc 22 23 算法2描述Ploy add ploy ploy La ploy Lb 将以La Lb为头指针表示的一元多项式相加 生成一个新的结果多项式 ploy Lc pc pa pb p floatx Lc pc ploy malloc sizeof ploy pa La next pb Lb next while pa NULL 24 生成一个新的结果结点并赋值 pc next p pc p pa pa next 生成的结点插入到结果链表的最后 pa指向下一个结点 if pa expn pb expn p ploy malloc sizeof ploy p coef pb coef p expn pb expn p next NULL 生成一个新的结果结点并赋值 pc next p pc p pb pb next 生成的结点插入到结果链表的最后 pb指向下一个结点 25 if pa expn pb expn x pa coef pb coef if abs x next pb pb next else 若系数和不为0 生成的结点插入到结果链表的最后 pa pb分别直接后继结点 p ploy malloc sizeof ploy p coef x p expn pb expn p next NULL 生成一个新的结果结点并赋值 pc next p pc p pa pa next pb pb next 26 endofwhile if pb NULL while pb NULL p ploy malloc sizeof ploy p coef pb coef p expn pb expn p next NULL 生成一个新的结果结点并赋值 pc next p pc p pb pb next 27 if pa NULL while pa NULL p ploy malloc sizeof ploy p coef pb coef p expn pa expn p next NULL 生成一个新的结果结点并赋值 pc next p pc p pa pa next return Lc 28 29 编程思想 准备工作 c语言基础 安装VC6 0 会建立工程文件 具体程序 包括定义变量 设计算法流程 用好软件三大武器 顺序 循环 判断关键技术 创建链表查资料 30 2 2 2顺序表的基本操作 顺序存储结构中 很容易实现线性表的一些操作 初始化 赋值 查找 修改 插入 删除 求长度等 以下将对几种主要的操作进行讨论 1顺序线性表初始化StatusInit SqList SqList L L elem array ElemType malloc MAX SIZE sizeof ElemType if L elem array returnERROR else L length 0 returnOK 31 2顺序线性表的插入在线性表L a1 ai 1 ai ai 1 an 中的第i 1 i n 个位置上插入一个新结点e 使其成为线性表 L a1 ai 1 e ai ai 1 an 实现步骤 1 将线性表L中的第i个至第n个结点后移一个位置 2 将结点e插入到结点ai 1之后 3 线性表长度加1 32 准备工作 1 定义全局变量 nodelink cpp Definestheentrypointfortheconsoleapplication 标准库函数 头文件 include h include include h defineNA4 defineNB3structnode intAi 多项式系数intXp 多项式幂指数structnode next typedefstructnodeNODE 33 2 多项式的单项定义 幂指数和系数 获得幂指数为Xp的节点的系数AiintgetAi NODE head intXp NODE p boolbFound intiAi iAi 0 bFound false p head while false 循环 if p next NULL 判断bFound true if p Xp Xp 判断 bFound true iAi p Ai elsep p next returniAi 34 3 获取多项式的最大幂指数 intgetMaxXp NODE head 获得链表最大的幂指数 NODE p intiMax iMax 0 if head 判断 p head iMax p Xp while p next NULL 循环 p p next if iMaxXp iMax p Xp returniMax 35 4 反向建立链表 反向建立链表NODE int a int b intiMax NODE head s inti 教材原来有一个malloc 是错误的 head NODE malloc sizeof NODE for 循环 s NODE malloc sizeof NODE s Ai a i s Xp b i if i iMax 1 s next NULL elses next head head s returnhead 36 5 删除链表的最后一个节点 删除链表的最后一个节点voiddeleteLastNode NODE head NODE p s s NULL p NULL if head NULL 判断 p head while p next NULL 循环 s p p p next free p if NULL s next NULL elsehead NULL 37 6 显示链表的系数和幂指数 显示链表的系数和幂指数voiddisplayNode NODE head NODE p inti i 0 if head NULL 判断 p head while p next NULL 循环 printf Ai d dXp d n i p Ai p Xp p p next i i 1 displaylastonenodeprintf Ai d dXp d n i p Ai p Xp 38 主函数 1 顺序 创建函数 intmain intargc char argv intA Ai NA intA Xp NA intB Ai NB intB Xp NB intC Ai NB NA 合并后的多项式最多有NA NB项intC Xp NB NA intc Max 记录合并后的多项式的有效项的最大数目inti intiMaxXp inti ai inti bi NODE A Link NODE B Link NODE C Link 39 初始化变量iMaxXp 0 A Link NULL B Link NULL C Link NULL A Ai 0 7 A Ai 1 3 A Ai 2 9 A Ai 3 3 A Xp 0 0 A Xp 1 1 A Xp 2 8 A Xp 3 16 B Ai 0 5 B Ai 1 9 B Ai 2 12 B Xp 0 1 B Xp 1 8 B Xp 2 12 建立链表A并显示A Link A Ai A Xp NA printf displayLinkAinformation n displayNode A Link printf n printf n 建立链表B并显示B Link B Ai B Xp NB printf displayLinkBinformation n displayNode B Link 40 2 开始计算两个多项式的和 开始计算两个多项式的和 初始化C Ai和C Xpfor i 0 i NA NB i C Ai i 0 C Xp i 0 找出两个多项式最大的幂指数printf n printf n iMaxXp getMaxXp A Link i getMaxXp B Link 41 接上个程序段 if iMaxXp i iMaxXp i printf n printf n printf MaxXp d n iMaxXp c Max 0 for i 0 i iMaxXp i 循环 i ai getAi A Link i i bi getAi B Link i if i ai i bi 0 C Ai c Max i ai i bi C Xp c Max i c Max c Max 1 i ai 0 i bi 0 42 3 显示多项式求和的结果 建立链表C并显示C Link C Ai C Xp c Max printf n printf n printf displayLinkCinformation n displayNode C Link 退出前清理好已经分配的内存 不然程序运行几次后 电脑内存被占满 有可能直接死机 i 0 while A Link NULL 43 接上个程序段 while C Link NULL 44 程序运行结果 45 作业 1 画出上述程序算法的流程图 2 补充完整程序代码 3 编译运行出正确结果 4 请改动程序 使得最后输出结果形式有所变化 5 另写出创新的算法 加分 6 编写和运行程序过程 有错误需记录下来 改好了的方法和找到原因需记录 越多越有价值的 加分 7 另外 下学期有两门选修课 面向对象和数据库 咱们选的同学可以考虑做一个计软程序调试故障诊断系统 46 如这样的错误提示 Configuration yanghui Win32Debug Compiling yanghui cppLinking yanghui obj errorLNK2005 mainalreadydefinediny2 objDebug yanghui exe fatalerrorLNK1169 oneormoremultiplydefinedsymbolsfound执行link exe时出错 yanghui exe 1error s 0warning s 47 程序运行出现的错误集 48 数据结构 DataStructure 是指相互之间具有 存在 一定联系 关系 的数据元素的集合 元素之间的相互联系 关系 称为逻辑结构 数据元素之间的逻辑结构有四种基本类型 如下所示 集合 结构中的数据元素除了 同属于一个集合 外 没有其它关系 线性结构 结构中的数据元素之间存在一对一的关系 树型结构 结构中的数据元素之间存在一对多的关系 图状结构或网状结构 结构中的数据元素之间存在多对多的关系 49 数据结构的形式定义是一个二元组 Data Structure D S 其中 D是数据元素的有限集 S是D上关系的有限集 例2 设数据逻辑结构B K R K k1 k2 k9 R 画出这逻辑结构的图示 并确定那些是起点 那些是终点 四类基本结构图 50 数据结构的存储方式 数据元素之间的关系可以是元素之间代表某种含义的自然关系 也可以是为处理问题方便而人为定义的关系 这种自然或人为定义的 关系 称为数据元素之间的逻辑关系 相应的结构称为逻辑结构 数据结构在计算机内存中的存储包括数据元素的存储和元素之间的关系的表示 元素之间的关系在计算机中有两种不同的表示方法 顺序表示和非顺序表示 由此得出两种不同的存储结构 顺序存储结构和链式存储结构 顺序存储结构 用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构 关系 51 链式存储结构 在每一个数据元素中增加一个存放另一个元素地址的指针 pointer 用该指针来表示数据元素之间的逻辑结构 关系 例 设有数据集合A 3 0 2 3 5 0 8 5 11 0 两种不同的存储结构 顺序结构 数据元素存放的地址是连续的 链式结构 数据元素存放的地址是否连续没有要求 数据的逻辑结构和物理结构是密不可分的两个方面 一个算法的设计取决于所选定的逻辑结构 而算法的实现依赖于所采用的存储结构 在C语言中 用一维数组表示顺序存储结构 用结构体类型表示链式存储结构 52 数据结构的三个组成部分 逻辑结构 数据元素之间逻辑关系的描述D S D S 存储结构 数据元素在计算机中的存储及其逻辑关系的表现称为数据的存储结构或物理结构 数据操作 对数据要进行的运算 本课程中将要讨论的三种逻辑结构及其采用的存储结构 53 54 数据结构的主要运算包括 建立 Create 一个数据结构 消除 Destroy 一个数据结构 从一个数据结构中删除 Delete 一个数据元素 把一个数据元素插入 Insert 到一个数据结构中 对一个数据结构进行访问 Access 对一个数据结构 中的数据元素 进行修改 Modify 对一个数据结构进行排序 Sort 对一个数据结构进行查找 Search 1 1 6数据结构的运算 55 5 数据结构结构是数据元素之间的关系 数据结构是带结构的数据元素的集合 一 基本概念 例如一个12位的十进制数可以用三个4位十进制数表示 3214 6587 9345 a1 3214 a2 6587 a3 9345 在a1 a2 a3之间存在 次序 关系 3214 6587 9345 6587 3214 9345a1a2a3a2a1a3 又例二行三列的二维数组 a1 a2 a3 a4 a5 a6 行的次序关系 row 列的次序关系 Col 1 2数据结构的基本概念 56 线性结构是最常用 最简单的一种数据结构 而线性表是一种典型的线性结构 其基本特点是线性表中的数据元素是有序且是有限的 在这种结构中 存在一个唯一的被称为 第一个 的数据元素 存在一个唯一的被称为 最后一个 的数据元素 除第一个元素外 每个元素均有唯一一个直接前驱 除最后一个元素外 每个元素均有唯一一个直接后继 57 线性表 LinearList 是由n n 0 个数据元素 结点 a1 a2 an组成的有限序列 该序列中的所有结点具有相同的数据类型 其中数据元素的个数n称为线性表的长度 当n 0时 称为空表 当n 0时 将非空的线性表记作 a1 a2 an a1称为线性表的第一个 首 结点 an称为线性表的最后一个 尾 结点 58 a1 a2 ai 1都是ai 2 i n 的前驱 其中ai 1是ai的直接前驱 ai 1 ai 2 an都是ai 1 i n 1 的后继 其中ai 1是ai的直接后继 2 1 2线性表的逻辑结构 线性表中的数据元素ai所代表的具体含义随具体应用的不同而不同 在线性表的定义中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 坐标系统与转换计算试题及答案
- 2025年工业互联网平台数据加密算法效能提升与行业应用研究报告
- 2025年多式联运信息平台在跨境电商物流中的智能化解决方案报告
- 2025年天然气水合物(可燃冰)开采技术国际合作案例分析报告
- 考点攻克自考专业(市场营销学)试题及答案(真题汇编)
- 2025年工业互联网平台IPv6技术升级对工业设备智能化升级的推动作用研究分析报告
- 2025至2030年中国金针菇市场全面调研及行业投资潜力预测报告
- 推拿治疗学考试题附答案详解【巩固】
- 解析卷辽宁省北票市中考数学真题分类(勾股定理)汇编定向训练试题
- 2025店面租赁合同模板:酒店式公寓租赁专版
- JG/T 155-2014电动平开、推拉围墙大门
- T/YNIA 003.1-2021面膜护肤用非织造布第1部分:水刺法
- T/CASTEM 1013-2023高校人才代表性科技成果评价指南
- GB/T 18867-2025电子气体六氟化硫
- 军队文职管理学备考指南
- 病历质量定期检查评估与反馈制度
- 胖东来考试试题及答案
- 乐天地产(成都)有限公司乐天广场四期项目环评报告
- 人教版初二地理上册课件:从世界看中国第一节 疆域
- 初中生叛逆期教育主题班会
- 小学国家领土与主权教育
评论
0/150
提交评论