总结

作者: woniu | 来源:发表于2021-05-23 21:43 被阅读0次

    一、常用的设计模式

    1、代理模式

    应用场景:当一个类的某些功能需要由别的类实现,但是又不确定具体是哪个类实现。
    优势:解耦合
    敏捷原则:开放-封闭原则
    例子:
    tableview、自定义代理。

    2、观察者模式

    应用场景:一般为model层对controller和view进行的通知方式,不关心谁去接收,只负责发布信息。
    优势:解耦合
    敏捷原则:接口隔离原则,开放-封闭原则
    例子:
    通知中心、KVO

    3、单利模式

    应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。
    优势:使用简单,延时求值,易于跨模块
    敏捷原则:单一职责原则
    例子:
    [UIApplication sharedApplication]

    4、工厂模式

    应用场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。
    优势:易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。
    敏捷原则:DIP依赖倒置原则

    二、算法

    1、字符串反转
    hello,word反转输出dorw,olleh。思路就是使用两个指针,一个指向头部begin,一个指向尾部end,遍历交换两个指针指向的字符,结束条件begin大于end。

    void char_reverse(char * cha) {
        // 指向第一个字符
        char * begin = cha;
    
        // 指向字符串末尾
        char * end = cha + strlen(cha) - 1;
    
        while (begin < end) {
            // 交换字符,同时移动指针
            char temp = *begin;
            *(begin++) = *end;
            *(end--) = temp;
        }
    }
    

    2、链表反转
    构建一个指定链表 1->3->8->5->4->2>11->14->12,并将其翻转打印。
    思路:头插法实现链表反转。定义一个新的head指针作为链表的头部指针,定义一个P指针遍历链表,将每次遍历到的元素插入到head指针后。

    3、链表和数组的区别
    数组:数组需要一块连续的内存空间来存储, 对内存要求比较高。
    链表:通过指针, 将一组零散的内存块串联起来使用。
    链表类型 :单链表、双向链表、循环链表、双向循环链表

    链表和数组的优缺点:
    时间复杂度:
    数组插入删除操作时间复杂度是 O(n)
    链表插入删除操作时间复杂度是 O(1)

    随机访问第 k 个元素
    数组 : O(1)
    链表: O(n)
    4、树和二叉树
    一种非线性结构。树是递归结构,在树的定义中又用到了树的概念。

    相关文章

      网友评论

          本文标题:总结

          本文链接:https://www.haomeiwen.com/subject/shgajltx.html