2012年12月20日

散列表的简单实现(大话数据结构)

摘要: #include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 */#define SUCCESS 1#define UNSUCCESS 0#define HASHSIZE 12 /* 定义散列表长为数组的 阅读全文

posted @ 2012-12-20 12:42 zhuyf87 阅读(903) 评论(0) 推荐(1) 编辑

c++异常处理

摘要: 通过异常处理,可以将问题的检测和问题的解决分离,这样程序的问题检测部分可以不必了解如何处理问题。由问题检测部分抛出一个异常对象给问题处理代码,通过这个对象的类型和内容,两个部分能够就出现了什么错误进行通信。Sales_item operator+(const Sales_item& lhs, const Sales_item& rhs){ if (!lhs.same_isbn(rhs))throw runtime_error(“Data must refer to same ISBN”); // ok, if we’re still here the ISBNs are the 阅读全文

posted @ 2012-12-20 12:00 zhuyf87 阅读(254) 评论(0) 推荐(0) 编辑

2012年12月19日

处理散列冲突的方法

摘要: 1. 开放定址法开放定址法就是一旦发生冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。Hi = (H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列。di可有下列三种取法:(1)di=1,2,3,…, m-1,称为线性探测再散列;(2)di=1^2, -(1^2), 2^2, -(2^2), 3^2, …, ±(k^2),(k<=m/2),称二为次探测再散列;(3)di=伪随机数序列,称为伪随机探测再散列。所谓伪随机数,用同样的随机种子,将得到相同的 阅读全文

posted @ 2012-12-19 16:22 zhuyf87 阅读(4496) 评论(0) 推荐(0) 编辑

2012年12月18日

嵌套的命名空间和匿名的命名空间

摘要: 1. 嵌套的命名空间命名空间可以嵌套,嵌套的命名空间可以进一步改进库中代码的组织。namespace cplusplus_primer { namespace QueryLib {class Query { /* … */ };// … } namespace Bookstore {class Item_base { /* … */ };// … }}当需要防止库中每个部分的名字与库中其他部分的名字冲突的时候,嵌套命名空间是很有用的。使用时,类Query的完全限定名如下:cplusplus_primer::QueryLib::Query。2. 匿名的命名空间匿名的命名空间可以在给定文件... 阅读全文

posted @ 2012-12-18 13:05 zhuyf87 阅读(4704) 评论(0) 推荐(0) 编辑

2012年12月17日

散列函数的构造方法

摘要: 好的散列函数要求:(1)计算简单,至少散列函数的计算时间不应该超过其他查找技术与关键字比较的时间;(2)计算出的散列地址分布均匀,这样可以保证存储空间的有效利用,并减少为处理冲突而耗费的时间。1. 直接定址法取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,其中a和b为常数(这种散列函数叫做自身函数)。2. 数字分析法假设某公司的员工登记表以员工的手机号作为关键字。手机号一共11位。前3位是接入号,对应不同运营商的子品牌;中间4位表示归属地;最后4位是用户号。不同手机号前7位相同的可能性很大,所以可以选择后4位作为散列地址,或者 阅读全文

posted @ 2012-12-17 15:28 zhuyf87 阅读(7815) 评论(0) 推荐(0) 编辑

2012年12月16日

散列表查找概述

摘要: 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称碰撞(collision)。具有相同函数值的关键字对该散列函数来说称做同义词(s 阅读全文

posted @ 2012-12-16 14:48 zhuyf87 阅读(627) 评论(0) 推荐(0) 编辑

2012年12月15日

c++命名空间

摘要: 命名空间(namespace)为防止名字冲突提供可控机制。一个命名空间是一个作用域,可以在命名空间内部定义自己的模板名、类型名、函数名,而不会与其它命名空间中的相同名字造成冲突。namespace cplusplus_primer {class SalesItem { /* … */ };SalesItem operator+(const SalesItem &, const SalesItem&);class Query {public: Query(const std::string&); std::ostream & display(std::ostrea 阅读全文

posted @ 2012-12-15 18:11 zhuyf87 阅读(1920) 评论(0) 推荐(0) 编辑

2012年12月13日

list使用要点

摘要: list使用一个doubly linked list(双向链表)管理元素,任何具备assignable和copyable两个性质的类型T,都可以作为list的元素。list的内部结构与vector和deque截然不同:1. 不支持随机存取。如果要存取第5个元素,就得顺着串链依次爬过前4个元素。所以list的遍历是很缓慢的行为。2. 任何位置上的插入和删除都非常快。3. 插入和删除操作不会造成指向其它元素的pointers、references、iterators失效。list包含很多成员函数,但由于不支持随机存取,所以不提供subscript(下标)操作符,也不提供at()。另外,list提供 阅读全文

posted @ 2012-12-13 16:34 zhuyf87 阅读(292) 评论(0) 推荐(0) 编辑

2012年12月12日

关于在窗口消息处理函数中使用MessageBox造成消息重入的问题的研究及解决

摘要: 原文地址:http://sns.ruanko.com/space.php?uid=15384&do=blog&id=97415这两天慢慢把这次实训的成果总结出来,这是第一篇日志。最早碰到的一个报错问题,在窗口消息处理函数中使用MessageBox(包括A和W版),由于MessageBox特性,程序会被阻塞,此时由于窗口处理函数未返回,消息分发会继续分发这个“未处理”的消息,从而导致消息重入。下面进行分析:MessageBox是模态对话框,Msdn中对于Dialog的解释为:The DialogBox macro uses the CreateWindowEx function 阅读全文

posted @ 2012-12-12 19:10 zhuyf87 阅读(1626) 评论(0) 推荐(0) 编辑

Pseudo-random sequence generation

摘要: randGenerate random number (function)srandInitialize random number generator (functions)c/c++产生随机数需要用到c库中的两个函数:srand和rand。srand函数用来设置随机数种子,初始化随机数生成器;rand函数用来产生随机数。两个函数的介绍和使用示例如下:srandfunctionvoid srand ( unsigned int seed );Initialize random number generatorThe pseudo-random number generator is init 阅读全文

posted @ 2012-12-12 07:58 zhuyf87 阅读(1495) 评论(0) 推荐(0) 编辑

导航