摘要: 假设我们有一个队列 我们需要快速的找到里面存储的最大值 该怎么做?【提示】:你能做到多快,队列不能排序哦这个题最快能做到 O(1)当然 需要采用空间换时间的方法 那么如何换呢?现在 我们用在之前的用2个栈实现的队列中 再增加两个栈 新增加的两个栈分别的栈顶分别用来表示 原有的两个数据栈中的元素的最大值 现在我们定义 sd1 为队列的进入栈 sd2 为队列的弹出栈 sdm1 为sd1的最大值栈 sdm2 为sd2的最大值栈每次进栈的时候 我们再把数据压入sd1前 先比较sdm1的栈顶元素 如果待压入的数据大, 那么我们就把这个数据压入sdm1 如果sdm1的栈顶数据大 那么我们将这个栈顶数据再次 阅读全文
posted @ 2013-02-20 22:28 海 哥 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 如题:#define dPS struct s *typedef struct s * tPS;dPS p1,p2;tPS p3,p4;这并不是一个难搞的问题。只是想提醒大家define和typedef不同一个是由于编译器完成的简单文本替换一个是由正宗编译器完成的重命名操作 阅读全文
posted @ 2013-02-20 22:21 海 哥 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 如题:int main(){ const int SIZE = 10; char a[SIZE] = {1000, -1000, 256}; printf("%d\n", strlen(a)); return 0;}此题第一个是编译错误,const修饰的变量是只读变量,而不是我们翻译的常量也就是说SIZE还是变量,只是编译器在编译时从语法的层面不要它作为左值,但是这改变不了它变量的本质大家想想数组定义时一定不能用变量做下标吧把SIZE定义成宏可以改掉这个编译错误剩下的就是输出了大家的焦点在,数组中么有一个是字符我想说的是,ascii码确实只有0--127, 但是不代... 阅读全文
posted @ 2013-02-20 22:18 海 哥 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 如题:int square(volatile int *ptr){ return *ptr * *ptr;}这题加上了volatile 恰恰不对 就是因为都从内存读值 而两次读的值有可能不同 导致得不到争取的平方值可以修改如下:int square(int *ptr){ int t=*ptr; return t * t;}那现在有个问题了 什么时候该用volatile修饰变量呢?volatile变量可能用于如下几种情况:(1) 并行设备的硬件寄存器(如:状态寄存器,例中的代码属于此类);(2) 一个中断服务子程序中会访问到的非自动变量(也就是全局变量);(3) 多线程应用中被... 阅读全文
posted @ 2013-02-20 22:15 海 哥 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 如题:int main(){ int a,b,c; a = inWord(0x100); /*读取I/O空间0x100端口的内容存入a变量*/ b = a; a = inWord (0x100); /*再次读取I/O空间0x100端口的内容存入a变量*/ c = a; return 0;}但是不能说一定会出错 只是可能出错为什么说只是可能呢 这个要看编译器了 不同的编译器优化方式不同为了我们代码的可移植行 应该给a加上 volatile关键字否则int a,b,c;a = inWord(0x100); b = a;a = inWord (0x100);... 阅读全文
posted @ 2013-02-20 22:13 海 哥 阅读(229) 评论(0) 推荐(0) 编辑