您的位置:首页 > 理论基础 > 数据结构算法

数据结构笔试题目

2012-10-12 23:03 302 查看
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、排序二叉树插入一个节点或双向链表的实现

排序二叉树:左小于根,根小于右。左右又分别是排序二叉树。

前序遍历:根左右

中序遍历:左根右

后序遍历:左右根

排序二叉树插入一个结点:大于左,往右找,小于右往左找,递归实现。

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;

}

}

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

非递归:

inverse(link* head){

link p,q,r;

p = head;

q = p->next;

r = q->next;

head->next=null;

while(p->next){

q->next=p;

p=q;

q=r;

if(r==null){

head=q;

break;

}

else

r=r->next;

}

}

递归:

link* inverse(link* L){

if(!L)||(!L->next){

return L;

}

link h = inverse(L->next);

L->next->next=L;

return h;

}

4、 试编写3个函数实现  

(1)建立一个双向链表  

(2)插入一个节点  

(3)删除一个节点



5、二叉树的前序遍历

public void preOrder(BinararyTree b){

printElement(b);

preOrder(b.left());

preOrder(b.right());

}

6、下面哪种排序法对12354最快--插入排序应该最快。其次是快速排序,归并排序。

a quick sort

b.buble sort

c.merge sort

快速排序:有一个划分元素,该元素左边的所有元素都小于它,右边的所有元素都大于它。

冒泡排序:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。这样一趟之后,最小的数就放在了最后面。

归并排序:将两个有序的数列合并成一个

希尔排序:基本思想:将整个无序序列分割成若干小的子序列分别进行插入排序。序列分割方法:将相隔某个增量h的元素构成一个子序列。在排序过程中,逐次减小这个增量,最后当h减到1时,进行一次插入排序,排序就完成。增量序列一般采用:ht=2t-1,1≤t≤[log2n],其中n为待排序序列的长度。

堆排序:

基数排序:

7、哪种结构,平均来讲,获取一个值最快 b

a. binary tree

b. hash table

c. stack

8、一个二叉树的三种遍历方法的输出结果

前序,中序,后序。分别指根在前,中,后。答案略。

9、给两个变量,如何找出一个带环单链表中是什么地方出现环的

两个指针,一个步长为1,一个步长为2,重合的地方就是环出现的地方。

10、哈希表和数组的定义,区别,优缺点

哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。

11、什么是二分法查找,编程实现。

二分法查找针对有序数列。

和中间的比较,小于往左,大于往右
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: