数据结构考试知识点大全
数据结构知识点繁多且庞杂,因此在期末考试中找到考点重点是重中之重,要看具体自己的老师讲得侧重点,
本文是郑州大学22级数据结构考试重难点解析,22级的考试试题主要是以大题形式出现,会有应用题和编程题
如果有用的话希望点一下关注哟,之后会出相关专业课的知识点和考点哟
快速排序(必考)
先来说我们考得题型,是先给一个数字序列,要求写出每一趟排序过后的序列,直到该序列有序
找一个中枢轴(一般是序列的第一个元素),然后进行比较,比它小的数放左边,比它大的数放右边,完成后,该数组被分成两个部分再分别对两个部分进行排序。实验结果表明**😗* 就平均计算时间而言, 快速排序是所有内排序方法中最好的一个。
写出第一趟快速排序结果是很重要的,就是有两个指针low和high,分别指向序列的首端和末端,如果low指向的元素大于pivot(如果小于,low++),则将给low指向的元素放到high指向的元素上面来,之后转到high指针,开始判断high指针指向的元素和枢轴的大小,如果high指针指向的元素小于枢轴,则将给high指向的元素放到low指向的元素上面来,(如果大于,high++)

哈夫曼树(必考)
题型是大题,要求构建一颗哈夫曼树,然后给出编码,几乎必考
这一部分是很简单的,
- 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。
- 哈夫曼树是带权路径长度最短的树,权值(可以理解为出现的概率)较大的结点离根较近。(百度百科)
- 结点的带权路径长度: 从树的根到该结点的路径长度 X 该结点上权值。
- 从而得出哈夫曼树的构造:哈夫曼编码的核心思想是让权值大的叶子离根最近。
- 哈夫曼算法采用的贪心策略是每次从树的集合中取出没有双亲且权值最小的两棵树作为左右子树,构建一棵新树,新树根节点的权值为其左右孩子节点权值之和,并将新树插入树的结合中。** 没有双亲,权值最小,相当于是在逐渐组建一颗树,逐渐使这棵树的叶子节点变成将所要编码的字符,将出现次数当成叶子节点权值
二叉树的非递归遍历,层序遍历,求深度等编程题
22年考的是二叉树层序遍历的编程题,就是利用队列来进行二叉树的遍历,写出它的代码,以下是它的代码思想:
①初始化设置一个队列。
②把根结点指针入队列。
③当队列非空时,循环执行步骤(a) 到步骤©:
(a)出队列取得一个结点指针,访问该结点;
(b)若该结点的左子树非空,则将该结点的左孩子指针入队列;
©若该结点的右子树非空,则将该结点的右孩子指针入队列。
④结束。
然后就是我自己整理的可能关于二叉树编程题的考点,这些重点老师PPT里应该有
1、求二叉树第K个元素的是什么的代码,e是要输出的值
bool count_k(BiTree *T ,int *k,char *e){
if(!T||*k<=0) return false;//如果该树为空的话,
(*k)--;
if(*k==0){
*e=T->data;return true;
}//如果相等就返回
if(count_k(T->lchild,k,e)) return true;//如果找到了就结束了
else return count_k(T->rchild,k,e);//如果找到了再向右找寻
}
计算叶子结点
int Countleaf(NODE *bt,int count){//计算叶子结点
if(bt!=NULL){//根节点不为空
if(bt->llink==NULL&&bt->rlink==NULL)//左右子树都为NULL 即该结点为叶子结点,count ++
count++;
count=Countleaf(bt->llink,count);// 不为空,先去遍历左子树,再次调用Countleaf函数。
count=Countleaf(bt->rlink,count);
}
return count;}
非递归中序遍历(可能会考先序或者后序)
// 非递归中序遍历
void NiceInOrder(BtNode* ptr)
{
if (ptr == NULL) return;
std::stack<BtNode*> st;
while (ptr != NULL || !st.empty())
{
while (ptr != NULL)
{
st.push(ptr);
ptr = ptr->leftchild;
}
ptr = st.top(); st.pop();
cout << ptr->data << " ";
ptr = ptr->rightchild;
}
cout << endl;
}
求树的深度
int depth(BinartTree *T){
int depthl=0,depthr=0;
depthl=depth(T->lchild);
depthr=depth(T->rchild);
return (depthl>depthr?depthl:depthr);
}
B树的画图(增添和删除节点)
22级的考试题考到了B树的画图,就是给出若干结点,要求我们画出一颗3阶B树
但是大概率考插入和删除结点,在这里推荐解析的很清楚的博客
图的算法应用题
**在图的算法中,22级的考试考到了拓扑排序,题型是应用题,就是给出AOV图,然后让你写出拓扑有序序列,,另外考得是给出AOE网,写出关键路径,给出活动的最早(或者最迟)开始时间,以及事件的最早(或者最迟)开始时间,也同样是应用题的形式,大概就像下面的形式
这仅仅是22年的考题,也有可能考图的最短路径和最小生成树的算法。但是可能大概率是考应用题,不会考编程题,考编程题大概率是考队列,栈,以及二叉树的应用。
队列和栈(编程题)
22级考的编程题要求同时用到列队和栈两种数据结构,来完成题目,当时的具体要求我忘了,但是还是很简单的,就是用到了队列和栈的基本操作,只要掌握了这些操作语言还是很简单的
我把具体的操作来列下来,就在ppt 中,栈主要是pop和push操作
排序算法的改进
我们最后一道大题是排序算法的改进,就是将原本的选择排序(记不太清了,反正时间复杂度是O(n*n),空间复杂度是O(1)),改进成时间和空间复杂度都是O(1)的算法,我当时是不会的。是比较难的,然后我去问问,挖个坑。
插入排序和交换排序以及选择排序
22级考试中考的是插入排序的希尔排序,在应用题中考到的, 以填空的形式考到了希尔排序的过程。以及考到了其他排序算法的时间复杂度。
在下面给出各种排序算法的复杂度
排序,交换排序,选择排序
22级考试中考的是插入排序的希尔排序,在应用题中考到的, 以填空的形式考到了希尔排序的过程。以及考到了其他排序算法的时间复杂度。
在下面给出各种排序算法的复杂度