美文网首页
2018-08-09

2018-08-09

作者: eva_lilizhang | 来源:发表于2018-08-09 11:35 被阅读6次

    字符串反转

    void char_reverse (char *cha) {
    
        // 定义头部指针
        char *begin = cha;
        // 定义尾部指针
        char *end = cha + strlen(cha) -1;
        
        
        while (begin < end) {
            
            char temp = *begin;
            *(begin++) = *end;
            *(end--) = temp;
        }
    }
    
    char ch[] = "Hello World";
    
    char_reverse (ch);
    
    // 有兴趣的可以验证
    printf ("%s",ch);
    

    链表反转(头差法)

    .h声明文件
    #import 
    
    // 定义一个链表
    struct Node {
        int data;
        struct Node *next;
    };
    
    @interface ReverseList : NSObject
    
    // 链表反转
    struct Node* reverseList(struct Node *head);
    
    // 构造一个链表
    struct Node* constructList(void);
    
    // 打印链表中的数据
    void printList(struct Node *head);
    
    @end
    1..m实现文件
    #import "ReverseList.h"
    
    @implementation ReverseList
    
    struct Node* reverseList(struct Node *head)
    {
        // 定义遍历指针,初始化为头结点
        struct Node *p = head;
        
        // 反转后的链表头部
        struct Node *newH = NULL;
        
        // 遍历链表
        while (p != NULL) {
            
            // 记录下一个结点
            struct Node *temp = p->next;
            // 当前结点的next指向新链表头部
            p->next = newH;
            // 更改新链表头部为当前结点
            newH = p;
            // 移动p指针
            p = temp;
        }
        
        // 返回反转后的链表头结点
        return newH;
    }
    
    struct Node* constructList(void)
    {
        // 头结点定义
        struct Node *head = NULL;
        // 记录当前尾结点
        struct Node *cur = NULL;
        
        for (int i = 1; i < 5; i++) {
            struct Node *node = malloc(sizeof(struct Node));
            node->data = i;
            
            // 头结点为空,新结点即为头结点
            if (head == NULL) {
                head = node;
            }
            // 当前结点的next为新结点
            else{
                cur->next = node;
            }
            
            // 设置当前结点为新结点
            cur = node;
        }
        
        return head;
    }
    
    void printList(struct Node *head)
    {
        struct Node* temp = head;
        while (temp != NULL) {
            printf("node is %d \n", temp->data);
            temp = temp->next;
        }
    }
    
    @end
    

    有序数组合并

    .h声明文件
    #import 
    
    @interface MergeSortedList : NSObject
    // 将有序数组a和b的值合并到一个数组result当中,且仍然保持有序
    void mergeList(int a[], int aLen, int b[], int bLen, int result[]);
    
    @end
    1..m实现文件
    #import "MergeSortedList.h"
    
    @implementation MergeSortedList
    
    void mergeList(int a[], int aLen, int b[], int bLen, int result[])
    {
        int p = 0; // 遍历数组a的指针
        int q = 0; // 遍历数组b的指针
        int i = 0; // 记录当前存储位置
        
        // 任一数组没有到达边界则进行遍历
        while (p < aLen && q < bLen) {
            // 如果a数组对应位置的值小于b数组对应位置的值
            if (a[p] <= b[q]) {
                // 存储a数组的值
                result[i] = a[p];
                // 移动a数组的遍历指针
                p++;
            }
            else{
                // 存储b数组的值
                result[i] = b[q];
                // 移动b数组的遍历指针
                q++;
            }
            // 指向合并结果的下一个存储位置
            i++;
        }
        
        // 如果a数组有剩余
        while (p < aLen) {
            // 将a数组剩余部分拼接到合并结果的后面
            result[i] = a[p++];
            i++;
        }
        
        // 如果b数组有剩余
        while (q < bLen) {
            // 将b数组剩余部分拼接到合并结果的后面
            result[i] = b[q++];
            i++;
        }
    }
    
    @end
    

    查找第一个只出现一次的字符(Hash查找)

    1..h声明文件
    #import 
    
    @interface HashFind : NSObject
    
    // 查找第一个只出现一次的字符
    char findFirstChar(char* cha);
    
    @end
    1..m实现文件
    #import "HashFind.h"
    
    @implementation HashFind
    
    char findFirstChar(char* cha)
    {
        char result = '\0';
        
        // 定义一个数组 用来存储各个字母出现次数
        int array[256];
        
        // 对数组进行初始化操作
        for (int i=0; i<256; i++) {
            array[i] =0;
        }
        // 定义一个指针 指向当前字符串头部
        char* p = cha;
        // 遍历每个字符
        while (*p != '\0') {
            // 在字母对应存储位置 进行出现次数+1操作
            array[*(p++)]++;
        }
        
        // 将P指针重新指向字符串头部
        p = cha;
        // 遍历每个字母的出现次数
        while (*p != '\0') {
            // 遇到第一个出现次数为1的字符,打印结果
            if (array[*p] == 1)
            {
                result = *p;
                break;
            }
            // 反之继续向后遍历
            p++;
        }
        
        return result;
    }
    
    @end
    

    查找两个子视图的共同父视图

    .h声明文件
    #import 
    #import 
    @interface CommonSuperFind : NSObject
    
    // 查找两个视图的共同父视图
    - (NSArray *)findCommonSuperView:(UIView *)view other:(UIView *)viewOther;
    
    @end
    1..m实现文件
    #import "CommonSuperFind.h"
    
    @implementation CommonSuperFind
    
    - (NSArray  *)findCommonSuperView:(UIView *)viewOne other:(UIView *)viewOther
    {
        NSMutableArray *result = [NSMutableArray array];
        
        // 查找第一个视图的所有父视图
        NSArray *arrayOne = [self findSuperViews:viewOne];
        // 查找第二个视图的所有父视图
        NSArray *arrayOther = [self findSuperViews:viewOther];
        
        int i = 0;
        // 越界限制条件
        while (i < MIN((int)arrayOne.count, (int)arrayOther.count)) {
            // 倒序方式获取各个视图的父视图
            UIView *superOne = [arrayOne objectAtIndex:arrayOne.count - i - 1];
            UIView *superOther = [arrayOther objectAtIndex:arrayOther.count - i - 1];
            
            // 比较如果相等 则为共同父视图
            if (superOne == superOther) {
                [result addObject:superOne];
                i++;
            }
            // 如果不相等,则结束遍历
            else{
                break;
            }
        }
        
        return result;
    }
    
    - (NSArray  *)findSuperViews:(UIView *)view
    {
        // 初始化为第一父视图
        UIView *temp = view.superview;
        // 保存结果的数组
        NSMutableArray *result = [NSMutableArray array];
        while (temp) {
            [result addObject:temp];
            // 顺着superview指针一直向上查找
            temp = temp.superview;
        }
        return result;
    }
    
    @end
    

    无序数组中的中位数(快排思想)

    .h声明文件
    #import 
    
    @interface MedianFind : NSObject
    
    // 无序数组中位数查找
    int findMedian(int a[], int aLen);
    
    @end
    1..m实现文件
    #import "MedianFind.h"
    
    @implementation MedianFind
    
    //求一个无序数组的中位数
    int findMedian(int a[], int aLen)
    {
        int low = 0;
        int high = aLen - 1;
        
        int mid = (aLen - 1) / 2;
        int div = PartSort(a, low, high);
        
        while (div != mid)
        {
            if (mid < div)
            {
                //左半区间找
                div = PartSort(a, low, div - 1);
            }
            else
            {
                //右半区间找
                div = PartSort(a, div + 1, high);
            }
        }
        //找到了
        return a[mid];
    }
    
    int PartSort(int a[], int start, int end)
    {
        int low = start;
        int high = end;
        
        //选取关键字
        int key = a[end];
        
        while (low < high)
        {
            //左边找比key大的值
            while (low < high && a[low] <= key)
            {
                ++low;
            }
            
            //右边找比key小的值
            while (low < high && a[high] >= key)
            {
                --high;
            }
            
            if (low < high)
            {
                //找到之后交换左右的值
                int temp = a[low];
                a[low] = a[high];
                a[high] = temp;
            }
        }
        
        int temp = a[high];
        a[high] = a[end];
        a[end] = temp;
        
        return low;
    }
    
    @end
    

    冒泡排序

        int a[10] = {3,2,1,4,5,0,6,7,8,9};
        
        int temp = 0;
    
        for (int i = 0; i < 10 -1; i++) {
            
            for (int j = 0; j < 10 - i - 1; j++) {
                
                if (a[j] > a[j+1]) {
                    
                    temp = a[j+1];
                    a[j+1] = a[j];
                    a[j] = temp;
                }
            }
        }
        
        for (int i = 0; i < 10; i++)
        {
            printf("%i",a[i]);
        }
    

    相关文章

      网友评论

          本文标题:2018-08-09

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