- 博客(176)
- 资源 (3)
- 收藏
- 关注
原创 一个语法分析器的实现
语法分析设计文档LR分析法分LR(0),SLR(1),LALR,LR(1)好几种,具体是SLR(1)分析法,对于LR分析法来说,语法分析过程都由一个称为“总控程序”来完成的总控程序是LR分析法的核心处理模块,而LR分析表又是总控程序的核心部分,所以整个LR分析法的核心部分就是求出LR分析表,下面就首先说明LR分析表的构造 给定文法(注意这里的标号表示的是第几条归约式,后面会用到
2013-06-17 21:01:23 5723 2
原创 写给自己,静下心来,别三心两意,专注自己热爱的方向!
个人基本情况: 大学前两年,没有跟老师做过项目,对MFC不太熟悉,参加过ACM ICPC亚洲区域赛(成都和杭州站),注重代码风格,热爱编码,觉得编码就是雕塑一件艺术品,有一定的数据结构和算法设计能力,C++的话还算熟悉,个人很喜欢C++,钻研过它的底层实现,对操作系统这些底层的东西很感兴趣,今年参加了“全国信息安全大赛”,有幸得到钱林松老师的指导 今年腾讯招实习生,当时投简历的
2013-05-22 20:58:06 2184
转载 C程序编译执行过程
认识C编译执行过程,是C学习的开端。简单说C语言从编码编译到执行要经历一下过程: C源代码编译---->形成目标代码,目标代码是在目标机器上运行的代码。连接---->将目标代码与C函数库相连接,并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码(程序)。执行----->在特定的机器环境下运行C程序。 如果用一个图 来表示: 以上
2013-05-03 10:32:27 738
转载 VC调试方法大全
一、调试基础调试快捷键F5: 开始调试Shift+F5: 停止调试F10: 调试到下一句,这里是单步跟踪 F11: 调试到下一句,跟进函数内部Shift+F11: 从当前函数中跳出Ctrl+F10: 调试到光标所在位置F9: 设置(取消)断点Alt+F9: 高级断点设置
2013-05-03 10:01:19 814
转载 sizeof()用法汇总
sizeof()功能:计算数据空间的字节数1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果
2013-04-26 19:46:06 758
原创 2013年腾讯暑期实习生招聘面试总结
我投的是软件开发-客户端方向,但后来听说客户端实习生只招4个人,我表示压力很大,腾讯公司是相当的霸气,把整个珞珈山国际酒店都包下来作为面试现场一面: 一面我的面试官大概就大了我2,3岁左右,态度很和蔼,一开始我先自我介绍,说了一下自己的情况,然后面试官就问了我以下一些问题,大概有20个问题,有些忘记了:1) 简述以下缓冲区溢出2)
2013-04-26 19:22:21 1623
翻译 函数指针 Function Pointer
Programs as Data: Function PointersBy Alex AllainA function pointer is a variable that stores the address of a function that can later be called through that function pointer. This is useful b
2013-04-22 09:05:33 1790
转载 C/C++数组名与指针区别深入探索
引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。很幸运,我的大学老师就是其中之一。时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解。 想必这种误
2013-04-21 10:49:36 610
转载 C语言编译过程总结详解
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则
2013-04-18 20:22:35 820
原创 extern "C"的理解
extern "C"的引入是为了解决C++函数重载的问题,C++之父在设计C++语言的时候,考虑到对C的兼容,引入了extern "C",使得在C++中能够无误地使用C的库函数(大部分的库函数都是由C编写的)在编译期间,C和C++为函数生成修饰名的方式是不一样的,这一点可以认为是C++实现函数重载的机制,考虑这样一段C代码:int fun(int x){ return 0
2013-04-10 19:16:27 4192
原创 VC++6.0 按F1无法打开 MSDN 的解决办法
一开始真的很头疼,在网上看到别人说重装VC,MSDN什么的,自己也重装了,还是不行,其实现在想想,压根不需要重装1. 首先在计算机上搜索 vshelp.dll 文件是否存在,如果不存在,则说明文件已经丢失,提供一个下载链接:http://www.dlldll.com/vshelp.dll_download.html2. 微软提供的解决方法:http://suppor
2013-04-09 15:51:20 2805
原创 【操作系统】操作系统的发展
一、批处理系统(Batch Processing)将作业(Job)按照他们的性质进行分组(分批),然后再成组(成批)地交给处理机去处理,批处理系统包括单道批处理系统和多道批处理系统二、单道批处理系统操作员将作业分成批次,然后串行地交给处理机处理,一个作业单独进入内存并占有系统资源,直到当前作业运行结束后下一个作业才能进入内存,也就是说,在这种系统模式下,内存中一次只有一个作业被
2013-03-26 14:53:02 1249 1
原创 前置和后置运算符
这是迅雷一问一答的题目:#include int main(void) { int a, b; a = 5; a = a + a++; printf("a = %d\n", a); a = 5; b = a + a++; printf("b = %d\n", b); return 0;}输出的结果是:反汇编过程:PUBL
2013-03-22 16:20:09 4424 2
转载 AT&T 与Intel 汇编语法比较
任何一个操作系统的源代码中总是少不了汇编语言,因此汇编语言是学习操作系统必备的基础知识,然而目前国内的教学大多是在Windows 平台上进行的,因此大多数读者熟悉的是Intel 的汇编语法,但是在Linux 内核代码中使用的却是AT&T 的汇编。本节对这两种汇编进行对比,让已经熟悉Intel 汇编语法的读者快速掌握AT&T 的汇编。1. 前缀 在Intel 汇编语
2013-03-16 21:18:35 894
转载 关于编译的时候生成MAP文件
【0. MSDN中关于参数的说明】/MAP (生成 Map文件)这个选项告诉连接器要生成一个map文件。命令行干吗的备注/MAP生成MAP文件默认生生成的map文件是程序名+.map/MAP:filename指定Map文件名不用默认文件名,用你指定的文件名map文件包含了要连接的程序的一下
2013-03-14 20:36:33 9027
原创 从逆向分析角度看C++ 中的引用
几个问题:1. 引用变量占有内存空间吗?2. 引用是怎样工作的?3. 指针是怎样工作的?4. 引用和指针有什么区别?1. 何为引用《C++ Primer》里面是这样说的“引用(Reference)就是对象的另一个名字,引用只是它绑定的对象的另一个名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上”,这句话概括得很彻底2. 引用占有内存空间吗?
2013-03-13 22:00:12 4258
原创 C++ 友元函数(Friend)
在类的外部,任何实例访问类的 private 或 protected 成员都是被禁止的,这是出于安全性的考虑。但是很多时候,出于实用性的考虑,的确需要从外部访问类的 private 或 protected 的成员,这可以在 C++ 中通过关键字 friend 来实现。友元(friend)机制允许一个类将对其非公有成员(private 和 protected 成员)的访问授予指定的函数或类。友元
2013-03-12 01:43:47 1277
原创 从逆向分析角度看C++拷贝构造函数
一段C++代码://: HowMany_2.cpp#include using namespace std;class HowMany { static int objectCount; public: HowMany() { ++objectCount; print("HowMany()"); } ~HowMany() { --ob
2013-03-09 16:57:45 4176 1
原创 从逆向分析角度看C++的析构函数
有这么一段C++代码:#include class CExample { int x, y; public: CExample(int va, int vb) { x = va; y = vb; } CExample(const CExample& C) { x = C.x; y = C.y; } ~CExample() { prin
2013-03-08 16:58:14 3894
原创 HDOJ - 4414 (Finding crosses)
/* PROG: Finding crosses ID : LANG: C++ */ //#pragma warnning (diaable : 4530) //#pragma warnning (disable : 4786) #include #include #include #include #include #include #i
2013-03-07 13:52:58 788
原创 HDOJ 1251 -- 统计难题 Trie
Trie的写法是很灵活的,感觉跟segment tree一样,要活用/* PROG: 统计难题 ID : LANG: C++ */ #include #include #include #include #include #include using namespace std; struct Trie_Node { int
2013-03-07 13:51:18 815
原创 HDOJ 1075 -- What Are You Talking About Trie( STL )
方法一:Trie思路:1. 开辟一个结构体数组dict,数组中存放索引值和索引,比如from fiwo2. 建立一颗Trie,Trie维护 整型变量 index,结构体指针数组 branch,在建立Trie的过程中,若是单词结尾,Trie中index赋值为dict的索引,否则为-1 写法一:string类降低编码复杂度,当然代价是时间复杂度加大约 2
2013-03-07 13:48:22 842
原创 USACO 2.3.1 Longest Prefix --- Trie
/* PROG: prefix ID : LANG: C++ */ #include #include #include #include #include #include #include using namespace std; struct Trie_Node { bool IsEnd; Trie_Node
2013-03-07 13:45:59 852
原创 Poj 3626 BFS
#include #include #include #include #include int mat[1010][1010]; int i, nNum, tx, ty, ai, bi; int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; struct path { int x, y, step;
2013-03-07 13:44:19 808
原创 Poj 1915 - Knight Moves 双向广搜
#include #include int vis[305][305], mat[305][305]; int dx[] = {-2, -2, -1, 1, 2, 2, 1, -1}; int dy[] = {-1, 1, 2, 2, 1, -1, -2, -2}; int casenum, nNum, sx, sy, tx, ty, i; struct point {
2013-03-07 13:43:34 906
原创 ZOJ 1649 - Rescue BFS/优先队列
在HDOJ上提交通过以后,再在zoj上提交,结果得到了无数个WA,后来发现有一种情况我并没有考虑到 有几个关键的地方需要注意:1. Angel的朋友不只有一个,可能有多个2. guard的存在可能会破坏广度优先树解决办法:BFS的做法:必须要保存guard与可行点‘.’的插入同步,因为guard的costTime不同,应该先不改变其坐标,costTi
2013-03-07 13:41:12 1161
原创 HDOJ 1026 Ignatius and the Princess I
经典BFS+记忆表 解题思路:因为存在具有Hp为n的monster存在,如果直接压入队列,就有可能破坏广度优先树,因此必须在处理的过程中保证monster和‘.’的处理是保存同步的,处理方法:如果当前位置是monster,那么我就削减他一个HP,再压入队尾,直到HP为0时,把地图上monster的位置置为‘.’可行位置,这样一来,monster和‘.’的处理
2013-03-07 13:40:24 866
原创 HDOJ 1496 - Equations Hash
1 // Accept 31ms 544k 2 #include 3 #include 4 #include 5 #include string.h> 6 #include 7 8 /* 将方程分划为2个部分,前一个部分最多有100*100种可能 */ 9 #define MAX 3009310 11 int s[10010]={0};12 int a, b,
2013-03-07 13:39:16 934
原创 UVA 705 - Slash Maze (Flood_Fill + DFS)
分析:1. 可以知道的是,給定的 slash Maze 中只存在 ‘/’ 和 ‘\’ ,將斜線或反斜線離散化為 3 * 3 單位的方格,比如 用數字 1 表示單位被覆蓋,數字 0 表示單位是空白,則 /001010100 也可以用 2 * 2 的單元格表示
2013-03-07 13:38:08 975
原创 Hdoj 1509 -Windows Message Queue 优先队列最小堆实现
一开始提交后得到了好几个WA,搞得我一直很郁闷,于是重新看了一下题目,发现有一个地方我没有考虑到Note that one message can appear twice or more and if two messages have the same priority, the one comes first will be processed first.(i.e., FIFO f
2013-03-07 13:37:28 868
原创 Poj 3253 - Fence Repair 最小堆
题目大意:FJ需要修补牧场的围栏,他需要 N 块长度为 Li 的木头(N planks of woods)。开始时,FJ只有一块无限长的木板,因此他需要把无限长的木板锯成 N 块长度为 Li 的木板,Farmer Don提供FJ锯子,但必须要收费的,收费的标准是对应每次据出木块的长度,比如说测试数据中 5 8 8,一开始,FJ需要在无限长的木板上锯下长度 21 的木板(5+8+8=21),
2013-03-07 13:36:53 810
转载 大数据量,海量数据 处理方法总结
转载请注明出处:http://duanple.blog.163.com/blog/static/7097176720091026458369/作者phylips@bmy 参考文献:http://blog.csdn.net/jiaomeng/archive/2007/03/08/1523940.aspx d-Left Hashinghttp://blog.csdn.net
2013-03-07 13:32:24 1210
转载 32位Intel CPU所含有的寄存器
4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位
2013-03-07 13:26:01 1220
转载 汇编地址计数器伪指令 $
FROM:http://www.qiyeku.com/xinwen/597337.html汇编地址计数器用符号$表示,它用来记录正在被汇编程序翻译的语句的地址,即$的内容标示了汇编程序当前的工作位置。 在一个源程序中往往包含多个段。汇编程序在将该源程序翻译成目标程序时,每遇到一个新的段,就为该段分配一个初置为0的汇编地址计数器,然后,再对该段中 的语句汇编。在汇编过程中,
2013-03-07 09:52:18 10996 4
原创 VC 命令行 CL
如果你的 VC 6.0 是按默认安装在 C 盘的话,打开“Microsoft Visual Studio\VC98\Bin”里面有一个“VSVARS32.BAT” 的文件,打开它,运行一次,cl.exe 就可以使用了如果你的 VC 6.0 是安装在其他盘(比如我的 VC 6.0 就安装在 E 盘下),就需要配置一下坏境设置了,打开“我的电脑-属性-高级-坏境变量”,设置如下:在这一
2013-03-06 08:09:37 2224
原创 HDOJ 1247 -- Hat Words Trie
思路:先将所有的单词插入到 Trie 中,然后对于每个单词枚举前后位置 1 /* 2 PROG: Hat’s Words 3 ID : yewei 4 LANG: C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 11 //const int size = 102;
2013-03-05 09:56:53 773
原创 旧代码 - 高精度阶乘
#include int casenum,bit;int buf,res;int answer[9000];int main(){ register int i,j; while (1 == scanf("%d", &casenum)) { bit = answer[0] = 1; for (i=1;
2013-03-05 09:53:37 790
原创 旧代码 - 高精度乘法
#include #include #include #include int i,j,aLen,bLen,cnt,nCases;int result[2005];char a[1001],b[1001];int main(){ scanf("%d",&nCases); while( nCases-- ) { me
2013-03-05 09:53:13 983
原创 旧代码 - 高精度加法
#include #include #include int flag = 0 , cnt = 1;int casenum,buf,res,bit,aLen,bLen;char a[1001],b[1001],answer[1001];int main(){ register int i,j; scanf("%d", &casenum);
2013-03-05 09:52:47 745
修改注册表使VC++6.0与MSDN建立连接
2013-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人