基础数据结构测试

今天晚上考了基础数据结构,把题拿出来跟大家分享一下,希望对大家有一定的帮助!!!

在这里插入图片描述
时间复杂度,即执行了多少次,i是从1到n,j是从n到0,又因为这个是for循环的嵌套,所以正确答案D.O(n^2)
在这里插入图片描述
首先来看A 线性表即顺序表和链表 正确
B 顺序表必须占用一块连续的内存 无论是逻辑上还是物理上都是连续的 正确
C 链表没有明确的规定 所占内存可连续 可不连续 都可以的 错误
D 链表的实现方式 正确

在这里插入图片描述
A.单链表要实现尾删尾插的话,得从头开始遍历,那么时间复杂度就是O(n)
B.单循环链表比起单链表就是多了个指向头节点的尾指针,然后你要实现尾删尾插都得从末尾开始操作,但是它是单循环链表,只能从尾结点指向头节点,而不能从头节点指向尾结点,所以时间复杂度也是O(n)
C.带尾指针的单循环链表 比起B选项多了个尾指针,尾插确实可以省时间,但是尾删的话,你不能从尾指针往回找找到倒数第二个节点(尾删得找到倒数第二个节点进行操作),也就是尾插时间复杂度是O(1) 尾删是O(n)
D.就可以很好的解决前三个选项的问题 时间复杂度嗾使O(1)

在这里插入图片描述
A. 单链表和上道题一样的问题,头删O(1) 尾插的话得遍历线性表 时间复杂度O(n)
B. 这个选项和A选项时间复杂度一毛一样,带有头指针的单循环链表尾删不能直接找到最后一个系欸DNA来实现尾插,单循环指的是尾指针指向头指针 头删O(1) 尾插O(n)
C. 双向链表找到最后一个节点还得遍历一遍 头删O(1) 尾插O(n)
D. 尾指针直接找到危机欸但进行尾插O(1) 然后单循环链表直接找到头节点进行头删O(1)

在这里插入图片描述
ABD对的 没什么好说的
C的话它其实是写反了,又因为有下标的帮助,所以尾部操作时间复杂度为O(1) 除了尾部之外的操作 得挪动数据

在这里插入图片描述
因为栈的特点是先进后主 FILO(first Input Last Output)
然后A选项的话就是a先进去然后,b再进去再出来,就是每次进去一个然后出来,再进去下一个输出就是abcd
B选项就是abcd挨个进去,然后再出来就是dcba了 反过来了
C选项就是ab先进去,b出来,然后再重复A选项的操作,输出就是bcda
D选项的就是b先于a出栈了 因为输入的是abcd,所以D不可能

在这里插入图片描述
因为队列的特点和栈刚好相反,它的特点是先进先出(FIFO) 然后它的正确输出是abcd ,然后错误的就是BCD

在这里插入图片描述
答案在下图:
在这里插入图片描述

在这里插入图片描述
这玩意kmp算法中的next数组的求法,就是那个字符串的真子串的个数。
具体求法我在这篇博客中写到了
BF算法的优化----KMP算法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
相当于给m和n都遍历了一遍 所以n(n+m)
这个也是kmp算法中的 去看这个就好
KMP算法

在这里插入图片描述

在这里插入图片描述
这两个题没啥说的,算是常识吧,八大排序中四个稳定四个不稳定
大家可以去看我的数据结构专栏去加深一下印象
数据结构与算法

在这里插入图片描述
对于冒泡排序,直接来看代码:

void bubbleSort(int *arr,int len)
{
	for(int i = 0 ; i < len -1 ; i++)
	{
		for(int j = 0 ; j < len -1 -i ; j++)
		{
			if(arr[j] > arr[j+1])
			{
				int tmp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = tmp;
			}
		}
	}
}

上面代码中只有arr[j] > arr[j+1]的时候,才会进行交换,如果次次都需要交换,那么交换次数等于比较次数,然而大多数情况下都是交换次数小于比较次数,所以B选项正确

再来看选择排序选择排序
链接中有明确的动图来解释选择排序中的比较次数和交换次数

在这里插入图片描述
这道题就是背吧,面试有时候会考到的

在这里插入图片描述
我们来看一下,节点总数是有规律的,就是((2^n)-1),那么我们将n = 6带进去,答案是63,63 < 100 所以小了,那么将n = 7带进去,答案是127 > 100,那么深度就是7

在这里插入图片描述
数据越乱,使用快速排序越有利,数据要是已经排序好的1 2 3 4 5的话,第一遍得遍历4次,第二遍三次,两次,一次,最后总的时间复杂度就是O(n^2),所以数据不是很乱的话,使用快速排序不是很省时间

在这里插入图片描述
只想要获取前几个最小值,那么大家应该要想到小顶堆,也就是堆排序按照小顶堆来弄,每一次弄出序列中最小的值,就很符合题意,所以选堆排序!
大家可以去看这篇博客的堆排序,讲的很详细堆排序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
照着上图,可以看出左半边有6个元素,21下标为6,答案为6,6

这次的考题中主要还是关于链表和顺序表那块的考题比较经典,还有就是快排和冒泡排序,这两很重要,一定得会写!

“每一个不曾起舞的日子,搜是对生命的辜负!”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值