题目来源:http://www.cnblogs.com/cutepig/archive/2007/09/14/893552.html
1.char a=255;
sizeof(++a)=?(1)//这题可以参考我以往文章,关于sizeof的分析a=?(-1)//数组越界
2.删除掉cpp文件中的所有注释
这题考察的是对文件的操作题, 程序稍后奉上
3.用脚本(bash)统计(不是特别清楚,只记得diff可以实现两个文件不同的行,回头查)两个文本文件的相同的行,
??
第一文件有而第二文件无的行
??,
两个文件的补集。
4.设计一个简化的bbs系统:多用户,可发表主题,回复,同主题阅读,分不同的版面,为每一用户判断某一文章是否已读,等。
首先设计系统的整体框架,开发语言。
然后进行设计交互过程, 设计数据库结构,然后进行编码。题目较简单,不详述。
5.判断一个链表是否存在回路?
判断链表是否有回路,可以通过下面方法进行处理:
首先链表的结构可能我们不太清楚,如果可以随意更改结构体的成员,那么这题就很容易了,增加一个标志性的变量,一旦串入链表中,标志位置1,如果下面的操作中发现链路中下一结点的标志位为1,那么说明一定形成了环路,否则一直执行下去。
6.两个单向链表,有可能交叉,请设计算法判断是否交叉,如果交叉,返回交叉点!算法复杂度o(n)
做这题前首先需要明确以下概念:
1级就是1个直线链表2级就是每个节点是1级链表
3级就是每个节点是2级链表
交叉链表是两个链表在某个点会交汇到一起,后面所有节点相同。
明白了上述概念后,对判断是否是交叉链表,就显得很简单了。
可以借助第五题中判断是否存在回路的思路,比如下述步骤:
- 首先遍历链表1,对所有遍历后的结点做标记1。
- 遍历链表2,判断在遍历过程中,是否有结点已经置1,如果存在,那么出现的第一个结点就是交叉点。
- 如果从来没出现过,那么两个链表就不相交。
8.Hash表
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系
散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位ǐ
1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,其中a和b为常数(这种散列函数叫做自身函数)
2. 数字分析法
3. 平方取中法
4. 折叠法
5. 随机数法
6. 除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) = key MOD p,p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。
处理冲突的方法
1. 开放寻址法;Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)为散列函数,m为散列表长,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=伪随机数序列,称伪随机探测再散列。==
2. 再散列法:Hi=RHi(key),i=1,2,…,k RHi均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间。
3. 链地址法(拉链法)
4. 建立一个公共溢出区
9.php+MySQL
10.问参加过ACM/数学建模没有
参加过ACM同时也参加过数学建模。
11.多边形标记问题
可以考虑使用累计角度法,即使是凹多边形一样可以判断。