栈和队列,有哪些性质,他们之间有哪些区别,以及他们在非线性数据结构中的应用
【答案】栈和队列都是操作受限的线性表,栈只能在一端(栈顶)进行进出的线性表,而队列是只能在一端(队尾)插入,在另一端(队头)进行删除的线性表,树的先中后序遍历可以通过栈来实现,从而避免递归操作,树的层次遍历,可以通过循环队列实现。
栈 | 队列 | |
线性表 | 受限 | 受限 |
线性表进出 | 一端(栈顶) | 一端插入另一端删除 |
实现 | 树的先中后续遍历(避免递归操作) | 树的层次遍历(循环队列) |
拓展栈和堆的区别
栈区:由编辑器自动分配释放,存放函数的参数值,局部变量的值等(基本类型值)。
堆区:由程序员分配释放,若程序员不释放,程序结束时可能有OS回收(引用类型值)。
栈(数据结构):一种先进后出的数据结构。
堆(数据结构):堆可以被看成是一棵树,如:堆排序。
栈 | 堆 | |
数据结构 | 一种先进后出的数据结构 | 堆可以看成是一棵树 |
区 | 编辑器自动分配释放 | 手动释放 |
对于给定的数组
a | b | c | d | e | f |
画出该数组所对应的二叉树,然后将该二叉树转换成树或者森林
【答案】
如何使用两个栈,使实现一个队列的功能
【答案】 假设两个栈 A 和B,且都为空。
可以认为栈 A 为提供入队列的功能,栈 B 提供出队列的功能。
入队列: 入栈 A
出队列:
1 如果栈B 不为空,直接弹出栈 B 的数据。
2 如果栈 B 为空,则依次弹出栈 A 的数据,放入栈 B 中,再弹出栈 B 的数据。
已知一组关键字为{26,36,41,38,44,15,68,12,6,51,25},用线性探测法解决冲突,装填因子a=0.75,Hash函数为H(key)=key Mod P 。求最终存储结果和查找成功时的平均长度ASL1。
【答案】装填因子为a=0.75,表中元素个数为n=11,表长为n/a向上取整等于15
H(26)=11 H(36)=6 H(41)=11 H(38)=8 H(44)=14 H(15)=0 H(68)=8 H(12)=12 H(6)=6 H(51)=6 H(25)=10
p为不大于表长的最大素数,p=13,因此H(key)=Key Mod 13
ASL1=(1+7+1+2+1+2+5+1+2+2+1)/11=26/11
装填因子:a=n/m 其中n 为关键字个数(11),m为表长(14.66向上取整为15)。
对p的选择很重要,一般取素数或m
对于给定的序列{8,10,3,14,13,1,6,4,7}画出该序列依次插入产生的二叉搜索树
二叉搜索树(二叉排序树)
(1)若左子树不为空,则左子树上所有节点的值均小于或等于它的根节点的值。(2)若右子树不为空,则右子树上所有节点的值均大于或等于它的根节点的值。(3)左、右子树也分别为二叉搜索树。
写出下图的任意一种从结点A开始的深度优先搜索遍历
深度优先遍历简称DFS(Depth First Search)
广度优先遍历简称BFS(Breadth First Search)
【答案】A->F->H->G->E->C->D->B
对关键码序列28,16,32,12,60,2,5,72,进行快速排序,按从小到大的顺序进行,则第一趟排序的结果为。
【答案】5,16,2,12,28,60,32,72
这种题怎么做呢~
(1)首先从这组数据中取中间值枢纽元素(先移出去),比如2,5,12,16,28,32,60,72(枢纽元素是可以随便选的,不是指定的)
(2)i从最左边开始,j从最右边开始,当i所对应的值>28同时j所对应的值<28,则i和j对应的值互换
序列 | 16 | 32 | 12 | 60 | 2 | 5 | 72 |
i和j | i | j |
互换后
序列 | 16 | 5 | 12 | 60 | 2 | 32 | 72 |
i和j | i | j |
再移动i和j最后生成
序列 | 16 | 5 | 12 | 2 | 60 | 32 | 72 |
i和j | j | i |
最终在i和j当中插入28
序列 | 16 | 5 | 12 | 2 | 28 | 60 | 32 | 72 |
i和j | j | i |
有n个结点,的无向连通图G,证明他至少有n-1条边,且无向连通图G必定能转成树。
【答案】任取一个结点为起始结点,每有一个顶点加入图中,就至少会生成一条边,因为图是连通的,所以n个顶点需要至少需要n-1条边的连接。同时当图中只有n-1条边时,每个结点都只可能与一个结点相连,一定不会产生环,因此n个结点n-1条边的无向图一定是一颗树。