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

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;

}

}

相关推荐
肥猪猪爸4 分钟前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
linux_carlos4 分钟前
环形缓冲区
数据结构
readmancynn16 分钟前
二分基本实现
数据结构·算法
萝卜兽编程18 分钟前
优先级队列
c++·算法
Bucai_不才20 分钟前
【数据结构】树——链式存储二叉树的基础
数据结构·二叉树
盼海26 分钟前
排序算法(四)--快速排序
数据结构·算法·排序算法
一直学习永不止步41 分钟前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
Rstln1 小时前
【DP】个人练习-Leetcode-2019. The Score of Students Solving Math Expression
算法·leetcode·职场和发展
芜湖_2 小时前
【山大909算法题】2014-T1
算法·c·单链表
珹洺2 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode