04 2013 档案

摘要:单链表双链表中经常纠结的概念:1、链表是否有含有头结点:(1)带头结点的链表头指针head指向头结点,数据域不含任何信息,只是指向链表的第一个保存信息的结点,head->next等于null则表示链表为空;(2)不带头结点的链表头指针head直接指向保存信息的第一个结点,head==null,表示链表为空。说道这里,有人会对头指针,头结点的概念迷糊了。。。头指针:指向链表的第一个结点,不管是不是带头结点的;头结点:只针对带头结点的链表而言,只作为链表存在的标志,不含信息。一般建立链表最好用带头结点的。 1 #include 2 #include 3 typedef struct Ln.. 阅读全文
posted @ 2013-04-29 13:32 楠楠IT 阅读(1200) 评论(0) 推荐(0)
摘要:题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14/ / / /4 8 12 16转换成双向链表:4=6=8=10=12=14=16 思路:二叉查找树按中序遍历得到的数据是按顺序排列的,所以要按照中序遍历的顺序把二叉树转换成链表;二叉树每一个结点有两个指针left,right,和链表的前驱和后继对应的指针正好对应。 代码: 1 #include <iostream> 2 using namespace std; 3 4 struct BSTreeNode 5 { 6 int m_nValue; /. 阅读全文
posted @ 2013-04-27 16:58 楠楠IT 阅读(602) 评论(0) 推荐(0)
摘要:这是斯坦福大学的公开课上关于sql数据库知识的基础测试,看看计算机顶尖学府是怎么出题的?真心有水平。You've started a new movie-rating website, and you've been collecting data on reviewers' ratings of ... 阅读全文
posted @ 2013-04-11 19:41 楠楠IT 阅读(3898) 评论(1) 推荐(1)
摘要:1、 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。2、研究排序算法的稳定性有何意义? 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前两个相等的数据其在序列中的先后位置顺序与排序后它们两个先后位置顺序相同。再简单具体一点,如果A i == A j,Ai 原来在 Aj 位置前,排序后 Ai仍然是在 Aj 位置前。下面我们分析一下稳定性的好处:(1)如果排序算法是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所利用。基数排序就是这样,先按低位排序,逐次按高位排序,那... 阅读全文
posted @ 2013-04-11 09:59 楠楠IT 阅读(31710) 评论(0) 推荐(5)
摘要:单例模式---顾名思义,就是一个类只有一个实例对象,只实例化一次。它有三个要点:(1)一个类只有一个实例(2)类本身自行创建这个实例(3)它必须自行上下向整个系统提供该实例。代码实现: 1 public class QQSingle 2 { 3 private string name; 4 private static QQSingle qqsingle; 5 private static object _lock = new object(); 6 public string Name 7 { 8 ... 阅读全文
posted @ 2013-04-08 16:44 楠楠IT 阅读(221) 评论(0) 推荐(0)
摘要:1、for(i=0;i<10;++i,sum+=i); 循环结束时 i 和sum的值分别是多少? 分析:循环结束时 i=10应该没有问题,sum计算的位置不是很常见,每次sum+=i 时,i 的值都是先自加1,即 i(从0到9),计算sum时是从1加到10,结果55;如果是:for(i=0;i<10;++i) sum+=i; 循环结束时 i 和sum的值分别是多少? 这次 i 依然是10,但是sum就是0到9的加和,结果45。2、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。 #define Max(a,b) ((a-b)&(0x80))? b:a # 阅读全文
posted @ 2013-04-07 20:06 楠楠IT 阅读(444) 评论(0) 推荐(0)
摘要:指针是地址,指针的指针还是地址,只不过是保存的某指针变量的地址。废话不说,上菜,看代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 //关于指针的指针,赋值以及其意义 4 int main() 5 { 6 int a=8;//定义一个int型变量a,假设其在内存中的地址是1000 7 int *q;//定义指针变量q,q本身也需要内存存储,假设其地址是2000 8 q=&a;//给q赋值,即a的地址1000。此时q=1000,*q=a=8; 9 int **p;//定义指针的指针变量p,同理p也需要内存存储,假.. 阅读全文
posted @ 2013-04-05 18:38 楠楠IT 阅读(2913) 评论(0) 推荐(1)
摘要:for循环可以说是程序中最灵活,最常用,最重要的一个循环用法,大家经常用到,但是你真正理解for循环的运行原理吗? 举个例子:for(i=0;i<8;i++) 对于这个语句运行结束的时候 i 是多少? 经常用,却没怎么注意,运行结束的时候 i 是8;下面说一下for循环语句的运行过程: for(表达式1;表达式2;表达式3) {循环体} 这三个表达式,可以都有,也可以都没有,也可以由任意的一项或两项,这就是for的灵活性所在;解释一下三个表达式的含义: 表达式1:这个一般是初始化条件,如i=1。在第一个分号之前,可以用一个,也可以好几个,用逗号隔开; 表达式2:这个是循环条件,... 阅读全文
posted @ 2013-04-05 18:05 楠楠IT 阅读(712) 评论(0) 推荐(0)
摘要:对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。本文通过文氏图解释了SQL的Join,清楚易懂,值得学习。假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录是相同的,如下所示:id name id name1 Pirate 1 Rutabaga2 Monkey 2 Pirate3 Ninja 3 Darth Vader4 Spaghett... 阅读全文
posted @ 2013-04-05 13:44 楠楠IT 阅读(396) 评论(1) 推荐(0)
摘要:在C#中,我们可以非常自由的、毫无限制的访问公有字段,但有时我们可能希望:(1)限制只能给字段赋于某个范围的值;(2)或是要求字段只能读或只能写;(3)或是在改变字段时能改变对象的其他一些状态; 这些只靠字段是无法做到的,于是就有了属性。 属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。 在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。 set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。 下面举个简单的例子:(1)属性可以保证安全,当不在本类中使用时,使用属性名可以避免用字段的名... 阅读全文
posted @ 2013-04-04 13:44 楠楠IT 阅读(1673) 评论(0) 推荐(0)
摘要:简单工厂模式---顾名思义,就是有一个工厂,你用它可以生产不同的产品,当然产品的生产细节你不需要知道,你只负责得到产品,生产过程都封装在工厂内部。简言之,就是一个工厂,你要告诉他你想要的产品名称,他就给你输出产品。 下面我们举个例子简单说明一下。你和朋友去吃肯德基,你告诉服务员我要鸡翅,你朋友说我要炸土豆条。过了一会,你们要得东西就来了,但是他们怎么做的你们不知道吧?你们只管开吃就好了。 用代码实现该过程: 首先,定义一个接口:用来获取不同产品1 public interface IFood2 {3 void get();4 } 然后,分别用两个类继... 阅读全文
posted @ 2013-04-04 10:12 楠楠IT 阅读(195) 评论(0) 推荐(0)
摘要:函数是所有程序中最重要的单位,无论是面向过程还是面向对象语言。怎样写好函数非常重要。下面是我看书还有结合自己的经验总结的: 首先,函数的书写要遵循一个很重要的原则:短小精悍,即语句要简短,功能要单一,尽量满足一个函数只做一件事情的原则。下面就具体函数的书写过程:(1)确定函数返回类型,voidintbool还是等等?暂时不确定设置为空void;(2)函数名称:函数名称要满足知名知意的原则,还要注意字母的大小写,例如快速排序的函数名一般QuickSort,至少我暂时找不到更适合的了!(3)函数的参数:有些函数没有参数,即为空;但是函数的功能一般是输入数据,返回处理结果,输入的数据即为参数,... 阅读全文
posted @ 2013-04-03 20:30 楠楠IT 阅读(1035) 评论(0) 推荐(0)
摘要:c#中abstract class、virtual、interface是很重要的概念,刚接触难免会有很多疑惑,它们有什么区别,都怎么用,下面是我整理的一些帮助大家理解。 abstractclass是抽象类:比如说,圆形和三角形都是形状,圆形和三角形有具体的表现方式,定义为具体类。而形状没办法具体表现出来,就只能定义为抽象类,抽象类可以有自己的属性,可以有非abstract的方法。所以,抽象类强制要求其继承者重写,抽象方法声明时不提供其自身的实现,抽象类不能被实例化; interface是接口:相当于某些具体对象的交叉点,这个点本身不能做什么,只能把操作传达给各个具体的对象,让对象自己去... 阅读全文
posted @ 2013-04-03 20:06 楠楠IT 阅读(422) 评论(0) 推荐(0)