一篇没什么用的文章
https://uw1oyc9oxw.feishu.cn/docs/doccnFvTE621Z4IcWwWpmQ0sXue
判断:TFTTFT TTFFTF
选择:DABCA CDBAB CCBDA A
程序填空:
- m = (low + high) / 2 ,high = m - 1,low = m - 1,j > high
- j <= high && i <= mid,R[i].key = R[j].key, i<= mid,j <= high
建议大家把近三年的数据结构考试的题目都看一下
判断题
- 对n个记录进行快速排序,最坏情况下的时间复杂度是 O ( n 2 ) O(n^2) O(n2).答案 T,快速排序平均时间复杂度为 n l o g n nlogn nlogn,所有的排序都可以退化为 O ( n 2 ) O(n^2) O(n2)
- 如果 e 是有权无向图 G 唯一的一条最短边,那么边 e 一定会在该图的最小生成树上。答案:T,Kruskal性质,每次选最小的一条边
- 数据元素是数据的最小单位。答案:F ,数据项是最小的
- 对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为 O ( 1 ) O(1) O(1)和 O ( N ) O(N) O(N);答案:F,时间写反了
- 在一个有向图中,所有顶点的入度与出度之和等于所有边之和的2倍。答案:T
- 在AOE网中一定只有一条关键路径. 答案:F,可以有多条
- 对任意一个图,从某顶点出发进行一次深度优先遍历或广度优先遍历,一定可以访问到图中所有顶点。答案:F
- 算法分析的两个主要方面是时间复杂度和空间复杂度的分析。 T
- Kruskal 算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生成最小生成树。F
- Prim 算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生成最小生成树。(1分) T
- 由顺序表和单链表表示的有序表均可使用二分查找法来提高查找速度。F
- 算法必须有输出,但可以没有输入 T
- 如果一个问题可以用动态规划算法解决,则总是可以在多项式时间内解决的F
- 只有当局部最优跟全局最优解一致的时候,贪心法才能给出正确的解.T
- 用动态规划而非递归的方法去解决问题时,关键是将子问题的计算结果保存起来,使得每个不同的子问题只需要被计算一次。子问题的解可以被保存在数组或哈希散列表中 T
- 任何一个递归过程都可以转换成非递归过程。T
- 在活动选择问题(Activity Selection Problem)中,令 S 为活动的集合。以“每次收集最迟开始的活动”为贪心原则,可以正确找到 S 中相互兼容活动的最大规模的子集合。T
选择题:
-
队列:先进先出,栈:先进后出 -
一条边两个点,也就是两个度 -
把图画出来,一个一个排除,DFS
- n ∗ ( n − 1 ) 2 \frac{n*(n-1)}{2} 2n∗(n−1),n = 6
程序填空题
- 本题目要求以头插法建立单链表。
函数题
6-11 背包问题 (10 分)
- 这个题有点像月饼那个题,7-45.这个和一般的背包问题不太一样
6-12 邻接矩阵存储图的深度优先遍历 (20 分)
6-14 实现基于邻接矩阵表示的深度优先遍历 (20 分)
6-15 有序数组的插入 (20 分)
6-16 单链表插入排序 (15 分)
6-18 拓扑排序 (10 分)
这个很重要,但是考的概率不大,这个题可以不会做.但是一定要知道拓扑排序的性质,首先有向无环图才有拓扑排序,前提这个图联通。拓扑排序算法思想:首先记录每个点的入度,将入度为0的点加入到栈(或者队列),然后每次遍历其相邻的边,让其临边的入读减1.直到栈为空为止
6-21和6-22这两个会一个就行
6-23 二分查找
- 这个必须得会
6-24 求自定类型元素序列的中位数 (25 分)
- 如果你会希尔排序,这个题就能得到满分
6-26 划分整数数组 (20 分)
- 这个是一个考研题,得非常理解快速排序。这个题有些难。建议不看了。虽然是考研题
6-27 判断两棵二叉树是否同构(递归法) (10 分)
6-31 KMP算法 (15 分)
- 这个是个重点,最好自己做一下那个编程题
6-35 最长公共子序列 (10 分)
- 老师自己出的题目
6-43 回溯法求解装载问题 (15 分)
- 这个题也不好弄,建议看看
6-46 最短路径(队列式分枝限界法) (10 分)
- 这个考察的SPFA,看不看都行
编程题
题目在题目集没找到,仅供参考
#include<bits/stdc++.h>
using namespace std;
#define LL long long
int main()
{
int n,m;
cin>>n>>m;
while(n--)
{
string s;
cin>>s;
int n1=0,flag=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='S')
{
n1++;
if(n1>m)flag=1;
}
else
{
n1--;
if(n1<0)flag=1;
}
}
if(n1!=0||flag==1)
{
cout<<"NO"<<endl;
}
else cout<<"YES"<<endl;
}
}
7-3 矩阵A乘以B (15 分)
- 这个考了很多次了
7-5 汉诺(Hanoi)塔问题 (20 分)
7-11 和 7-12
7-13 图深度优先遍历
- 可能不是连通图
7-21 输出全排列
7-22 还是求集合交集 (20 分)
7-22 还是求集合交集 (20 分)
7-23 约瑟夫环 (25 分)
- 这个网上有种很简单的代码
7-24 二分查找 (20 分)
7-28 第 k 大的整数** (20 分)
7-32 输油管道问题 (50 分)
7-43 真实的背包故事 (17 分)
7-45 月饼 (25 分)
最小生成树-Kruskal
7-50 最优服务次序问题 (10 分)
- 贪心
7-54 最短路径-Dijkstra (15 分)
- 单源最短路
7-56 最长递增子序列 (30 分)
- 简单DP
7-62 和 7-63 和7-64 差不多
- 简单DFS
这些题已经非常简单了,已经把大部分难题都删除了。当然可能考试的时候老师不从这里面出,也可能出了,但是我没写上去,这些题都弄懂了,期末考试应该没问题了