数据结构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 线性表以链接方式存储 并且按关键码值的检索频率排好序

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值