Day1刷题总结

  1. 如果进栈序列为e1,e2,e3,e4,则不可能的出栈序列是:(D)
    A.e2,e4,e3,e1
    B.e4,e3, e2, e1
    C.e1,e2,e3,e4
    D.e3,e1, e4, e2
    解析
    对于A,进栈的顺序是先把e1,e2进栈,再把e2出栈,再将e3,e4进栈,这时栈按顺序剩下e1,e3,e4,出栈的顺序就是e4,e3,e1
    对于B,进栈的顺序就是e1,e2,e3,e4,出栈的顺序就是e4,e3,e2,e1
    对于C,进行的操作是将每一个元素进栈之后马上弹出。
    对于D,不可能是e3,e1,因为没出现e2,所以错误

  2. 链表不具备的特点是( A)
    A.可随机访问任何一个元素
    B.插入、删除操作不需要移动元素
    C.无需事先估计存储空间大小
    D.所需存储空间与线性表长度成正比
    解析
    线性表不能随机访问,每次访问的时间复杂度都是O(n),因为线性表是没有索引的

  3. 下列叙述中正确的是?(A)
    A.线性表是线性结构
    B.栈与队列是非线性结构
    C.线性链表是非线性结构
    D.二叉树是线性结构
    解析:
    线性表是逻辑上的线性结构,存储上可以线性,可以链式
    栈与队列都是线性结构
    二叉树是非线性结构

  4. 对矩阵压缩存储是为了(D)
    A.方便运算
    B.方便存储
    C.提高运算速度
    D.减少存储空间
    解析:
    A C,都是运算方面的好处
    B,如果邻接表,还要存指针,并没有方便存储
    D,不管是,邻接矩阵还是邻接表,都节省了空间

  5. 链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序表中效率高,这样的说法正确吗?(A)
    A.正确
    B.不正确
    解析:链表在插入删除时不需要移动元素,只改变指向元素的链就好,一般在删除时只需要把next指向next的next节点,则节点删除。

  6. 假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为( C )。
    A.2
    B.4
    C.6
    D.8
    解析:
    定义中每个{ },表示一行的数据,每行数据不够的补0,每一行的编号从0开始
    ** 0 1 2 3**
    0 3 4 0 0
    1 2 8 6 0
    2 0 0 0 0

  7. 以下那种结构,平均来讲获取任意一个指定值最快?(D)
    A.二叉排列数
    B.队列
    C.栈
    D.哈希表
    解析:
    二叉排序树中,查找的平均时间复杂度是O(logn);
    对于栈和队列来说,查找就意味着把元素挨个出栈或者出队,故平均时间复杂度是O(n);
    而哈希表,直接通过关键码查找元素,平均为O(1);
    故哈希表速度是最快的

  8. 链接线性表是顺序存取的线性表 。 (A )
    A.正确
    B.错误
    解析:
    链接线性表就是链表。
    线性表的顺序存储结构和线性表的链式存储结构分别是随机存取和顺序存取。顺序存储结构的地址在内存中是连续的,所以可以通过计算地址实现随机存取,而链式存储结构的存储地址不一定连续,只能通过第1个结点的指针顺序存取。

  9. 将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为(A)?
    A.O(N * M * logN)
    B.O(N*M)
    C.O(N)
    D.O(M)
    解析:
    ①在每一个链表中取出第一个值,然后把它们放在一个大小为N的数组里,然后把这个数组当成heap建成小(大)根堆。此步骤的时间复杂度为O(N)

②取出堆中的最小值(也是数组的第一个值), 然后把该最小值所处的链表的下一个值放在数组的第一个位置。如果链表中有一个已经为空(元素已经都被取出),则改变heap的大小。此步骤的时间复杂度为O(lg N).

③不断的重复步骤二,直到所有的链表都为空。
建堆只建一次,复杂度为O(N);调整堆MN-1次,复杂度为(MN-1)O(lg N)。所以为O(MNlg N)
10.以下关于栈的说法错误的是:(BCD)
A.在栈空的情况下,一定不能作出栈操作,否则产生溢出。
B.栈一定是顺序存储的线性结构。
C.空栈是所有元素都为0的栈。
D.一个栈的输入序列为:A,B,C,D,可以得到输出序列:C,A,B,D。
解析:
首先题目是要求选描述错误的。
A:栈空的情况下出栈属于下溢出;A正确。
B:栈可以顺序存储,也可以是链式存储的线性结构;B错误。
C:元素为0和无元素是两个不同的概念,当有n个元素为0的栈,拥有n个元素;C错误。
D:输出C时,并定有ABC进栈,然后C出栈。接下来有两种输出结果,一是B出栈,即输出C的后面输出B;而是D进栈后立即出栈,即输出C的后面输出D。所以C的后面要么是B要么是D,不可能输出A;D错误。

  • 编程题
    1.调整数组顺序使奇数位于偶数前面。输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
相对位置不变--->保持稳定性;奇数位于前面,偶数位于后面 --->存在判断,挪动元素位置;
这些都和内部排序算法相似,考虑到具有稳定性的排序算法不多,例如插入排序,归并排序等;这里采用插入排序的思想实现。
public class Solution {
    public void reOrderArray(int [] array) {
        //相对位置不变,稳定性
        //插入排序的思想
        int m = array.length;
        int k = 0;//记录已经摆好位置的奇数的个数
        for (int i = 0; i < m; i++) {
            if (array[i] % 2 == 1) {
                int j = i;
                while (j > k) {//j >= k+1
                    int tmp = array[j];
                    array[j] = array[j-1];
                    array[j-1] = tmp;
                    j--;
                }
                k++;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/sl1130398099/article/details/82959929