数据结构笔试题二

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、什么是二分法查找,编程实现。
   二分法查找针对有序数列。  
和中间的比较,小于往左,大于往右。

时间: 2024-10-09 07:40:24

数据结构笔试题二的相关文章

某支付公司笔试题二

题目:用java编写一段程序采用选择排序法对数组array = {25,15,42,16,12,36}进行由小到大排序. 1.选择排序法 该排序法的思想是每次从当前元素开始往后查找最小元素,将最小与当前元素进行位置互换.选择排序和冒泡排序相比优势在于交换次数减少. // 时间复杂度n(n-1)/2,即O(n^2) public static void selectSort(int[] array){ int k,tmp,len; len=array.length; for(int i=0;i<l

Java常见笔试题&lt;二&gt;

1.静态代码块.非静态代码块.构造函数的输出顺序 情况一:没有继承父类时 1 class HelloA { 2 3 public HelloA() { 4 System.out.println("I'm A class"); 5 } 6 7 static { 8 System.out.println("static A"); 9 } 10 11 { 12 System.out.println("A"); 13 } 14 15 public sta

数据结构笔试题三

[微笑天使收集整理QQ:84024257] 一.选择题(每小题2分,共8分) 1. 若需要利用形参直接访问实参,则应把形参变量说明为( )参数. A. 指针 B. 引用C. 值 2. 在一个单链表HL中,若要在指针q所至结点的后面插入一个由指针p所指向的结点,则执行(). A. q->next=p->next; p->next=q;B. p->next=q->next; q=p;C. q->next=p->next; p->next=q;D. p->n

数据结构笔试题一

第一部分 选择题 (共20分) 一.单项选择题 (本大题共8小题,每小题2分,共16分)   1.某算法的空间花费s(n)=100nlog2n+0.5n1.5+1000n+2000,其空间复杂度为 [    ] A.O(1)                       B.O(n)     C.O(n1.5)                    D.O(nlog2n) 2.在单项链表中删除一个指定结点的后继的时间复杂度为 [    ] A.O(n)                      

Java笔试题二:读程序

1 public class SopResult { 2 3 public static void main(String[] args) { 4 5 int i = 4; 6 System.out.println("The result is: " + ((i > 4) ? 9.99 : 9)); 7 } 8 9 } 读程序,输出结果:The result is: 9.0 分析可知,本程序相当于: 1 public class SopResult { 2 3 public st

常见笔试题(二)

6.用obj-c写一个冒泡排序 -(void)mySort:(NSMutableArray *)mutArray { id tmpObj = nil; unsigned long flag = mutArray.count-1;//flag :最大脚标 while (flag > 0) { int k = flag; flag = 0; for (int j = 0 ; j < k ; j++) { int order = NSOrderedAscending;// 或 NSOrderedDe

android笔试题二

1.android系统架构: Linux内核--标准库--Framework层--应用层 Linux层包括:Android系统的核心服务,硬件驱动,进程管理,系统安全等等 2.UI界面框架图: 3.View的测量模式:EXACTLY,AT_MOST,UNSPECIFIED. 4.自定义View与ViewGroup的时候应该注意什么? 自定义ViewGroup的时候应该注意重写onLayout来控制子类显示的位置. 如果需要支持wrap_content还要重写onMeasure(). 自定义Vie

2016去哪网笔试题二

第二道题目的题意大概是给定三个无序数组A,B,C:这三个数组中各自的数字没有重复,但是可能存在同时在三个数组中的数字. 如果有请按从小到大的顺序输出,如果没有不输出. 1 #include <iostream> 2 #include <vector> 3 #include <stdio.h> 4 #include <stdlib.h> 5 //#include <cstdio.h> 6 #include <string> 7 #inc

Java工程师笔试题整理[校招篇]

隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打好Java基础:如何一步一步的学Java - 学习编程 - 知乎专栏.然后再来看一下练习一下各大厂的面试笔试题目. 如果以下内容满足不了你,你还可以去看这篇: 2016校招编程题汇总 - 学习编程 - 知乎专栏 进入主要内容(主要内容整理来自牛客网:牛客网)(以下内容按照各大公司进行划分,对每一公司按照年份进行划分,如果想想下载以下内容,可以