linux c/c++ 面试题目整理(二)

作者: cpp加油站 | 来源:发表于2017-04-20 13:34 被阅读177次

    11、编写一个二分查找函数,下界为low,上界为high

    递归法:

    template<class elemtype>
    int BSearch(elemtype a[], elemtype x,int low,int high)
    {
        int mid;
        if (low > high)
            return -1;
        mid = (low + high)/2;
        if (x == a[mid])
        {
            return mid;
        }
        if (x < a[mid])
        {
            return BSearch(a, x, low, mid-1);
        }
        else
        {
            return BSearch(a,x, mid+1, high);
        }
    }
    

    非递归法:

    int BSearch(elemtype a[],elemtype key, int n)
    {
        int low,high,mid;
        low = 0;
        high = n-1;
        while(low < high)
        {
            mid = (low + high)/2;
            if (a[mid] == key)
                return mid;
            else if(a[mid] < key)
                low = mid+1;
            else
                high = mid-1;
        }
        return -1;
    }
    

    注意:二分查找算法前提是已经排好序的。

    12、字符串逆序方法

    • 一是原始字符串的头和尾进行交换;
    • 二是另外开辟一个字符串空间, 将原始字符串逆序保存到新的字符串末;

    13、链表反转(逆序)

    //常规方法:
    struct Node
    {
        int data;
        struct Node* next;
    }
    void reverse(Node* &head)
    {
        if (head == NULL)
            return;
        Node* pre, *cur, *ne;
        pre = head;
        cur = head->next;
        while(cur)
        {
            ne = cur->next;
            cur->next = pre;
            pre = cur;
            cur = ne;
        }
        head->next = NULL;
        head = pre;
    }
    //递归方法:
    Node* reverse(Node* head)
    {
        if (p == NULL || p->next == NULL)
        {
            return head;
        }
        Node* newHead = reverse(head->next);
        head->next->next = head;
        head->next = NULL;
        return newHead;
    }
    

    14、什么是平衡二叉树?

    左右子树都是平衡二叉树, 且左右子树的深度差值的绝对值不大于1.

    15、堆栈溢出一般是什么原因造成的?

    数组越界访问

    16、当申请的内存资源没有及时释放而一直重复申请时,会出现什么情况?

    内存泄露,内存被占用会一直增长。

    17、写出float x与“零值”比较的语句

    if (x > -0.000001 && x<0.000001)

    18、Internet采用哪种网络协议?该协议的主要层次结构是什么?

    tcp/ip协议
    主要层次结构采用5层结构:应用层/传输层/网络层/数据链路层/物理层
    应用层协议:telnet,ftp,http
    传输层协议:tcp,udp
    网络层协议:ip,icmp,igmp
    (7层结构:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)

    19、IP地址的编码分为哪两部分

    IP地址由两部分组成,网络号和主机号。 不过要和“子网掩码”按位与之后才能区别哪些是网络位,哪些是主机位。

    20、用户输入M、N值, 从1到N开始循环数数, 每次数到M就输出当前数据, 直到全部输出,写出C程序。

    这是约瑟夫方法,可使用循环链表,用取余操作数,也可用数组,下面是c语言的数组程序:

    void yuesef(int M,int N)
    {
        int* p = new int[N];
        int s = 0,r = 0;
        for(int i=0;i<N;i++)
        {
            p[i] = 1;
        }
        for(int i=0;i<N;i++)
        {
            if (p[i] == 1)
                s++;
            if (s == M)
            {
                printf(“%d\n”,i+1);
                p[i] = 0;
                r++;
                s = 0;
            }
            if (I == N-1 && r != N-1)
            {
                I = 0;
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:linux c/c++ 面试题目整理(二)

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