题库——————————————————————————

2023-12-11 09:56:05 浏览数 (1)

1、数据结构被形式地定义为(D,R),其中D是数据的_ 有限集合___,R是关系的有限集合。

2、数据结构包括数据的__逻辑结构__、数据的__物理结构__和数据的运算三个方面

3、数据结构按逻辑结构可分为两大类,它们分别是__线性的__和_ 非线性的___的

4、线性结构中元素之间存在__一对一__关系,树形结构中元素之间存在_一对多_ 的关系。

5、数据的存储结构可用四种基本的存储方法表示,它们分别是__顺序存储、链式存储、索引存储、散列存储___

6、数据的运算常用的有5种,它们分别是__插入、删除、查找、排序、修改___

7、 一个算法的效率可分为___时间效率___和___空间效率___的内容。

8,线性表、栈和队列都是_线性__结构,可以在线性表的__任意__位置插入和删除元素

9,对于栈只能在栈顶插入和删除元素:对于队列只能在_队尾插入__和___队头___ 删除元素。

10、栈是一种特殊的线性表,允许插入和删除运算的一端称为__栈顶____。不允许插入和删除运算的一端称为__栈底___

11、队列是被限定为只能在表的一端进行插入运算,在表的另一端进行册除运算的__线性表

12、在一个循环队列中,队首指针指向队首元素的__前一个位置___

13、在具有n个单元的循环队列中,队满时共有__n1 _个元素,

14、向栈中压入元素的操作是__先移动栈顶指针后插入元素____

15、从循环队列中删除一个元素时,其操作是__先判断是否队空,后移动队头指针__

16.二叉搜索树的中序遍历结果是(A )

A. 升序序列B. 降序序列C. 任意序列D. 无序序列

17.递归算法的特点是( A)

A. 可以通过循环调用自身来解决问题B. 可以通过条件判断来解决问题

C. 可以通过迭代调用自身来解决问题D. 可以通过选择调用自身来解决问题

18.选择排序的时间复杂度是(D )

A. O(n)B. O(log n)C. O(1)D. O(n^2)

19.哪种数据结构遵循先进先出(FIFO)原则(A )

A. 队列B. 栈C. 链表D. 哈希表

20.广度优先搜索算法使用什么数据结构来遍历图的节点(B )

A. 栈B. 队列C. 数组D. 链表

21.布隆过滤器是一种什么类型的数据结构( A )

A. 概率性B. 确定性C. 有序性D. 无序性

22.最短路径算法Dijkstra和Bellman-Ford都可以用来解决什么类型的问题( C)

A. 最大流问题B. 最小生成树问题C. 单源最短路径问题D. 多源最短路径问题

23.哪种排序算法的时间复杂度是O(nlogn)(B )

A. 快速排序B. 归并排序C. 插入排序D. 希尔排序

24.图是由一组什么和一组什么组成的(A )

A. 顶点,边B. 边,顶点C. 节点,边D. 边,节点

25.希尔排序是一种什么类型的排序算法(A )

A. 插入排序B. 选择排序C. 归并排序D. 快速排序

26.AVL树是一种自平衡二叉搜索树( √    )

27.堆排序是一种基于比较的排序算法(  √ )

28.选择排序是一种稳定的排序算法( ×  )

29.哈希表的查找操作的平均时间复杂度是O(log n)( ×  )

30.哈夫曼编码是一种无损压缩算法( √  )

分析题:1.请给定一个链表,判断链表中是否有环

public boolean hasCycle(ListNode head) {

    ListNode slow = head;

 ListNode fast = head;

    while (fast != null && fast.next != null) {

        slow = slow.next;

        fast = fast.next.next;

        if (slow == fast) {

            return true;

        }

    }

    return false;

}

  1. 请给定一个排序数组,删除重复的元素,使得每个元素只出现一次,并返回新的长度。

public int removeDuplicates(int[] nums) {

    if (nums.length == 0) {

    return 0;

    }

    int i = 0;

    for (int j = 1; j < nums.length; j ) {

        if (nums[j] != nums[i]) {

            i ;

            nums[i] = nums[j];

        }

    }

    return i 1;

}

编程题:1.请用Java代码实现一个整型数组,并打印数组中的所有元素。

int[] array = {1, 2, 3, 4, 5};

for (int i = 0; i < array.length; i ) {

    System.out.println(array[i]);

}

2.请用Java代码实现一个单链表,并打印链表中的所有节点值。

class ListNode {

    int val;

    ListNode next;

public ListNode(int val) {

        this.val = val;

        this.next = null;

    }

}

ListNode head = new ListNode(1);

ListNode second = new ListNode(2);

ListNode third = new ListNode(3);

head.next = second;

second.next = third;

ListNode current = head;

while (current != null) {

    System.out.println(current.val);

    current = current.next;

}

简答题:1.什么是二叉树?如何进行二叉树的遍历操作?

  1. 二叉树是一种每个节点最多有两个子节点的树结构。可以进行前序遍历、中序遍历和后序遍历操作,分别表示先访问根节点、先访问左子树和先访问右子树。

2.什么是链表?如何在链表中进行插入和删除操作?

  1. 链表是一种动态数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在链表中进行插入操作,可以通过改变节点的指针来实现;进行删除操作,需要调整节点的指针来维持链表的连接性。

3.什么是查找算法?给出两种常见的查找算法和它们的时间复杂度。

查找算法是在数据集中寻找某个特定元素的算法。常见的查找算法有线性查找(时间复杂度O(n))和二分查找(时间复杂度O(log n))

思考题:

应用题:(1)实现一个堆排序算法,对给定的数组进行排序

(1)public void heapSort(int[] nums) {

    int n = nums.length;

 for (int i = n / 2 - 1; i >= 0; i--) {

        heapify(nums, n, i);

    }

    for (int i = n - 1; i >= 0; i--) {

        int temp = nums[0];

        nums[0] = nums[i];

        nums[i] = temp;

        heapify(nums, i, 0);

    }

}

private void heapify(int[] nums, int n, int i) {

    int largest = i;

    int left = 2 * i 1;

    int right = 2 * i 2;

    if (left < n && nums[left] > nums[largest]) {

        largest = left;

    }

    if (right < n && nums[right] > nums[largest]) {

        largest = right;

    }

    if (largest != i) {

        int temp = nums[i];

        nums[i] = nums[largest];

        nums[largest] = temp;

        heapify(nums, n, largest);

    }

}

(2)实现一个栈,包含push、pop和getMin(获取栈中最小元素)操作,并保证这些操作的时间复杂度都是O(1)。

(2)class MinStack {

    private Stack<Integer> stack;

 private int min;

    public MinStack() {

        stack = new Stack<>();

        min = Integer.MAX_VALUE;

    }

    public void push(int x) {

        if (x <= min) {

            stack.push(min);

            min = x;

        }

        stack.push(x);

    }

    public void pop() {

        if (stack.pop() == min) {

            min = stack.pop();

        }

    }

    public int top() {

        return stack.peek();

    }

    public int getMin() {

        return min;

    }

}

0 人点赞