跳转至

2022秋数据结构平时实验题目

第一次

模拟栈

Description

用数组实现一个字符串的栈.

栈大小为10.

Input 第一行为操作次数k.

之后每一行为一次操作

操作类型有push 和 pop, push 操作之后带有入栈元素.

Output 从栈顶到栈底访问 k 次操作之后的栈中元素.

注意:输出结果之间用空格隔开.

Sample Input 1

3 push aa push bb pop Sample Output 1

aa

括号匹配

Description

输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,']'),要求验证括号是否匹配,如果匹配则输出0、否则输出1.

Input 字符串长度<=100

Output 验证括号是否匹配,如果匹配则输出0、否则输出1.

Sample Input 1

dfa(sdf)df[dfds(dfd)] Sample Output 1

0

第二次

CircularQueue

Description

向队列中插入若干个元素(循环队列最大容量为8),访问并移除队列中的所有元素.(当插入元素大于队列最大容量时输出This queue is overflow!)

必须用循环队列实现!

Input 输入:要插入的元素的个数

要插入的每一个元素的值

Output 输出:访问移除的每一个元素的值

Sample Input 1

5 6 2 3 8 7 Sample Output 1

6 2 3 8 7

寻找最近的相同字母位置

Description

寻找最近的相同字母位置

Input 输入:第一行输入字母矩阵的大小 m * n.

第二行输入要查找的字母坐标.

之后输入 m * n 个字母.

m < 10, n < 10.

Output 输出: 距离查找字母最近的相同字母坐标.(坐标从(0,0) 开始)

找不到输出-1 -1

Sample Input 1

3 2 1 1 q w a x x a Sample Output 1

2 0

第三次

约瑟夫环

Description

n个人围成一个圆圈,首先第1个人从1开始一个人一个人顺时针报数,报到第m个人,令其出列。然后再从下一个人开始,从1顺时针报数,报到第m个人,再令其出列,…,如此下去,直到圆圈中只剩一个人为止。此人即为优胜者。

Input 输入 n,m

Output 优胜者的编号

Sample Input 1

7 4 Sample Output 1

2

第四次

递归求子集合的个数

Description

给定n个元素的集合(1,2.....n),写递归程序实现求集合大小(集合中元素个数)为k的子集合的总数

Input n,k

Output 满足条件的子集合个数

Sample Input 1

10 2 Sample Output 1

45

递归排序

Description

写递归程序将一个数组从小到大排序

(其他方法不给分)

Input 第一行为数组的元素个数n

第二行为n个数

Output 输出排好序的数组

Sample Input 1

5 2 3 4 1 5 Sample Output 1

1 2 3 4 5

第五次

八皇后问题

Description

按照国际象棋的规则,皇后可以攻击与之处在同一行或者同一列或同一斜线上的棋子,八皇后问题研究的是如何将八个皇后放置在8*8的棋盘上,并且使皇后彼此之间不能相互攻击。

Input 无

Output 求满足提交的解决方案有多少个

Sample Input 1

无 Sample Output 1

满足条件的个数

递归求解链表最小值

Description

给钉一个存放n(0<n<=10000)个整数的链表(链表自己实现),请使用递归的方法求解链表的最小值,其他实现方法不得分。

Input 链表元素个数n

n个数

Output 最小值

Sample Input 1

10 3 4 5 7 8 6 2 1 12 19 Sample Output 1

1

第六次

实现二分搜索,在有序数组中有重复元素时,找到所有重复元素。

Description

给定一个有序数组,实现二分搜索方法,找到所有和目标相同的元素,以从小到大的顺序返回下标。

Input 第一行为数组的长度n

第二行为n个元素

第三行为要查找的目标元素m

Output 从小到大输出所有匹配的元素在数组中的下标,如果没有匹配的元素则输出Not Found

Sample Input 1

5 1 2 2 3 4 2 Sample Output 1

1 2 Sample Input 2

5 1 2 3 4 5 6 Sample Output 2

Not Found

迷宫问题

Description

求解迷宫问题,并打印出一条迷宫问题从入口到出口的路径

Input 给定m*n的矩阵 (迷宫)

矩阵元素,0表示该位置可以到达,1表示无法到达。

起点坐标

终点坐标

Output 输出途径位置的坐标,如果找不到一条路径输出No path found!

Sample Input 1

10 10 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 1 0 0 1 1 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 8 8 Sample Output 1

(1,1) (2,1) (3,1) (4,1) (5,1) (5,2) (5,3) (6,3) (6,4) (6,5) (7,5) (8,5) (8,6) (8,7) (8,8)

第七次

利用哈希表求两数之和

Description

给定一个整数数组和一个整数目标值, 利用哈希表找该数组中和为目标值的那两个整数,并返回它们的数组下标。(假设仅有一对整数满足和为目标值的条件)

Input 第一行:数组元素个数n

第二行:目标值target

第三行:n个数组元素

Output 和为目标值的两个整数的数组下标

Sample Input 1

4 9 2 7 11 15 Sample Output 1

0 1

第八次

最小栈

Description

设计最小栈结构,支持push, pop,getMin操作(时间复杂度要求为O(1))。

(提示:可以使用两个栈完成)

Input 第一行为操作次数k.

之后每一行为一次操作

操作类型有push , pop和getMin, push 操作之后带有入栈元素.

Output 每次getmin操作输出当前状态下栈内的最小值

Sample Input 1

6 push 1 pop push 2 getMin push 0 getMin Sample Output 1

2 0 整数划分 题目描述见本目录下的图片 要求:用递归求解。

Input n m (用空格隔开)

Output 计算n的m划分的个数

Sample Input 1

6 4 Sample Output 1

9

搜索旋转排序数组

Description

整数数组nums按升序排列,数组中的值互不相同。

在传递给函数之前,nums在预先未知的某个下标k(0≤k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],..., nums[0],nums[1],..., nums[k-1]](下标从0开始计数)。例如,[0,1,2,3,4,5,6,7]在下标3处经旋转后可能变为[4,5,6,7,0,1,2]。

给你旋转后的数组nums和一个整数target,如果nums中存在这个目标值target,则返回它的下标,否则返回-1。

要求:时间复杂度为O(log n)(如,二分搜索方法)

Input 第一行:数组元素个数n (n < 10000)

第二行:数组nums[]

第二行:目标值m

Output 该目标值的在数组中的索引;若不存在,则输出-1

Sample Input 1

7 4 5 6 7 0 1 2 0 Sample Output 1

4