以图明志

编程思想

面向对象的形式,面向过程的思想

从根本上理解面向对象
随着PHP对OOP(面向对象编程)支持的增强以及程序设计思想的发展,越来越多的PHP程序员走进了OOP的世界。通过简单的学习,大多数程序员都能快速的掌握OOP编程的基本技能。程序员们所写的代码里class,new等字符串也越来越多。但是作为程序员的你,是否陷入了一种OO形式,PO思想的编程陷阱呢?

数据结构

寻找二叉树两个节点的最近公共祖先

最近公共祖先问题
算法思想:这道题的关键在于每个节点中包含指向父节点的指针,这使得程序可以用一个简单的算法实现。首先给出p的父节点p->parent,然后将q的所有父节点依次和p->parent作比较,如果发现两个节点相等,则该节点就是最近公共祖先,直接将其返回。如果没找到相等节点,则将q的所有父节点依次和p->parent->parent作比较......直到p->parent==root。

数据结构

一次创新工场的面试题

还是考数据结构和基础
一次创新工场的面试题,记录下,有空把它们每道题详细透彻地写成博客,也是学习的一种好方法。 如何计算两个链表的公共长度?写出快速排序的算法和代码。如何判断一个链表中是否出现了循环链表?用两个栈模拟实现队列,至少完成入队、出队及计算长度的方法。

计算机算法

一道PHP冒泡排序算法笔试题

PHP实现一个有冒泡排序的类
一道PHP笔试题:请使用伪语言结合数据结构冒泡排序法对以下一组数据进行排序 10 2 36 14 10 25 23 85 99 45。关于冒泡排序大家应该都非常熟悉了,原理就不多说了,这里只做简单记录。下面是参考代码。

数据结构

用C语言写一个单向链表

最简单的链表的实现
链表作为线性表的一种实现方式,有插入删除方便的优点,但不能对节点进行随机访问。同时,要想知道某一节点的前驱节点,必须从头节点开始遍历才能找到,这体现了单链表的方向性。下面用C语言简单实现一个单向链表。

数据结构

链表基本知识介绍

从概念上理解链接Linked list
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。

编程思想

怎样的代码才是健壮的?

我们必须谨记的三个原则
不管是在面向过程时代,还是在面向对象时代,任何一个功能都是由若干函数协作来实现的。一个函数由输入、处理和输出组成。实现这个函数的代码段都假定了输入的参数已经满足了若干规则,在执行这个函数时,函数的代码会拿到输入的参数然后执行代理逻辑。下面我们就来看一个函数的代码。

面向对象技术

结构化程序设计与面向对象

区别与优缺点罗列
结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的。转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用“很随意”的流程线来描述这种转移功能。如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错。

编程思想

提高编程技术的几个修炼方向

提升抽象层次有多种手段
编译技术一向被认为是软件开发这个以工程和实践为主的学科当中真正的"火箭科技"。一个程序员,当他掌握了基本的编程技能,并且具备一些实践经验以后,如果要求在编程技术上进一步深造,则无非有三个方向:其一是钻研高超的算法;其二是深入计算机和网络体系结构;其三则是提升编程的抽象层次。

计算机算法

常见笔试题字符串复制strcpy()的思路

一个问题的多个误区
题目:已知strcpy函数的原型是char * strcpy(char * strDest, const char * strSrc);不调用库函数,实现strcpy函数。解释为什么要返回char *。不检查指针的有效性,说明答题者不注重代码的健壮性。检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc))。

编程思想

如何快速学习一门新的编程语言

学习一种新的编程语言所要做的15个练习
怎样快速学习一门新的编程语言?本文提供了一个行之有效的方法:看几页程序说明,然后就开始实践吧~虽然你也许已经可以使用很多种编程语言进行工作,但工作常常会要求快速掌握一门新的语言。你可以不去选择去阅读几百页的程序手册,而是快速浏览10到15页的教程,并把程序语言的语法参考说明印在小卡片上。

计算机算法

图解JavaScript合并排序

JavaScript也可以做算法练习
合并排序是一个O(nlogn)的算法,其基本思想就是一个分治的策略,先进行划分,然后再进行合并,下面举个例子。有这样一组数据,{5,4,1,22,12,32,45,21},如果对它进行合并排序的话,首先将它从中间分开,这样,它就被分成了两个数组{5,4,1,22} {12,32,45,21}。

编程思想

关于编程的一些经典话语

了解下名人们对编程的看法
Premature optimization is the root of all evil! - Donald Knuth过早的优化是万恶之源。Walking on water and developing software from a specification are easy if both are frozen - Edward V Berard在水里行走和以一个需求规格进行软件开发,有一点是相同的,那就是如果水或需求都被冻住不了,那么行走和软件开发都会变得容易。

编程思想

轻量灵巧的极限编程(XP)

软件开发过程--极限编程
ExtremeProgramming(极限编程,简称XP)是由KentBeck在1996年提出的。KentBeck在九十年代初期与WardCunningham共事时,就一直共同探索着新的软件开发方法,希望能使软件开发更加简单而有效。Kent仔细地观察和分析了各种简化软件开发的前提条件、可能行以及面临的困难。

数据结构

HashMap的存取之美

哈希表是很优秀的数据结构
HashMap是一种十分常用的数据结构,作为一个应用开发人员,对其原理、实现的加深理解有助于更高效地进行数据存取。本文所用的jdk版本为1.5。《Effective JAVA》中认为,99%的情况下,当你覆盖了equals方法后,请务必覆盖hashCode方法。默认情况下,这两者会采用Object的“原生”实现方式。

数据结构

数据在内存中是如何存储的

程序的内存存放区域划分
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。
19 / 22 首页 < Prev 17 18 19 20 21 Next > 尾页 页码: