选C,执行了m*n次,通过执行次数求时间复杂度,
选C,可以先进一个、可以先进两个、也可以先进三个,然后怎么出就有多种情况。
选B,执行m次找到链尾,连接就好。
选A,链式队列,不是做成循环队列,链式队列头空,则队列为空。
选C,堆排序
选B
不论是带头结点的链表还是不带头结点的链表,头指针head都指向链表中的第一个结点。如果该链表有头结点,则头指针head指向头结点,如果没有头结点,则头指针head指向链表的第一个节点。
1 带头结点的单链表中头指针head指向头结点,头结点的值域不含任何信息,从头结点的后继结点开始存储信息。头指针head始终不等于NULL,head->next等于NULL的时候链表为空。
2 不带头结点的单链表中的头指针head直接指向开始结点,当head等于NULL的时候链表为空。头结点的存在,使得空链表与非空链表的处理变得一直,也方便了对链表的开始结点插入或删除操作。
稳定的排序算法:直接插入排序、冒泡排序、归并排序、基数排序
复杂度较好的排序算法:希尔排序、堆排序、快速排序、归并排序
稳定的大概意思好像是说两个相同大小的数排序后不会影响他们原来的顺序??。。
编程题:
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)。
解:
方法一:两个栈
一个作为正常出、入栈,一个作为存最小值的栈。最小栈如果为空或者要入的data比最小栈的栈顶元素小的时候才给最小栈入栈。否则每次入栈的时候就将最小栈的栈顶元素再入
如图:
代码:https://blog.csdn.net/qq_40550018/article/details/83536540
代码:https://blog.csdn.net/ArchyLi/article/details/75732249
方法二:一个栈
使用一个栈。元素data入栈时,压入需要的数据data,在压入一个最小值min,min表示当前栈顶到栈底元素最小值;每一次元素出栈时连续出两次,即可达到题目要求。
但是这个方法有一个很大的麻烦,比如压入1,2,3,4,5,6,7,8,9,10。我们每次都要压入1这个元素。
解:https://blog.csdn.net/qq_35082516/article/details/79863389