前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >题库——————————————————————————

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

作者头像
用户10169043
发布2023-12-11 09:56:05
1750
发布2023-12-11 09:56:05
举报
文章被收录于专栏:从0到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;

    }

}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档