【数据结构】-电科预测题总结


在这里插入图片描述

一、碎碎念

最近做的几套电子科技大学820的预测卷的部分题目总结,不得不说这个预测卷还是蛮舒服的。冲冲冲!

二、算法简答题

第一套

题目: 设计一个算法查找一个带头结点单链表倒数第k个位置的结点,要求时间复杂度为 (O (n) ) 。(PS:09年408真题)

🔑:大家可以自己画个表简单计算下就知道了,这个思想在数据结构有点被用烂了。熟能生巧。

定义两个指针变量p和q,初始时指向头结点的下一个结点(链表的第一个结点)的位置。p指针沿着链表移动,当p指针移动到第k个结点时,q指针和p指针同步移动;当p指针移动到最后一个结点时,q指针指示结点为倒数第k个结点。以上过程对链表仅进行一边扫描。

第二套

题目: 给定一个含有n个元素的数组nums和一个目标值target,从nums中找三个元素使得这三个元素的和与target最接近。要求给出算法思路和时间复杂度。

🔑:
算法思路:

先对nums利用快速排序算法进行排序;设要找的三个元素为a,b,c,对于pa,pb,pc三个指针。对a进行枚举:nums[0],nums[1]…,nums[n-3](这里枚举到倒数第三个元素),在每一次枚举过程中:a=nums[i] ( 0 ≤   n ≤   n − 3 ) (0\leq\ n \leq\ n-3) (0 n n3) ,令b=nums[i+1],c=nums[n-1],即pb指向pa的后继,pc指向数组的最后一个元素,用a+b+c来更新pb和pc:

(1) a+b+c=target:返回a+b+c的下标。
(2) a+b+c>target:pc左移一个位置;
(3) a+b+c<target:pb右移一个位置;

每次将新得到的a+b+c的值与target进行比较,如果差的绝对值更小,则保存,直到 ( b ≥   c ) ( b \geq\ c ) (b c),枚举下一个a。

时间复杂度分析:

涉及两层循环,一层枚举a,一个扫描后面的元素,时间复杂度为(O(n)),快排的时间复杂度为(O(nlogn)),所有该算法的时间复杂度为(O(n))。

第三套

题目: 给定一个有序的数组nums[n],其中每个元素都不等,然后给定一个值,要求在数组nums中找到k个不同的与x值最接近的元素(k<n),请设计一个时间复杂度尽量小的算法,要求给出思路。

🔑:

算法思想:

(1)如果x小于等于nums的第一个元素,那么数组的前k个元素即为所求;如果x大于等于nums的最后一个元素,那么数组的最后k个元素即为所求。
(2)其他情况采用二分查找。取与k最接近的元素下标为index,low=index-(k-1),high=index+(k+1),在index左右分别有k个元素,我们需要的k个数在[low,high]中,继续缩小范围:

a:low<0 或 low对于的元素比high对应的元素更接近x,减小low的值
b:high>n-1 或 high对于的元素比low对应的元素更接近x,增加low的值
直到high-low=k,循环终止,得到答案。

时间复杂度:

二分查找:(O(logn)),元素扫描(O(k)),所以算法复杂度为(O(logn+k))。

三、算法设计题

第一套

题目1: 删除带头结点的单链表中的重复元素,如1→8→7→1→8→2→3→2,删除重复元素之后为1→8→7→2- +3.

题目2: 输出二叉树的每-层最后-一个结点的值,输出函数使用Output()。

二叉树结点定义如下:
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
} BITNode,*BiTree;
第二套

题目1: 求一棵二叉树的最小深度。最小深度定义为从根节点到最近的叶子结点的路径上的结点数。

二叉树结点定义如下:
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
} BITNode,*BiTree;

题目2: 给定一个带头结点的单链表,反转单链表的第m个结点到弟n个结点(1≤m≤n≤表长),如:1→2→8→3→7,反转第2个结点到第4个结点后为: 1→3→8→2→7。

链表结点定义如下:
typedef struct BiTNode{
char data;
struct LNode *next;
} LNode,*LinkList;
第三套

题目1: 删除一个有序数组中重复的元素,使得每-一个重复的元素留下两个,并返回数组长度。

题目2: 二叉树中的叶节点分为左叶结点和右叶节点,请用递归的方法输出一棵二叉树中所有左叶结点的值的和。

二叉树结点定义如下:
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
} BITNode,*BiTree;

四、小结

整体来说,电科的题目有些来自408统考以及一些常见的算法题,难度适中。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森格的博

创作不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值