已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构 主讲 鲁法明fm lu 课程相关 计算机学科核心课程多编程 手写 多调试 上机 学时 上课 课程设计上机 332实验室 周五4 00 6 00 作业 手写 上机调试 分析 多思考多比较 本章要点 补充 C基础回顾 C程序概述基本语法 数据类型运算符控制结构函数 C指针与链表 include define typedefintScoreType 返回值类型函数名1 参数表 函数功能及返回值说明 变量定义与函数声明执行语句组 voidmain 函数次序不定 子函数声明与变量定义执行语句组 返回值类型函数名n 参数表 变量定义与函数声明执行语句组 1 C程序概述 函数 分为main函数 库函数 自定义函数 函数包括函数头和函数体两部分 函数头分返回值类型 函数名和参数列表 函数体包括声明部分和执行部分 声明部分包括变量定义和函数的声明 执行部分包括各类语句 输入输出语句 赋值语句 结构控制语句和函数调用语句 语句以分号结束问 程序入口 出口 补充 换行缩进对齐注释命名 含义 规范 变量 函数 符号常量 2 基本语法 数据类型 2 基本语法 运算符 2 基本语法 控制结构 2 基本语法 函数 参数传递 值传递 2 基本语法 函数 参数传递 引用传递 3 指针与链表 谭浩强 C程序设计 第3版 第十章指针 基本概念指针的定义及用法指针在数组访问中的应用指针与动态存储分配利用指针创建和操作链表 内存区的每一个字节有一个编号 该编号称为内存单元的地址或指针 若在程序中定义一个变量 在运行时会为其分配若干内存单元 其中第一个存储单元的编号称为该变量的地址或指针 inti shortj k scanf d d short p shortj k p 地址指针变量的地址指针变量 某些变量专门用以存放别的变量的地址 称这类变量为指针变量 该类变量的类型称为指针类型 i 01234567 i j k i 012345678 j p k 00000000000000000000000000000011 00000000000000000000000000000001 p 定义格式 基类型 指针变量名如 shortj short p p 1 通过指针对变量进行读写时如何知道需要读写的字节数 在定义指针变量时必须指定基类型 且变量的类型和指针的基类型要一致 2 指针类型与整数类型不同 只能将变量的地址赋给一个指针变量 而不能将一个常数赋给一个指针变量 零除外 指针值为0意味着没指向任何变量 指针变量的加1或减1实际移动sizeof 基类型 3 在定义变量时使用 表示所定义变量是指针类型 在普通语句中使用 表示 取内容或取指针变量所指向存储单元的值 如inti 5 int p p 指针变量的定义与用法 i 234567 j p 00000000000000000000000000000010 p C语言中 一维数组对应一个连续存储空间 数组名是值为首地址的指针常量 其基类型就是数组元素类型 指向首元素 可通过数组名用下标法访问数组元素 也可将该指针常量值赋值给一个同类型的指针变量 进而借助该指针变量用指针法访问数组元素 指针法访问数组 如 inta 10 int p p a 也可用int p 说明 指针加1或减1则指针指向的单元移动并非1 而是根据基类型所占字节数移动 指针法速度比下标法快 回顾 C程序结构与代码及命名规范自定义类型typedefstructStudent Student typedefintStatus typedefintElemType 循环结构i 69 while i 0 动态存储分配函数 includevoid malloc unsignedsize 开辟成功返回空间首地址 基类型暂定为void 用时进行强制类型转换 失败返0 exitvoidfree void p 销毁从p所指地址开始的一次性开辟的存储空间 注意释放的含义及p的值不变基类型为int的指针类型变量可以当作基类型int的动态数组名用typedefint DynamicArrayOfInt DynamicArrayOfInta typedefintStaticArrayOfInt 10 StaticArrayOfInta 指针与动态存储分配 静态数组 defineN10voidmain inta 10 a为指针常量for inti 0 i N i scanf d 动态数组 voidmain int a p 与左侧a的异同 a与p异同intn scanf d 学生表的顺序存储及创建 输出 增删改查操作 include include malloc和realoc及free include 异常退出函数exit defineOK1 defineERROR0 defineOVERFLOW 1typedefstructStudent intstuID charname 20 Student typedefStudent StudentList 学生表类型 实为学生数组类型 动态typedefintStatus StatusInputStu Student s StatusStuListCreate StudentList L intn 创建含n个学生的表 成功返回OK 并用L带回首址 创建失败返回ERROR 思路 开辟数组 循环n次 每次输入一个学生信息 注意边界情况的处理 n非法 内存溢出 StatusOutputStu Students voidStuListPrint StudentListL intn 学生表含n个学生 输出表信息 思路 循环n次 每次输出一个学生信息 StatusStuListDelete StudentListL int 注意 数组首地址和表长应该封装到一起 如何改进 作业1 成绩表顺序存储及相关操作 仿课件例程 自定义类型Score为 结构体类型 学生名 课程名 分数 自定义类型ElemType为 Score自定义类型SqList为包含如下两个成员的结构体类型 基类型为ElemType的动态数组elem intlength 实现如下针对SqList的函数 功能设计见下两页 InputScoOutputScoInputElemOutputElemListCreate SqListPrint SqListDelete Sq编写主函数对上述函数进行测试a完整的可运行的程序 注意编码规范和注释b体会与学生表代码结构的异同不管具体的ElemType是什么 只要元素之间形成一种表的结构 就可以用SqList来定义 用SqList的相关操作来实现 使代码独立性更强 可重用性更强 include include include defineOK1 defineERROR0 defineOVERFLOW 1typedefstructScore charstuName 20 charcourseName 20 floatscore Score typedefScoreElemType typedefstruct ElemType elem intlength SqList 学生表类型typedefintStatus StatusInputSco Score StatusListCreate Sq SqList L intn 创建含n个元素的顺序表 成功返回OK 并用L带回该表 创建失败返回ERROR 思路 开辟数组 循环n次 每次输入一个元素信息 注意边界情况的处理 n非法 内存溢出voidListPrint L SqListL 输出表信息 思路 循环n次 每次输出一个元素信息 调用OutputElem和OutputSco哪个好 StatusSqListDelete SqListL inti ElemType s 删除第i个位置的的元素并带回 成功返回OK 失败返回ERROR 思路 备份原表中第i个元素 第i 1至n个记录依次前移 回顾 静态数组与动态数组inta 10 int b typedefintStaticArrayOfInt 10 StaticArrayOfInta typedefint DynamicArrayOfInt DynamicArrayOfIntb 动态数组名与指针变量名shorti p a p 表的存储和基本操作实现步骤 分析存储方案 类型定义 操作定义 实现抽象的好处 孙承爱 程序设计基础 基于C语言 链表 引言 数组元素依次存储在一片连续的内存单元中 好处是可根据首地址 数组名 和下标随机访问数组元素 简单易读 坏处是有两方面 其一 个数不确定时需定义一个最大长度 其二 向数组增加或删除一个数据时 通常需要移动大量元素 链表 一种动态地进行存储分配的数据结构 不需要事先确定最大长度 在插入或者删除一个元素时也不会引起大量数据的移动 但坏处是只能顺序访问 操作相对麻烦要求 掌握链表的基本结构 结构定义与链表的创建与输出 head 链表结构 结构 头指针 首元 结点 尾 结点 中间结点 头指针head指向链表第一个结点 每个结点包括两部分 一部分是用户需要用的实际数据 称为数据域 另一部分是下一个结点的地址 称为指针域 首结点与中间结点的指针域指向后继结点 尾结点的指针域存放空地址 常写为NULL 值为0的符号常量 需先定义 说明 1 链表中各节点在内存中存储单元通常不连续 且大小无序 2 头指针至关重要 可标识或者代表整个单链表 3 为操作方便 通常在 首元结点 前附设一个 头结点 该结点数据域的值不用 指针指向首元结点 头指针指向头结点 4 声明链表就是要声明一个基类型为结点类型的头指针 1249 元素类型定义typedefcharElemType 处理学生链表只改此句即可 链表定义 typedefstructLNode ElemTypedata 数据域structLNode next 指针域 LNode LinkList LNodenode1 node2 LinkListLa Lb structLNode 单链表结点结构定义chardata 数据域structLNode next 指针域 StrcutLNodenode1 node2 定义两结点 静态开辟结点空间structLNode L 定义一个指针 可作链表的头指针用 typedefstructLNodeLNode typedefstructLNode LinkList LNodenode1 node2 LinkListLa Lb 链表定义 node1 La 链表的创建 创建带头结点的含指定个数元素的链表 StatusListCreate L LinkList 或用r r next 新结点指针值不赋空会如何 算法思路 开辟头结点 设一指针指向表尾节点 之后循环n次 每次开辟一个新结点 输入数据域值后拼接到表尾节点的后面 表尾节点后移 链表的输出 voidListPrint L LinkListL 输出带头结点的链表L各数据元素的值LNode curPtr if L L next printf 空表 curPtr L next while curPtr NULL OutputElem curPtr data curPtr curPtr next 思考 curPtr 算法思路 设指针curPtr指向首元节点 只要curPtr取值不空 指向的结点存在 输出curPtr所指结点数据域的值 curPtr后移 链表结点的删除 voidListDelete L LinkListL inti ElemType e 功能及返回值说明 注意带头结点 思路 首先定位到第i 1个结点 若发现不存在第i个节点则返回错误 否则 用e带回第i个节点数据值 从链表中删除第i个节点 作业2 仿照课件实现成绩链表相关操作 自定义类型Book为 结构体类型 书号 书名 自定义类型ElemType为 Book 好处 自定义类型LinkList 数据域为ElemType类型的单链表实现如下函数ListCreate LListPrint LListDelete L编写主函数对上述函数进行测试a完整的可运行的程序 注意编码规范和注释b体会与作业1程序的异同普通的数据表 序列 即可用数组来存储 也可以用链表来存储 具体依赖于需要进行的操作种类 代码调试 常见错误与断点调试 intgetMax x y intr if x y r x elser y return r voidmain scanf d d a b 读入两整数 分隔符 c getMax a b printf max c n c include inta b c 是否需要进行函数声明intmax intx inty d 1 变量未定义或函数使用前未声明 缺少头文件2 丢分号和4 工作区问题 cpp与c intint include include include defineOK1 defineERROR0 defineOVERFLOW 1typedefstructStudent charstuName 20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际法试题集答案
- 桥牌(基础)题库及答案
- 公证员职业资格证公证程序试卷及解析
- 《AIGC与短视频创意运营(慕课版)》-教学大纲、课程标准
- T-NTRPTA 0149.1-2025 鲜食豆类特色蔬菜第1部分:有害生物绿色防控技术规程
- 肺炎患者护理专业考核试题及答案解析(一)
- 2026年学校图书馆通风系统改造合同协议
- 工厂劳动调解协议书
- 工程物资归属协议书
- 工资转让银行协议书
- 新型农业经营主体培育与创新课件
- 免疫调节剂(口腔科临床用药课件)
- 出国留学-话题education英语演讲PPT
- 【10套试卷】厦门市外国语学校小升初模拟考试数学试题含答案
- 最后一战-励志高考冲刺30天主题班会 高考倒计时主题班会课件
- 杭州师范大学堪培拉教育领导与管理硕士项目
- GB/T 28686-2012燃气轮机热力性能试验
- GB 29415-2013耐火电缆槽盒
- GA/T 1532-2018赤足足迹检验技术规范
- GA/T 1444-2017法庭科学笔迹检验样本提取规范
- 诺和龙诺和龙在糖尿病心脑血管方面的作用专家讲座
评论
0/150
提交评论