2008年12月8日星期一

双系统、杂分区的一点经验

  • 首先假设你已经用PQ这种权威分区工具分完并格式化多个主分区+扩展分区、逻辑分区(请有经验的装系统爱好者来做这件事,而且需要安装系统的分区尽量不要格式化)。
  1. 装系统顺序不多说,是先Windows再Linux,否则需要进行多余的步骤。最重要的是,正常安装XP(原版CD而非Ghost版等修改版)时如果检测到你的硬盘含非ntfs、fat32主分区(也可能只是检测第一个主分区)的话你将无法进入安装界面,会提示你硬盘有错(具体是什么忘了),而且没有很好的解决方法,国外网估计能找到答案。所以请先删除Linux分区再安装XP,你用Ghost安装我没话说。
  2. 用Linux特别是Ubuntu发行版中自带的分区软件时请注意:
    当你安装Ubuntu到了分区这一步时,采用他的建议一般不是你想要的方案,有些时候还会将你的分区一分为二,强烈建议手动。手动时也不要太豪放乱改大小(Resize),特别是主分区和扩展分区两者之间的resize,的确你想怎么改就怎么改,但如果你的分区本来就有点复杂,这时的修改看上去没什么事,实际上会将你的分区结构改得很乱,不利于以后的维护。(还是Suse好,分区建议什么的都比较合理)
  3. 如果你犯了第二点中所说的错误,而且你用的是XP,请不要随意用XP中自带磁盘管理(Disk Management),牵一发而动全身,我删除了第二个主分区(linux分区)时中了招,磁盘管理直接将我的扩展分区全部删除。。这是第二次了遇到了,第一次是把扩展分区删了一半。
  • 加点关键字方便robot搜到:恢复误删分区,恢复分区,撤销删除分区,格式化后恢复文件
  • 如果你中了上面第3点所说的招,或者自己不小心删除了分区时这时不要乱动!不要再操作分区了,自己重新建立分区再用恢复文件的软件恢复资料是极其恶心的,双系统的话最好别重启(Grub所在分区没了就没法引导)。这时推荐使用DiskGenius,以前叫Diskman,这个共享软件也帮了我的大忙;Linux下可以使用TestDisk(英文版),ubuntu的默认软件源里有,suse在官网也能搜到。
  • DiskGenius能搜索并恢复分区表,即使你没备份,保存后一切同原来一样了,注意用dos工具箱中的diskfix是无法搜索到自己手动删除的分区的。
  • 如果当时真的乱动了,你也可能搜索到你想要的分区,可以用DiskGenius浏览原来的文件并恢复到其他分区上,这样你可以不用恢复分区而只恢复文件。
  • 如果删除了Grub所在分区,重启时你将无法找到操作系统,所以重启前你可以用DiskGenius重建硬盘的mbr。
  • 如果重启无法找到操作系统了,你可以用XP安装盘中的恢复控制台恢复引导,或者用含紧急引导的工具盘引导XP后执行上面那一步。
  • 估计这个帖子对大家作用甚微,希望大家的资料没有出大问题吧,数据无价啊。
  • 最后鄙视一下某些电脑生产厂商将硬盘的四个主分区用得干干净净。

2008年12月6日星期六

完全二叉树的一些判定方法

  1. 肉眼
  2. 顺序表储存
    完全二叉树的每个结点按层次遍历顺序从1编号至n,所以当1 ~ n有某一项为空时则不为完全二叉树,时间复杂度O(n)。
  3. 链表储存
    受顺序表储存的启发,在树结点结构中添加一数据域,记录当前结点编号。编号在建树时不难确定,根节点编号为1,插入结点时,若父亲结点编号为i,则左儿子编号为2*i,右儿子为2*i+1。随后进行一次层次遍历,若已遍历结点数+1不等于当前队首结点编号,则不为完全二叉树,时间复杂度O(n)。此法由于添加了编号,使结点删除操作受到限制,所以在不涉及删除操作的情况下此法比较容易实现。
    一般情况下的判定方法也不难,网上流传的是
    先要对二叉树进行层次遍历,在遍历过程中对每一个结点进行检查:
    (1)如果当前结点没有右子树,则剩下的全部结点必须既没有左子树,又没有右子树;
    (2)如果当前结点有右子树,则它必须也有左子树.
    如果同时满足(1)(2),则是完全二叉树;否则不是.
    时间复杂度同样为O(n),但没有对树的维护造成麻烦。

  4. 相信还有更好的方法,这学期的核心即是学习强大的二叉树。

2008年11月22日星期六

Construction/Destruction Order of QObjects


int main()
{
     QPushButton quit("Quit");
     QWidget window;
     quit.setParent(&window);
     ...
 }

In this case, the order of destruction causes a problem. The parent's destructor is called first because it was created last. It then calls the destructor of its child, quit, which is incorrect because quit is a local variable. When quit subsequently goes out of scope, its destructor is called again, this time correctly, but the damage has already been done.

Remember: When the destructor of the child(quit) is called first, it removes itself from its parent(window), before the destructor of parent is called. Anyway the child will not be called twice. You MUST "delete" the object manually which is created with "New" and don't have a parent!

2008年11月19日星期三

Reading Qt 4.4 Tutorial 1

  • The QApplication object must be created before any GUI-related features of Qt are used.
  •     QPushButton hello("Hello world!");
    A push button is created. Because we don't specify a parent window (as second argument to the QPushButton constructor), the button will be a window of its own, with its own window frame and title bar.
  • The button's size is determined by its default size hint. We could call QWidget::move() to assign a specific screen position to the widget, but instead we let the windowing system choose a position.
  •     hello.show();
    A widget is never visible when you create it. You must call QWidget::show() to make it visible.
  •    return app.exec();
    This is where main() passes control to Qt
    int QApplication::exec ()

    Enters the main event loop and waits until exit() is called, then returns the value that was set to exit() (which is 0 if exit() is called via quit()).

  • 基本把教程上的COPY下来了,细节注意到了却影响到整体阅读速度,在博客上修改这破格式花了不少时间。


2008年11月18日星期二

C++ STL1

用起瘾了,不好不好,忽略了具体实现和基本功,所谓理由是更能把精力放在算法上。。
不多总结,具体使用方法参见 http://www.cplusplus.com/reference/
今天收获是关键字排序,参见 一个多关键字排序例子
其中ICmpMuls也可直接放MultiData中,bool operator() 重载圆括号,sort第三个参数具体机理还很茫然(updated: 函数指针),以后如果将C++作为主语言,熟练后一定要读读STL源码剖析那本书。

2008年11月8日星期六

qt1

1.

通过使用一个layout管理器对旋转窗口和滑块窗口进行了布局设置。一个布局管理者就是一个根据窗口作用设置其大小和位置的对象。Qt有三个主要的布局管理类:

QHBoxLayout:将窗口部件水平自左至右设置(有些情况下是自右向左)。

QVBoxLayout:将窗口部件垂直自上向下设置。

QGridLayout: 以网格形式设置窗口部件。

调用QWidget::setLayout()函数在对象window上安装布局管理器。通过这个调用,部件自动成为布局管理器所在窗口的子窗口。

2.

Qt程序员最常用的设计模式是:说明所需要的窗口部件,然后设置这些部件必须的特性。程序员把窗口部件添加到布局管理器中,布局管理器就将自动地设置这些部件的大小和位置。而用户界面的行为是通过连接各个部件(运用信号SIGNAL/槽SLOT机制)来实现的。



2008年10月31日星期五

xhtml 1

XHTML 基本规则
  • XHTML 元素必须被关闭(包括空标签 hr, br)
  • XHTML 元素必须小写
  • XHTML 文档必须拥有一个根元素 (html)
  • 属性名称必须小写
  • 属性值必须加引号
  • 属性不能简写
  • 用 id 属性代替 name 属性

2008年10月26日星期日

stack 1


    1. 中缀表达式到后缀表达式(逆波兰表达式)的转换(简单表达式、带括号的表达式)
      引入优先级 <= 栈内优先级则先从栈中取出运算符输出。
    2. 后缀表达式求值