2012年5月14日

摘要: 前言 本文主要介绍面向对象(OO)程序设计,以维基百科的解释:面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。 简略来说,面向对象程序设计,指采用了面向对象的方法来进行程序设计。设计指一种把计划、规划、设想通过视觉传达出来的活动过程,它是一种创造性,积累性,实践性的工作。提笔写设计的文章是很有压力的,它不像深入一个知识点一样让人容易有的放矢,一千个读者心中有一千个哈姆雷特,同样的项目两个人来做架构肯定不一样。包.. 阅读全文
posted @ 2012-05-14 15:41 wenxp2006 阅读(194) 评论(0) 推荐(0) 编辑
 
摘要: 软件危机(Software Crisis)软件技术总是处于不断发展变化中,新工具、新技术相继产生。这就要求软件产业和软件工程师们不停的寻求软件设计和开发的新途径。由于日益增长的软件系统的复杂性和软件产业内部愈演愈烈的竞争,这种要求变得更加紧迫。为了克服这种要求带来的软件危机,必须解决以下问题:1、在系统设计中,如何表现问题的真实实体?2、如何以开放的界面(interface)设计系统?3、如何保证模块(module)的可重用性(reusability)和可扩展性(extensibility)?4、如何开发能够容忍(tolerant)未来可能的变化模块?5、如何提高软件的生产力和减少软件开销?6 阅读全文
posted @ 2012-05-14 15:40 wenxp2006 阅读(185) 评论(0) 推荐(0) 编辑
 
摘要: 上次大致分析了一下哈希表的链地址法的实现,今天来分析一下另一种解决哈希冲突的做法,即为每个Hash值,建立一个Hash桶(Bucket),桶的容量是固定的,也就是只能处理固定次数的冲突,如1048576个Hash桶,每个桶中有4个表项(Entry),总计4M个表项。其实这两种的实现思路雷同,就是对Hash表中每个Hash值建立一个冲突表,即将冲突的几个记录以表的形式存储在其中;废话不多说,上代码和图示基本能说明清楚:完整的代码,请看:这里,一位圣安德鲁斯大学的讲师:KRISTENSSON博客这里截取几个主要的片段:主要的数据结构:struct Pair { char *key; c... 阅读全文
posted @ 2012-05-14 15:33 wenxp2006 阅读(616) 评论(0) 推荐(1) 编辑
 
摘要: 一棵treap是一棵修改了结点顺序的二叉查找树,如图,显示一个例子,通常树内的每个结点x都有一个关键字值key[x],另外,还要为结点分配priority[x],它是一个独立选取的随机数。假设所有的优先级是不同的,所有的关键字也是不同的。treap的结点排列成让关键字遵循二叉查找树性质,并且优先级遵循最小堆顺序性质:1.如果v是u的左孩子,则key[v] < key[u].2.如果v是u的右孩子,则key[v] > key[u].3.如果v是u的孩子,则priority[u] > priority[u].这两个性质的结合就是为什么这种树被称为“treap”的原因,因为它同时具 阅读全文
posted @ 2012-05-14 15:31 wenxp2006 阅读(164) 评论(0) 推荐(0) 编辑
 
摘要: 数据结构的栈和堆首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。栈就像装数据的桶或箱子我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。堆像一棵倒过来的树而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实 阅读全文
posted @ 2012-05-14 15:19 wenxp2006 阅读(263) 评论(0) 推荐(0) 编辑
 
摘要: C语言关键字const是用来限定一个变量不允许被改变的修饰符,当它和指针结合的时候有下面2种情况:1、const放在*前面, const char *p1, p1表示指向常量的指针,这时p1本身可以变化,也就是可以重新指向,但是指向的内容不能修改const char *p1 = "hello";p1++; // okp1[0] = 'w'; // compile error2、const放在*后面, char* const p1, 意思是p1是一个const指针,指向一个字符串,这时p1本身不能改变但是指向的内容可以变化,也就是如下代码1 char* con 阅读全文
posted @ 2012-05-14 15:03 wenxp2006 阅读(249) 评论(0) 推荐(0) 编辑
 
摘要: 通常我们在iOS中发生什么事件时该做什么是由Delegate实现的,例如View加载完后会触发viewDidLoad。Apple 还为我们提供了另一种通知响应方式,那就是NSNotification,系统中(UIKeyboardDidShowNotification等) 以及某些第三方组件(例如ASIHTTPRequest的 kReachabilityChangedNotification等)。NSNotificationCenter较之于Delegate可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信。NSNotificationCenter的通信原理使用了观察者模式:1 阅读全文
posted @ 2012-05-14 14:17 wenxp2006 阅读(33492) 评论(0) 推荐(4) 编辑
 
摘要: @selector()基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取. 它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)?因此我们有如下代码。一.取得selector值. C函数指针 int add(int val) { return val+1; } int (* c_func)(int val); //定义一个函数指针变量 c_func = add ; //把函数addr地址直接赋给c_func object... 阅读全文
posted @ 2012-05-14 14:15 wenxp2006 阅读(5539) 评论(0) 推荐(1) 编辑
 
摘要: 1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 4.C++程序经常要 阅读全文
posted @ 2012-05-14 10:56 wenxp2006 阅读(191) 评论(0) 推荐(0) 编辑
 
摘要: 以下代码实现了在数组中存储、查询、删除字符串功能,存储的每个字符串最长长度为9(不包含字符串结束符\0)。新增用户输入字符串时,依次扫描以10字节为基数的数组空间,如果标志位为1,说明是有效字符,直到找到标志位为0的空间,然后存储。删除一个字符串之后,此字符串存放空间释放(标志置为0),可以存入用户输入的新字符串。查询字符串时,标志为1则显示,标志位为0则为已删除的无效字符串,不显示。?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 阅读全文
posted @ 2012-05-14 10:30 wenxp2006 阅读(156) 评论(0) 推荐(0) 编辑