一,概述
第十二章,介绍生成某个范围内随机数,并按顺序输出。
本章主要介绍,存储按序输出的容器或者说存放集合的方法。并实现按序插入,按序输出。
1)set容器
1>set容器小例子:
输出:1 2 3 //自动屏蔽重复元素
the total elements is: 3
2>set容器实现插入元素,并有序输出
【注意】不管你按什么顺序输入,你得到的输出都是有序的。
2)数组(类似于插入排序)哨兵放最后
思路:初始化时候,取一个很大元素作为哨兵,哨兵永远置于元素最后。
插入时候遇到重复元素,返回
遇到比自己大的第一个元素,将该元素以及以后的元素后移一位,最后将该元素插入该位置
3)链表(采用递归)依然采用哨兵
思路:node *rinsert(node *p, int t)是关键函数
注意调用的时候,p->next=rinsert(p->next,t); 如果小于则一直等于next
如果p-val > t 则 p =new node(t,p);说明第一个大于t的p被作为新节点(val=t)的next //细细体会,最好画图理解
第二种实现方法(链表非递归):主要是找到第一个大于t的节点,然后插入到其前面。
4)二分搜索树(类似链表)
第二种实现方法 (习题7答案,采用哨兵)
5)专门用于整数处理的数据结构
解释:其中i>>SHIFT 相当于 i/32得到对应数组下标【二进制右移5位相当于十进制除以32】
i&MASK相当于 i mod 32,因为每一个数32位。最大只能左移32位。
1<<(i&MASK)相当于获得2的(i&MASK)次幂,就是1左移(i&MASK)位
i=[0,31] 标记在数组第一位 i=[32,63] 标记在数组第二位
下面看一个例子:
【拓展】如何输出一个数的二进制表示
利用库函数
用法:char *itoa(int value, char
*string, int radix);
int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等
功能:把一整数转换为字符串。
【另一个】atoi (array to integer) :把字符串转化为整数
int atoi(const char
*nptr);
用法:char *str = "12345.67";
n = atoi(str); //输出12345
6)箱(类似散列表)
思路:每一个箱表示一定范围的整数,并用链表链接起来。链表插入采用有序插入,见:3)链表
二,习题
1)12章的代码
感觉最关键是要想到,i从n-m开始,如果在i之前找到无重复的数,则insert。否则insert( i )
其实用IntSetSTL 类实现差不多。
2)更改的更健壮,添加错误检查(插入数据是否在范围内,集合是否插满),析构函数(不解释)
3)find( t ) //对于有序集合来说,采用二分查找很合适
4)链表的迭代版本(见上文)核心插入代码如下
5)为了避免每次都创造结点(新建一个结点,调用一次存储分配)。
可以一次申请一个结点数组 freenode =new node[maxelements];
用的时候,node p =freenode++; //保证freenode 总是指向当前可用空间
7)感觉答案有些疑惑。哨兵为当前值,放到每个null结点。然后用**p 查找插入位置。这里是不是没有考虑重复插入的问题??
9)将除法操作变为右移操作,乘法操作变为左移操作。注意 >> << 移位操作符都是二进制移位
除以 4 相当于 >>2 除以8 相当于 >>3 那么除以 6呢??
分享到:
相关推荐
《编程珠玑》是一本经典的计算机科学与编程书籍,作者是Jon Bentley。这本书以其独特的视角深入探讨了程序设计的艺术和技巧,旨在提升程序员的问题解决能力,优化算法,并提高代码效率。书中涵盖了一系列实用的编程...
第13章 绝妙的取样 123 13.1 取样算法一瞥 123 13.2 Floyd算法 124 13.3 随机排列 125 13.4 原理 127 13.5 习题 127 13.6 深入阅读 128 第14章 编写数值计算程序 129 14.1 问题 129 14.2 牛顿迭代 130 14.3 良好的...
《编程珠玑 第2版(修订版)》是一本深受程序员喜爱的经典著作,它不仅提供了丰富的编程实践经验,还深入探讨了程序设计的艺术与智慧。这本书的修订版更是在原版基础上进行了更新和完善,旨在帮助程序员提升编程技能,...
《编程珠玑》是计算机科学领域的一本经典之作,由Jon Bentley 编著,它以其深入浅出的方式探讨了程序设计的问题和解决方案,尤其在数据结构、算法优化以及问题解决策略方面有着独到的见解。这本书的源代码是作者为了...
根据提供的标题“编程珠玑(第二版)答案”和描述“编程珠玑(第二版)答案”,我们可以推测出这是关于《编程珠玑》这本书的相关解答资料。《编程珠玑》是一本经典的计算机科学书籍,作者为Jon Bentley。本书旨在...
《编程珠玑(续)》是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容组成一个有机的整体,...
《编程珠玑》和其续篇是两部深受程序员喜爱的经典著作,主要涵盖了程序设计、算法分析和数据结构等核心编程领域。这两本书以其深入浅出的讲解方式和丰富的实例,帮助读者提升编程技巧和解决问题的能力。 在《编程...
在编程领域,"编程珠玑"是一本深受程序员喜爱的经典著作,它深入浅出地探讨了计算机科学中的算法和设计技巧。"第二章questionC"提及的问题是关于"求变位词",这是一个常见的字符串处理问题,涉及到字符统计、排序...
编程珠玑续、编程珠玑续本、编程珠玑续本、编程珠玑续本
《编程珠玑》是计算机科学领域的一本经典之作,由Jon Bentley著,主要探讨了程序设计问题的解决方法和算法优化。这本书的核心理念是通过实际的编程问题来传授如何高效地设计和分析算法,旨在提升程序员的问题解决...
算法经典书籍编程珠玑第2版,这本书除了讲算法,更是讲述解决问题的思想。
同时,《编程珠玑》强调了搜索算法的重要性,如二分查找、广度优先搜索和深度优先搜索等,这些是处理复杂数据时不可或缺的工具。它们能够帮助程序员在庞大的数据集里高效地找到所需信息,极大提升程序的性能和用户...
2. **算法设计与分析**:《编程珠玑》强调了算法的重要性,不仅介绍了常见的排序和搜索算法,还讨论了如何在实际应用中选择和改进算法,以提高程序的运行效率。 3. **数据结构的应用**:书中详细讲解了各种数据结构...
《编程珠玑》是由Jon Bentley所著的一本计算机程序设计的经典著作,它在计算机科学领域内具有非常高的声誉。这本书深入探讨了计算机程序设计中的诸多方面,尤其强调了程序设计过程中洞察力和创造力的重要性。 Jon ...
编程珠玑II(编程珠玑·续) 扫描版6.56M pdf格式
编程珠玑,编程珠玑续以及源码,本书针对程序设计人员探讨了一系列的实际问题,这些问题是对现实中常见问题的归纳总结。作者虽然没有给出解决这些问题的具体代码,但始终非常富有洞察力和创造力地围绕着这些折磨...
编程珠玑+续
第13章 搜索 127 13.1 接口 127 13.2 线性结构 129 13.3 二分搜索树 132 13.4 用于整数的结构 134 13.5 原理 135 13.6 习题 136 13.7 深入阅读 137 13.8 一个实际搜索问题(边栏) 137 第14章 堆 141 14.1...