blog | 逍遥郡


  • Home

  • Archives

  • Tags

  • Search

链表相关算法

Posted on 2006-04-15 |
[TOC] 链表节点的一般定义: typedef struct ListNode { DataType data; struct ListNode* next; /* struct ListNode* prev; */ /* 双向链表 */ } ListNodePtr; 从链表还衍生出很多著名的数据结构,比如循环队列、跳表,都值得学习。 常见问题 问题1 给出一个单向链表的头指针,判断是否有环。 思路:俩指针追逐,步进分别为1和2,若有环,这俩指针将相遇。 问题2 给出两个单向链表的头指针,判断这两个链表是否相交。 思路:判断尾指针是否相同,判断有环的情况。 找到相交的那个节点。 思路:需要先遍历两个单向链表,并记录下各自长度;然后,求俩长度之差值,较长的链表先步进该差值,然后再一起步进。 问题3 输入一个单向链表,输出该链表中倒数第k个结点。 思路:设置两个指针p1,p2,首先p1和p2都指向head,然后p2向前走k步,这样p1和p2之间就间隔k个节点,最后p1和p2同时向前移动,直至p2走到链表 ...
Read more »

用xmodmap捕获键定义

Posted on 2006-04-07 |
要想在fvwm或者icewm中使用某些快捷键,但是不知道键位的定义怎么办? 一般的特殊键 可用查看 /usr/X11R6/include/X11/keysymdef.h 中键位的定义 多媒体特殊键 使用xmodmap,需要两个程序 xev 和 xmodmap,先在终端中运行 xev 会弹出一个对话框,如果按一个键,会得到该键的 keycode,比如138,在启动脚本 ~/.xsession 或者 /etc/X11/Xsession.d/ 下的某个脚本中加入: xmodmap -e 'keycode 138 = Svolumedown' 然后在 /usr/X11R6/lib/X11/XKeysymDB 中让X知道该键的作用: Svolumedown :1100000D 最后在 .fvwm2c 中把按键映射到程序动作上: Key Svolumedown A A Exec exec amixer set PCM 2%- 现在,大多数的多媒体按键名称都在 /usr/X11R6/lib/X11/XKeysymDB 中定义了,所以上边第二个步骤一般也可以省略。
Read more »

aptitude速查

Posted on 2006-03-22 |
aptitude速查 aptitude软件包列表中的软件包状态 状态 说明 v 虚拟 B 损坏 u 解包 C 预配置 H 预安装 c 卸载未清除 p 清除软件包 i 已经安装 E 内部错误 在aptitude软件包列表中的请求操作 操作 说明 h 保持 p 清除 d 删除 B 损坏 ...
Read more »

简单的cvs使用指南

Posted on 2006-03-15 |
客户端的cvs使用很简单,一般按照下边的顺序即可 设置CVSROOT 首先设置变量 $CVSROOT,可以直接用export或者setenv命令,或者直接写到.bashrc或者.cshrc中 export CVSROOT=:pserver:username@192.168.0.143:/cvs_appl setenv CVSROOT :pserver:username@192.168.0.143:/cvs_appl CVSROOT的格式是 :连接类型pserver:登陆用户名@cvs服务器地址:/cvs项目 登陆CVS服务器 设置了CVSROOT就可以登陆cvs服务器了,首先在用户目录下创建 .cvspass 文件,保存登陆密码 touch ~/.cvspass 然后,登陆,输入密码 cvs login 这样就完成了登陆cvs服务器 CVS常用命令 CVS的命令大多都需要在相应的项目目录下运行 cvs checkout 第一次使用cvs需要导出整个项目,也就是checkout命令,简写做co;跑到你想保存cvs项目的目录,然后运行 cvs co ...
Read more »

利用ls -Ri查找avc denied文件

Posted on 2006-03-11 |
sebsd里边的avc报错只会指出inode节点,源类型和目的类型,并不会指示出到底是哪个文件出现acv错误。所以现在有一个方法,可以利用 ls -Ri 查询到底哪个inode出错,然后定位到具体的文件。 比如出现一个avc denied信息: avc: denied { execute_no_trans } for pid=709 comm=tcsh inode=94653, mountpoint=/usr, scontext=user_u:user_r:user_t tcontext=system_u:object_r:unlabeled_t tclass=file 发现错误是在 /usr 这个文件系统下,运行命令 ls -Ri /usr | grep 94653 根据文件系统的大小,漫长等待之后,提示 94653 cvs 494653 kon.cfg 于是 # where cvs /usr/bin/cvs 然后 # ls -i /usr/bin/cvs 94653 /usr/bin/cvs 则,文件 /usr/bin/cvs 就是我们要找的文件,运 ...
Read more »

正则表达式备忘

Posted on 2006-03-03 |
说到正则表达式(Regular Expression)不得不提到正则文法,这俩是等价的可以互相转换。同时,他俩与有限状态自动机(Finite State Automaton)也是等价的,实际上那些支持正则表达式的工具,比如grep、awk内部都是使用有限状态自动机来识别正则表达式的。这里厘清一下它们之间的关系: 0型文法,即无限制文法,可以被图灵机识别(能使图灵机停机的字符串)。 1型文法,即上下文相关文法,产生规则为 αAβ → αγβ 1,可以被线性有界非确定图灵机识别。 2型文法,即上下文无关文法,产生规则为 A → γ 2,可以使用巴科斯范式(BNF)表达,可以被下推自动机识别,包括LL(1)、LR(1)等语法分析器,基本所有的编程语言都是属于2型文法。 3型文法,即正则文法,产生规则为 A → aB, A → a 3,可以用正则表达式表达,可以被有限状态自动机识别,包括非确定有限自动机(NFA, Nondeterministic Finite Automaton)和确定有限自动机(DFA, Deterministic Finite Automaton)。 ...
Read more »

在笔记本上安装Gentoo系统

Posted on 2006-02-22 |
以前用Emacs写的一篇Wiki,记录在Thinkpad T40p上安装Gentoo的经验,现在转到blog上来,另有一份留在GooglePage上,当然在Gentoo官方Wiki上有更详尽的说明。 下载 下载 livecd 和 stage3,到 这里 找个mirror站点下载即可,最近的是在 ftp://ftp3.tsinghua.edu.cn/mirror/gentoo 或者 http://gentoo.osuosl.org/releases/x86/ 分区 从livecd 启动,给硬盘分区。硬盘分为4个区,linux可以完全安装在扩展分区上, 可以用 cfdisk 或者 fdisk 这样强大的工具来分区,分区结果如下: 挂载点 格式 大小 备注 /boot ext2 50M 放置 vmImage 和 grub /swap swap 1.1G 如果想实现supsen ...
Read more »

使用wget整站下载

Posted on 2006-02-12 |
开源软件里有不少很无敌的工具,比如看电影通吃的mplayer,非交互下载的wget,版本控制的GNU Make,现在用的GNU Emacs,VIM,哎哟――打住打住,先今天用到的 wget。 在win下下载整个网站一般用webzip,不过trail版只能用30d,而且会插入晃眼的大广告,而用wget完全可以替代我需要的整站下载功能,而且加入到cron里边还能做一个web或者ftp站的mirror。 比如,今天下载freebsd developer handbook,可以这样: wget -q -r -k -Pdevbook -nd -o wget.log http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/developers-handbook/ 其中几个option和argument的含义详细见 man wget,简要记录一下用到的几个: r 对于链接循环下载 k 修复下载html文档中的内部绝对链接链接为相对链接,便于阅读 P 指定下载目录为当前目录下的devbook目录 o ...
Read more »

计算理论的一些基础知识

Posted on 2005-11-20 |
Lambda calculus Lambda演算由数学家邱齐(Alonzo Church)发明,其基本语法(BNF): <expr> ::= <identifier> <expr> ::= lambda <identifier-list>. <expr> <expr> ::= (<expr> <expr>) 前两条语法用于生成lambda表达式(lambda函数),如: lambda x y. x + y 函数定义出来了,怎么使用呢?最后一条规则就是用来调用一个lambda函数的: ((lambda x y. x + y) 2 3) α-变换公理:例如,lambda x y. x + y 转换为 lambda a b. a + b。α公理是关于函数定义的,即函数的参数名可以随意变换。 β-规约公理:例如,(lambda x y. x + y) 2 3转换为2 + 3。β公理是关于函数调用的,即实参替换调用函数的形参。 Y combinator Y组合子的最 ...
Read more »

七种武器之screen

Posted on 2005-09-22 |
终端操作的利器, 当你远程ssh到一台主机的时候, 就深刻体验到screen的好处了. screen常用的键位(前缀键已经改为C-z): 功能 键位 卷屏 C-z [进入copy mode,按q退出 移动光标 卷屏后,使用C-b、C-f/、C-n和C-p移动光标,类似vi 复制粘贴 卷屏后,按空格键开始复制,移动光标选择复制内容后,再次按空格键完成复制,然后使用C-z ]粘贴 搜索 卷屏后,使用 / 和 ? 向下和向上搜索,类似 vi 更改tab标题 C-z A 分屏 C-z S 切换分屏 C-z C-I 退出分屏 C-z Q 锁屏 C-z ...
Read more »
1 … 16 17 18 19
Julian Qian

Julian Qian

记录编程、Hack和自娱自乐的一些玩意。

189 posts
60 tags
RSS
Creative Commons
© 2024 Julian Qian
Powered by Jekyll
Theme - NexT.Mist