数据结构c语言版谭浩强pdf,谭浩强C语言_数据结构.pdf

IT Education 数据域 int next 后继域 Node t PNode t 提供的操作有 初始化 插入 删除等 IT Education 数据域 Node t next 后继域 Node t PNode t 提供的操作有 初始化 插入 删除等 数据1 后继 数据2 后继 数据3 后继 数据n 1 后继 数据n end IT Education struct Node Next typedef struct Node Node t IT Education a next a next next dispose p IT Education s data x s next a next a next s heada0a1 an 1 xs a heada0a1 an 1 x b IT Education struct DuLNode prior struct DuLNode next DuLNode DuLinkList priorelement next L空双向循环链表 非空双向循环链表 LAB bca p p prior next p p next proir IT Education 出队列 x sq front rear rear front rear 1 2 3 4 5 0 J1 J2 J3出队 J1 J2 J3 front front front IT Education 0 M 1 1 front rear 实现 利用 模 运算 入队 rear rear 1 M sq rear x 出队 front front 1 M x sq front 队满 队空判定条件 IT Education 队列满 Q base Q rear e 新元素存放到队尾 Q rear Q rear 1 MAXQSIZE 修改队为指示器 return OK 0 1 0 1 C 0 1 7 2 7 2 7 2C 6 3 6 3 6 3 5 4 5 4 5 4 A B A B D D E F E G 图3 13 循环队列上的插入 Q rearQ rear Q rear Q front Q front Q front 满队列 空队列 IT Education 队列空 e Q base Q front 删除当前队头元素 Q front Q front 1 MAXQSIZE 修改队头指示器 returnOK G A B C C D G D F E F E 图3 14 循环队列的删除过程 Q rear Q rear Q rear Q front 1 满 2 删除A B后的队列 3 删除最后一个元素空队列 Q front Q front IT Education struct Qnode next Qnode QueuePtr 头结点 front 队头队尾 rear 设队首 队尾指针front和rear front指向头结点 rear指向队尾 typedef struct QueuePtr front QueuePtr rear LinkQueue IT Education int x for i 1 i n i for j 0 ja j 1 进行交换 x a j a j a j 1 a j 1 x IT Education int x for i 1 i n i 进行n 1次选择和交换 k i 1 for j i j n j if a j a k k j x a i 1 a i 1 a k a k x IT Education 定义并初始化区间下界和上界变量 int mid 定义保存中点元素下标的变量 while low high mid low high 2 if x a mid return mid else if xr 2 key 则交换 然 后比较第二个记录与第三个记录 依次类推 直 至第n 1个记录和第n个记录比较为止 第一趟 冒泡排序 结果关键字最大的记录被安置在最后 一个记录上 对前n 1个记录进行第二趟冒泡排序 结果使关 键字次大的记录被安置在第n 1个记录位置 重复上述过程 直到 在一趟排序过程中没有进 行过交换记录的操作 为止 IT Education TrainingDate 20 December 2012 例 49 38 65 97 76 13 27 30 初始关键字 38 49 65 76 13 27 30 97 第一趟 38 49 65 13 27 30 76 第二趟 38 49 13 27 30 65 第三趟 38 13 27 30 49 第四趟 13 27 30 38 第五趟 13 27 30 第六趟 38 49 76 9713 9727 9730 97 13 76 76 7627 30 13 6527 6530 65 13 13 49 4930 4927 3827 3830 38 IT Education TrainingDate 20 December 2012 算法描述 算法评价 时间复杂度 最好情况 正序 比较次数 n 1 移动次数 0 最坏情况 逆序 比较次数 2 1 2 1 1 nnin n i 移动次数 2 3 3 2 1 nnin n i T n O n 空间复杂度 S n O 1 Ch8 4 txt Ch8 4 c IT Education TrainingDate 20 December 2012 快速排序 基本思想 通过一趟排序 将待排序记录分割成独 立的两部分 其中一部分记录的关键字均比另一部 分记录的关键字小 则可分别对这两部分记录进行 排序 以达到整个序列有序 排序过程 对r s t 中记录进行一趟快速排序 附设两个指针i和j 设枢轴记录rp r s x rp key 初始时令i s j t 首先从j所指位置向前搜索第一个关键字小于x的 记录 并和rp交换 再从i所指位置起向后搜索 找到第一个关键字大 于x的记录 和rp交换 重复上述两步 直至i j为止 再分别对两个子序列进行快速排序 直到每个子 序列只含有一个记录为止 IT Education TrainingDate 20 December 2012 例 初始关键字 4938 65 97 76 13 27 50 ij x ji 完成一趟排序 27 38 13 49 76 97 65 50 分别进行快速排序 13 27 38 49 50 65 76 97 快速排序结束 1327 38 49506576 97 4927 i ji j ij 4965 j i 1349 i j 4997 ij IT Education TrainingDate 20 December 2012 选择排序 简单选择排序 排序过程 首先通过n 1次关键字比较 从n个记录中找出关 键字最小的记录 将它与第一个记录交换 再通过n 2次比较 从剩余的n 1个记录中找出关 键字次小的记录 将它与第二个记录交换 重复上述操作 共进行n 1趟排序后 排序结束 IT Education TrainingDate 20 December 2012 例初始 49 38 65 97 76 13 27 k jjjjjj kk i 1 13 49 一趟 13 38 65 97 76 49 27 i 2 kk jjjjj 2738 二趟 1327 65 97 76 49 38 三趟 132738 97 76 49 65 四趟 13273849 76 97 65 五趟 1327384965 97 76 六趟 132738496576 97 排序结束 13273849657697 Ch8 6 txt IT Education TrainingDate 20 December 2012 堆排序 堆的定义 n个元素的序列 k1 k2 kn 当且仅当满足下列 关系时 称之为堆 或 i 1 2 n 2 ki k2i ki k2i 1 ki k2i ki k2i 1 例 96 83 27 38 11 9 例 13 38 27 50 76 65 49 97 96 27 91138 83 13 2738 49657650 97 可将堆序列看成完全二叉树 则堆顶 元素 完全二叉树的根 必为序列中 n个元素的最小值或最大值 IT Education TrainingDate 20 December 2012 堆排序 将无序序列建成一个堆 得到关键字最小 或最大 的记录 输出堆顶的最小 大 值后 使剩余的n 1个元素重又建成一个堆 则可得到n个 元素的次小值 重复执行 得到一个有序序列 这 个过程叫 堆排序需解决的两个问题 如何由一个无序序列建成一个堆 如何在输出堆顶元素之后 调整剩余元素 使之 成为一个新的堆 第二个问题解决方法 筛选 方法 输出堆顶元素之后 以堆中最后一个元素 替代之 然后将根结点值与左 右子树的根结点 值进行比较 并与其中小者进行交换 重复上述 操作 直至叶子结点 将得到新的堆 称这个从 堆顶至叶子的调整过程为 筛选 IT Education TrainingDate 20 December 2012 例 13 2738 49657650 97 97 2738 49657650 13 输出 13 27 4938 97657650 13 输出 13 97 4938 27657650 13 输出 13 27 38 4950 27657697 13 输出 13 27 65 4950 27387697 13 输出 13 27 38 IT Education TrainingDate 20 December 2012 49 6550 27387697 13 输出 13 27 38 76 6550 27384997 13 输出 13 27 38 49 50 6576 27384997 13 输出 13 27 38 49 97 6576 27384950 13 输出 13 27 38 49 50 65 9776 27384950 13 输出 13 27 38 49 50 97 6576 27384950 13 输出 13 27 38 49 50 65 IT Education TrainingDate 20 December 2012 76 6597 27384950 13 输出 13 27 38 49 50 65 97 6576 27384950 13 输出 13 27 38 49 50 65 76 97 6576 27384950 13 输出 13 27 38 49 50 65 76 97 IT Education TrainingDate 20 December 2012 第二部分 问题与习 题 IT Education TrainingDate 20 December 2012 问题 Q1 为了描述并解决先进先出特征的问题 我们一般会采用考虑以下 哪种数据结构 A 队列B 栈C 树D 二叉树 Q2 为了描述并解决先进后出特征的问题 我们一般会采用考虑以下 哪种数据结构 A 队列B 栈C 树D 二叉树 Q3 对线性表进行二分法查找 其前提条件是 A 线性表以顺序方式存储 并且按关键码值排好序 B 线性表以顺序方式存储 并且按关键码值的检索频率排好序 C 线性表以链接方式存储 并且按关键码值排好序 D 线性表以链接方式存储 并且按关键码值的检索频率排好序

展开阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好用的东西很经典的一本C教程,TKS这算是谭浩强C语言设计比较新的本了!目录很详细,使用很方便目录 第1章 C语言程序设计的概念  1.1 程序与程序设计语言   1.1.1 计算机与程序   1.1.2 计算机程序设计语言   1.1.3 高级语言程序的开发过程  1.2 C语言及其标准   1.2.1 C语言的出现   1.2.2 C语言的标准  1.3 C语言程序概要   1.3.1 函数   1.3.2 语句   1.3.3 名字与声明   1.3.4 变量及其赋值   1.3.5 算术运算   1.3.6 赋值类运算符的副作用及限制  习题一 第2章 基本数据类型  2.1 基本数据类型的特征   2.1.1 数值的定点表示与浮点表示   2.1.2 整数的有符号类型与无符号类型   2.1.3 类型宽度与取值范围  2.2 数据常量   2.2.1 整型常量   2.2.2 字符类型及其常量   2.2.3 实型常量   2.2.4 符号常量  2.3 数据类型转换   2.3.1 几个概念   2.3.2 数据类型的隐式转换   2.3.3 数据类型的显式转换   2.4 数据的控制台输入与输出   2.4.1 格式化输出函数pIintf()   2.4.2 格式化输入函数scanf()   2.4.3 字符输入/输出函数getchar()与putchar()  习题二 第3章 C语言程序的流程控制  3.1 算法   3.1.1 算法的组成要素与基本性质   3.1.2 算法描述工具   3.1.3 自项向下、逐步细化的算法设计过程  3.2 判断   3.2.1 命题的“真”、“假”与C语言中的逻辑值   3.2.2 关系运算与关系表达式   3.2.3 逻辑运算与逻辑表达式  3.3 选择型程序设计   3.3.1 if...else结构的应用   3.3.2 if.elseif结构的应用   3.3.3 switch结构的应用   3.3.4 条件表达式  3.4 循环型程序设计   3.4.1 迭代与穷举算法   3.4.2 while结构   3.4.3 dowhile结构   3.4.4 for结构   3.4.5 循环结构的中途退出与重复周期的中途结束  习题三 第4章 模块化程序设计  4.1 函数   4.1.1 设计C语言程序就是设计函数   4.1.2 函数结构   4.1.3 函数定义与函数声明   4.1.4 虚实结合与传值调用   4.1.5 递归函数  4.2 变量的存储属性   4.2.1 变量的作用域与生存期   4.2.2 C语言中变量的存储类型   4.2.3 通过const声明将变量存储在只读区  4.3 模块的编译与链接   4.3.1 分别编译   4.3.2 用项目管理多文件程序的编译与链接过程   4.3.3 头文件  4.4 宏定义与宏替换   4.4.1 字符串宏定义及其基本格式   4.4.2 使用宏需注意的问题   4.4.3 撤销己定义的宏   4.4.4 带参数的宏定义  习题四 第5章 数组  5.1 一维数组   5.1.1 一维数组定义及数组元素引用   5.1.2 数组元素的引用方法   5.1.3 一维数组的初始化   5.1.4 一维数组元素的查找与排序   5.1.5 数组与函数  5.2 字符串   5.2.1 字符数组与字符串   5.2.2 字符串的输入/输出   5.2.3 字符串处理函数  5.3 二维数组与多维数组   5.3.1 二维数组及其定义   5.3.2 二维数组的初始化   5.3.3 向函数传送二维数组   5.3.4 多维数组  习题五 第6章 指针  6.1 指针基础   6.1.1 地址与指针   6.1.2 指针变量及其定义   6.1.3指针变量的引用   6.1.4 指针的移动与比较   6.1.5 指向指针变量的指针与多级指针   6.1.6 指向void类型的指针  6.2 指针与数组   6.2.1 数组元素的指针引用   6.2.2 多字符串的存储与处理   6.2.3 内存的动态分配与动态数组的建立  6.3 指针与函数   6.3.1 指针参数与函数的地址传送调用   6.3.2 带参数的主函数   6.3.3 返回指针值的函数   6.3.4 指向函数的指针  习题六 第7章 用户定制数据类型  7.1 结构体类型基础   7.1.1 结构体类型及其定制   7.1.2 定义结构体类型变量及对变量的初始化   7.1.3 结构体变量的操作   7.1.4 嵌套结构体类型   7.1.5 位段  7.2 结构体数组   7.2.1 结构体数组的定义与初始化   7.2.2 对结构体数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值