• 数据结构笔试题二


    1、C++编成求二叉树的深度;

    int binTreeDepth(link *head){
       int depthl=0,depthr=0;
       if(head==null)
                   return 0;
       else{
                  if ((head->left)!=null)
                         depthl = 1 + binTreeDepth(head->left);
                  if ((head->right)!=null)   
                         depthr = 1 + binTreeDepth(head->right);
                  return depthl>depthr?depthl:depthr;
       }
    }

    2、把一个链表反向(递归,非递归都写一遍)。

    递归:
    link* inverse(link* L){
        if(!L)||(!L->next){   
           return L;     
         }                                          //recursion exit
        link h = inverse(L->next);
        L->next->next=L;                  //inverse
        return h;
    }

    非递归:
    inverse(link* head){
         link p,q,r;
         p = head;       //head--------current node
         q = p->next;    //first node
         r = q->next;      //seconde node
         head->next=null;
         while(p->next){
           q->next=p;
           p=q;         //index current node one by one
           q=r;          //
           if(r==null){
              head=q;
              break;
           }
           else
              r=r->next;
         }
    }

    3、哪种结构,平均来讲,获取一个值最快 b
    a. binary tree
    b. hash table
    c. stack

    4、哈希表和数组的定义,区别,优缺点
    哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。 
    5、下面哪种排序法对12354最快--插入排序应该最快。其次是快速排序,归并排序。
    a quick sort
    b.buble sort
    c.merge sort
           快速排序:有一个划分元素,该元素左边的所有元素都小于它,右边的所有元素都大于它。
           冒泡排序:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。这样一趟之后,最小的数就放在了最后面。
           归并排序:将两个有序的数列合并成一个
           希尔排序:基本思想:将整个无序序列分割成若干小的子序列分别进行插入排序。序列分割方法:将相隔某个增量h的元素构成一个子序列。在排序过程中,逐次减小这个增量,最后当h减到1时,进行一次插入排序,排序就完成。增量序列一般采用:ht=2t-1,1≤t≤[log2n],其中n为待排序序列的长度。
          堆排序:
          基数排序:

    6、排序二叉树插入一个节点或双向链表的实现
    排序二叉树:左小于根,根小于右。左右又分别是排序二叉树。
    前序遍历:根左右    中序遍历:左根右       后序遍历:左右根
    排序二叉树插入一个结点:大于左,往右找,小于右往左找,递归实现。
    public void insert(Root r, element e){
              if(r>e){
                if(r.left!=null){
                   insert(r.left,e);
                }
                else
                   r.left = e;
              }else if(r<=e){
                if(r.right!=null){
                   insert(r.right, e);
                }
                else 
                   r.right = e;
              }
    }

    7、给两个变量,如何找出一个带环单链表中是什么地方出现环的
       两个指针,一个步长为1,一个步长为2,重合的地方就是环出现的地方。

    8、什么是二分法查找,编程实现。
       二分法查找针对有序数列。   和中间的比较,小于往左,大于往右。

  • 相关阅读:
    Linux小命了(6)cd
    Linux小命令(5)mkdir
    性能测试(1)-开篇杂谈
    Linux小命令(4)ls
    Linux小命令(3)cat
    Linux小命令(2)man
    机器学习-学习方法
    flask-cache
    mysql 常用时间函数
    发现变化,拥抱变化
  • 原文地址:https://www.cnblogs.com/kb342/p/3749343.html
Copyright © 2020-2023  润新知