python数据结构习题汇总
- 格式:doc
- 大小:353.00 KB
- 文档页数:20
Python练习题+参考答案一、单选题(共57题,每题1分,共57分)1.关于Python的全局变量和局部变量,以下选项中描述错误的是( )A、简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放B、全局变量指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效C、使用global保留字声明简单数据类型变量后,该变量作为全局变量使用D、局部变量指在函数内部使用的变量,当函数退出时,变量依然存在,下次函数调用可以继续使用正确答案:D2.以下关于循环结构的描述,错误的是:A、遍历循环对循环的次数是不确定的B、遍历循环的循环次数由遍历结构中的元素个数来体现C、非确定次数的循环用 while 语句来实现,确定次数的循环用 for 语句来实现D、非确定次数的循环的次数是根据条件判断来决定的正确答案:A3.以下不能创建一个字典的语句是( )A、dict = {(4,5,6):‘dictionary’}B、dict = {[4,5,6]:‘dictionary’}C、dict= {4:6}D、dict = {}正确答案:B4.下面哪一个不是Python语言的合法命名( )A、3monthlyB、monthlyC、monTHlyD、_Monthly3_正确答案:A5.以下选项中不是文件操作函数或方法的是( )A、readB、writelinesC、readlinesD、load正确答案:D6.以下关于Python循环结构的描述中,错误的是( )A、遍历循环中的遍历结构可以是字符串、文件、组合数据类型和range()函数B、continue只结束本次循环C、break用来结束当前次语句,但不跳出当前的循环体D、Python通过for、while等保留字构建循环结构正确答案:C7.在print函数的输出字符串中可以将( )作为参数,代表后面指定要输出的一个字符。
A、%dB、%tC、%cD、%s正确答案:C8.下列快捷键中能够中断(Interrupt Execution)Python程序运行的是( )A、F6B、Ctrl + QC、Ctrl + CD、Ctrl + F6正确答案:C9.字符串是一个字符序列,例如,字符串s,从右侧向左取第3个字符用( )索引?A、s[0:-3]B、s[-3]C、s[3]D、s[:-3]正确答案:B10."下面代码的输出结果是( ) for a in ‘mirror’: print(a, end="") if a == ‘r’: break"A、MirrorB、mirC、mirrorD、mi正确答案:B11.字符串是一个连续的字符序列,用( )方式打印出可以换行的字符串。
python必刷100题以下是Python必刷的100道题目,根据不同的水平和兴趣,可以选择适合自己的题目进行练习。
1. 两数之和2. 两数之和 II - 输入有序数组3. 回文数4. 反转整数5. 字符串中的第一个唯一字符6. 合并两个有序链表7. 合并两个有序数组8. 盛最多水的容器9. 三数之和10. 删除排序数组中的重复项11. 最长回文子串12. 最长公共前缀13. 两个数组的交集14. 有效的括号15. 实现strStr()16. 合并K个排序链表17. Pow(x, n)18. 括号生成19. 合并区间20. 合并两个二叉树21. 买卖股票的最佳时机22. 缺失的第一个正数23. 二叉树的最大深度24. 对称二叉树25. 二叉树的层次遍历26. 外观数列27. 单词搜索28. 电话号码的字母组合29. 子集30. 二叉树的前序遍历31. 删除链表中的节点32. 有效的字母异位词33. 二叉树的锯齿形层次遍历34. 路径总和35. 跳跃游戏36. 最小栈37. 单词接龙38. 无重复字符的最长子串39. 相交链表40. 乘积最大子序列41. 格雷编码42. 旋转图像43. 螺旋矩阵44. 二叉搜索树中的搜索45. 字符串相乘46. 矩阵置零47. 下一个排列48. 最大子序和49. 三个数的最大乘积50. 最长连续递增序列51. 缺失的数字52. 跳跃游戏 II53. 矩阵中的最长递增路径54. 合并两个有序链表55. 删除链表的倒数第N个节点56. 最小路径和57. 旋转链表58. 接雨水59. 螺旋矩阵 II60. 跳跃游戏 III61. 移除元素62. 买卖股票的最佳时机 II63. 买卖股票的最佳时机 III64. 除自身以外数组的乘积65. 输出二叉树的右视图66. 反转链表67. 翻转字符串里的单词68. 颜色分类69. 数组中的第K个最大元素70. 验证二叉搜索树71. 在排序数组中查找元素的第一个和最后一个位置72. 寻找旋转排序数组中的最小值73. 最大矩形74. 将有序数组转换为二叉搜索树75. 路径总和 II76. 不同路径77. 组合78. 排列79. 子集 II80. 字符串转换整数(atoi)81. 删除排序链表中的重复元素82. 删除排序链表中的重复元素 II83. 分数到小数84. 复原IP地址85. 最接近的三数之和86. 验证回文串87. 寻找重复数88. 圆圈中最后剩下的数字89. 矩阵中的最长递增路径90. 找到所有数组中消失的数字91. 最小覆盖子串92. 最佳买卖股票时机含冷冻期93. 找到字符串中所有字母异位词94. 单词拆分95. 验证二叉树的前序序列化96. 从前序与中序遍历序列构造二叉树97. 子数组最大平均数 I98. 单词搜索 II99. 最长连续递增序列100. 打家劫舍。
Python 程序设计语言基础知识一、Python 的基本数据类型二、(1)算术运算符:**、*、/、//、%、+、-。
(2)关系运算符:<、<=、>、>=、==、!=、in 。
“==”表示判断,“=”表示赋值。
(3)逻辑运算符:not 、and 、or 。
(5)x +=1:将变量x 的值加1,与“x =x +1”等价,类似还有“-=”、“*=”、“/=”、“%=” (6)取某三位数n 各个位的方法:个位:n % 10 十位: n // 10 % 10 或n %100 // 10 百位: n //100 三、字符串字符串是用单引号(')、双引号(″)或三引号(''')括起来的一个字符序列,起始和末尾的引号必须要一致。
1.字符串的特点(1)字符串是不可变对象。
即一旦创建了一个字符串,那么这个字符串的内容是不可改变的。
(2)通过索引来访问字符串中的字符。
索引表示字符在字符串的位置,第一个元素的索引号是0,第二个元素的索引号是1,以此类推。
2.字符串的切片操作通过字符串的切片操作可以获得字符串的一个子串。
格式为:字符串名[start :end :step]step 默认为1,表示返回下标从start 到end -1的字符构成的一个子串。
四、列表列表是由0个或多个元素组成的序列,其中的元素可以是数字、字符串等混合类型的数据,甚至是其他的列表。
1.列表的特点(1)列表用[]表示,元素间用逗号分隔,不同类型的元素可以存储在同一列表中。
(2)列表的大小是可变的,可以根据需要增加或缩小。
(3)列表是可变对象。
一个列表被创建后,可以直接修改列表中的元素值。
2.列表的访问列表中的元素是通过索引来定位的,第一个元素的索引号是0。
列表中的元素可以通过索引进行访问。
3.列表的切片操作列表的切片形式为list[i :j :k],i 为起始位置索引(包含),默认为0,j 为终止位置索引(不含),默认至序列尾;k 为切片间隔,默认为1。
Python练习题(有答案)1、判断变量名是否合法value = input('变量名:')if value[0].isdigit():print('不合法')else:for i in value:if i.isalpha() or i == '_':print('合法')breakelse:2、输出1-2+3-4+5-6+…99的和i = 0sum = 0while i < 100:sum += ii += 2print('result is : %d' %(((1+99)*99)/2-sum))3、使用while循环实现输出1,2,3,4,5,7,8,9,11,12i = 1while i <= 12:if i == 6 or i == 10:i += 1continueelse:print(i, ' ',end='')i+=154、完成用户管理系统:实现功能如下1).注册新用户2).用户登录3).注销用户4).显示用户信息5).退出系统(exit(0))menu = """1).注册新用户,2).用户登录,3).注销用户,4).显示用户信息,5).退出系统"""users = []passwds = []def AddUser(user,passwds):UserName = input("请输入新用户名称:")user.append(UserName)Password = input("请输入用户密码:")passwds.append(Password)print("注册成功")def LoginUser(user,passwd):Name = input("请输入用户名称:")Passwd = input("请输入密码:")if Name in user:if Passwd ==passwd[user.index(Name)]: print("登陆成功")else:print("登录失败")else:print("用户不存在")def DeleteUser(user,passwd):Name = input("请输入要删除的名字:")if Name not in user:print('注销失败')else:i = user.index(Name)passwd.pop(i)print("注销用户成功")def FindUser(user,passwd):s = {user,passwd}print("user:%s passwd:%s" %(user,passwd))def ExitSystem():print("退出系统")exit()while True:print(menu)choose = input('请输入选择:')if choose == '1':AddUser(users,passwds)elif choose == '2':LoginUser(users,passwds)elif choose == '3':DeleteUser(users,passwds)elif choose == '4':FindUser(users,passwds)elif choose == '5':ExitSystem()else:5、将列表中所有内容都变为小写;li = [‘frdgrfgdsHHJJ’, ‘cdsfregHHHJDGF’]for i in range(len(li)):li[i] = li[i].lower()6、现有如下两个变量,请简述n1 和n2 是什么关系?n1 = 123456n2 = n1将变量n1存储的值复制一份给n2,两个变量所存储的值相等 n1 = n2 = 123456,但是两个变量在内存中的地址不同2 7、请在下面的空白处填写运行结果seq = [1, 2, 3, 4]seq[:2]seq[-2:]seq[10:]seq[::-1]seq[:]id(seq[:]) == id(seq)[1, 2][3, 4][][4, 3, 2, 1][1, 2, 3, 4]False68、写代码,有如下列表,按照要求实现每一个功能a. 计算列表长度并输出b. 列表中追加元素“seven”,并输出添加后的列表c. 请在列表的第1 个位置插入元素“Tony”,并输出添加后的列表d. 请修改列表第2 个位置的元素为“Kelly”,并输出修改后的列表e. 请删除列表中的第2 个元素,并输出删除的元素的值和删除元素后的列表f. 请删除列表中的第3 个元素,并输出删除元素后的列表g. 请删除列表中的第2 至4 个元素,并输出删除元素后的列表h. 请将列表所有的元素反转,并输出反转后的列表li = ['happy', 'lucky','linux']###aprint(len(li))###bli.append('seven')print(li)###cli.insert(0,'Tony')print(li)###dli[1] = 'Kelly'print(li)###es = li.pop(1)print(s,li)###fli.pop(2)print(li)###gfor i in range(3):li.pop()print(li)###hli=li[::-1]print(li)259、字典dic = {‘k1’: “v1”, “k2”: “v2”, “k3”: [11,22,33]}a. 请循环输出所有的keyb. 请循环输出所有的valuec.请循环输出所有的key 和valued.请在修改字典中“k1”对应的值为“harry”,输出修改后的字典e.请在k3 对应的值中追加一个元素44,输出修改后的字典f.请在k3 对应的值的第1 个位置插入个元素18,输出修改后的字典###adic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}for i in dic.keys():print(i)###bfor i in dic.values():print(i)###cfor k, v in dic.items():print(k,v)###ddic['k1'] = 'harry'print(dic)###edic['k3'].append(44)print(dic)###fdic['k3'].insert(0,'18')1910、重复的单词: 此处认为单词之间以空格为分隔符,并且不包含,和.;# 1. 用户输入一句英文句子;# 2. 打印出每个单词及其重复的次数;Sentence = input('Enter sentence :')str = Sentence.split()WorldCount = {}for num in str:if num in WorldCount:WorldCount[num] += 1else:WorldCount[num] = 1print(WorldCount)11、元素分类有如下值集合[11,22,33,44,55,66,77,88,99,90],将所有大于66 的值保存至字典的第一个key 中,将小于66 的值保存至第二个key 的值中即: {‘k1’: 大于66 的所有值, ‘k2’: 小于66 的所有值}a = {11,22,33,44,55,66,77,88,99,90}Dict = {'k1':[],'k2':[]}for i in a:if i <= 66:Dict['k2'].append(i)if i < 66:Dict['k1'].append(i)print(Dict)812、九九乘法表输出i = 1while i <= 9:j = 1while j <= i:print("%d * %d = %2d " %(j,i,j*i),end='')j += 1i += 113、求两个数的最大公约数和最小公倍数Num1 = int(input('第一个数:'))Num2 = int(input('第二个数:'))Min_Num = min(Num1,Num2)for i in range(1,Min_Num+1):if Num1 % i == 0 and Num2 % i == 0:GCD = iLCM = (Num1 * Num2) / GCDprint('最大公约数:%d\n最小公倍数:%d' %(GCD,LCM))9 14、字符串: a = ‘abcd’, 用2个方法取出字母da = 'abcd'print(a[3:])print(a[a.find('d')])315、列表b = [1,2,3,4,5](1).用2种方法输出下面的结果:[1,2,3,4,5,6,7,8](2).用列表的2种方法返回结果:[5,4](3).判断2是否在列表里(1)b = [1,2,3,4,5]print(b + [6,7,8])b.append([6,7,8])print(b)(2)b = [1,2,3,4,5]print(b[::-1][:2])print(b[3:][::-1])(3)b=[1,2,3,4,5]print(2 in b)。
本文内容引自开源社区githubPython的学习不是部门造车,更注重于实践!实例001:数字组合题目有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?程序分析遍历全部可能,把有重复的剃掉。
实例002:“个税计算”题目企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?实例003:完全平方数题目一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?思路是:最坏的结果是n的平方与(n+1)的平方刚好差168,由于是平方的关系,不可能存在比这更大的间隙。
至于判断是否是完全平方数,最简单的方法是:平方根的值小数为0即可。
实例004:这天第几天题目输入某年某月某日,判断这一天是这一年的第几天?程序分析特殊情况,闰年时需考虑二月多加一天:实例005:三数排序题目输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析练练手就随便找个排序算法实现一下,偷懒就直接调函数。
实例006:斐波那契数列题目斐波那契数列。
程序分析斐波那契数列(Fibonacci sequence),从1,1开始,后面每一项等于前面两项之和。
图方便就递归实现,图性能就用循环。
实例007:copy题目将一个列表的数据复制到另一个列表中。
程序分析使用列表[:],拿不准可以调用copy模块。
实例008:九九乘法表题目输出 9*9 乘法口诀表。
程序分析分行与列考虑,共9行9列,i控制行,j控制列。
实例009:暂停一秒输出题目暂停一秒输出。
python综合练习Python 综合练习Python 是一种高级编程语言,它在软件开发领域得到了广泛的应用。
拥有简洁易读的语法和强大的功能,Python 可以用于开发各种类型的应用程序,包括网页开发、科学计算、数据分析、人工智能等。
为了巩固对 Python 的理解和应用,以下是一些综合练习题目,帮助你进行实践和提升。
练习一:斐波那契数列斐波那契数列是一个非常经典的数列,使用递归函数可以轻松计算出前 n 个斐波那契数。
请编写一个函数 `fibonacci(n)`,返回一个包含前n 个斐波那契数的列表。
例如,`fibonacci(10)` 应该返回 `[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]`。
```pythondef fibonacci(n):if n <= 0:return []elif n == 1:return [0]elif n == 2:return [0, 1]else:fib = [0, 1]while len(fib) < n:fib.append(fib[-1] + fib[-2])return fib```练习二:字符串反转编写一个函数`reverse_string(string)`,将输入的字符串反转并返回。
例如,`reverse_string('Hello, World!')` 应该返回 `'!dlroW ,olleH'`。
```pythondef reverse_string(string):return string[::-1]```练习三:查找最长单词编写一个函数 `find_longest_word(string)`,接受一个字符串作为参数,并返回该字符串中最长的单词。
如果有多个单词长度相同且最长,则返回第一个遇到的单词。
例如,对于输入的字符串 `'I love Python programming'`,函数应该返回 `'programming'`。
python组合数据类型选择题1. 以下哪个是不可变的组合数据类型?()A. 列表B. 字典C. 元组D. 集合答案:C解析:元组是不可变的,列表、字典和集合都是可变的。
2. 以下创建一个空列表的正确方式是?()A. list = []B. list = list()C. list = {}D. list = ()答案:A、B解析:A 选项直接使用中括号创建空列表,B 选项使用list() 函数创建空列表。
C 选项创建的是一个空字典,D 选项创建的是一个空元组。
3. 要访问列表中的元素,可以使用以下哪种方式?()A. 列表名[索引]B. 列表名{索引}C. 列表名(索引)D. 以上都不对答案:A解析:在Python 中,通过列表名[索引]的方式访问列表中的元素。
4. 以下关于列表的切片操作,错误的是?()A. [1, 2, 3, 4][1:3]B. [1, 2, 3, 4][-1:-3]C. [1, 2, 3, 4][::-1]D. [1, 2, 3, 4][2:]答案:B解析:切片操作中,当步长为负数时,起始索引应该大于结束索引,B 选项中-1 大于-3,所以错误。
5. 以下能向列表末尾添加元素的方法是?()A. append()B. insert()C. extend()D. 以上都是答案:A解析:append() 方法用于向列表末尾添加一个元素,insert() 方法用于在指定位置插入元素,extend() 方法用于将一个可迭代对象的元素添加到列表末尾。
6. 以下关于元组的说法,正确的是?()A. 元组中的元素可以修改B. 元组可以使用append() 方法添加元素C. 元组使用小括号表示D. 元组没有索引答案:C解析:元组中的元素不可修改,不能使用append() 方法添加元素,元组有索引。
7. 以下创建一个包含1、2、3 的元组的正确方式是?()A. t = (1, 2, 3)B. t = {1, 2, 3}C. t = [1, 2, 3]D. t = 1, 2, 3答案:A、D解析:A 选项使用小括号明确创建元组,D 选项直接用逗号分隔多个值也可以创建元组。
- 1 - python 习题 Python是一种高级编程语言,由Guido van Rossum于1989年发明。它是一种解释型语言,也是一种面向对象语言。Python的语法简单易懂,而且具有强大的功能,因此成为了广泛使用的编程语言。Python具有良好的可移植性,可以在不同的操作系统上运行,如Windows、Linux、macOS等。 Python的优点不仅在于其语法简单易懂,还在于其拥有丰富的库和模块,这些库和模块可以大大简化编程的过程。Python的应用范围非常广泛,可以用于Web开发、数据分析、机器学习、人工智能等领域。因此,学习Python编程语言已经成为了现代程序员必备的技能之一。 在学习Python编程语言的过程中,我们需要不断地练习,掌握语法和技巧。下面,我们来看一些Python编程的习题。 1. 编写一个Python程序,计算1到100的和。 解答: sum = 0 for i in range(1, 101): sum += i print('1到100的和为:', sum) 2. 编写一个Python程序,找出一个列表中的最大值和最小值。 解答: lst = [3, 8, 2, 5, 1, 9, 4] - 2 -
max_num = lst[0] min_num = lst[0] for i in range(1, len(lst)): if lst[i] > max_num: max_num = lst[i] if lst[i] < min_num: min_num = lst[i] print('最大值为:', max_num) print('最小值为:', min_num) 3. 编写一个Python程序,判断一个字符串是否为回文字符串。 解答: def is_palindrome(s): s = s.lower() s = s.replace(' ', '') for i in range(len(s)//2): if s[i] != s[len(s)-i-1]: return False return True s = 'A man a plan a canal Panama' print(is_palindrome(s)) 4. 编写一个Python程序,生成斐波那契数列。 解答: - 3 -
值得收藏的30道Python练手题(附详细答案)大家好,我是鸟哥。
今天给大家分享30道Python练习题,建议大家先独立思考一下解题思路,再查看答案。
1. 已知一个字符串为“hello_world_yoyo”,如何得到一个队列[“hello”,”world”,”yoyo”] ?•使用 split 函数,分割字符串,并且将数据转换成列表类型:test = 'hello_world_yoyo'print(test.split('_'))12•结果:['hello', 'world', 'yoyo']2. 有个列表[“hello”, “world”, “yoyo”],如何把列表里面的字符串联起来,得到字符串“hello_world_yoyo”?•使用 join 函数将数据转换成字符串:test = ['hello', 'world', 'yoyo']print('_'.join(test))•结果:hello_world_yoyo如果不依赖 python 提供的 join 方法,还可以通过 for 循环,然后将字符串拼接,但是在用“+”连接字符串时,结果会生成新的对象,使用 join 时结果只是将原列表中的元素拼接起来,所以 join 效率比较高。
for 循环拼接如下:test = ['hello', 'world', 'yoyo']# 定义一个空字符串j = ''# 通过 for 循环打印出列表中的数据for i in test:j = j + '_' + i# 因为通过上面的字符串拼接,得到的数据是“_hello_world_yoyo”,前面会多一个下划线_,所以把这个下划线去掉print(j.lstrip('_'))3. 把字符串 s 中的每个空格替换成”%20”,输入:s = “We are happy.”,输出:“We%20are%20happy.”。
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?#Filename:001.pycnt = 0#count the sum of resultfor i in range(1,5):for j in range(1,5):for k in range(1,5):if i!=j and i!=k and j!=k:print i*100+j*10+kcnt+=1print cnt【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1#Filename:002.py2 i = int(raw_input('Enter the profit:'))3 arr = [1000000,600000,400000,200000,100000,0]4 rat = [0.01,0.015,0.03,0.05,0.075,0.1]5 r = 06for idx in range(0,6):7if i>arr[idx]:8 r+=(i-arr[idx])*rat[idx]9print (i-arr[idx])*rat[idx]10 i=arr[idx]11print r【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?【感谢12楼的同学peiqianggao提供代码】# -*- coding:utf-8 -*-'''Created on 2015-6-7# 第三题:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少@author: Administrator'''import mathnum = 1while True:if math.sqrt(num + 100)-int(math.sqrt(num + 100)) == 0 andmath.sqrt(num + 268)-int(math.sqrt(num + 268)) == 0:print(num)breaknum += 1【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?【程序5】题目:输入三个整数x,y,z,请把这三个数由小到大输出。
. . . 第1章 数据结构导论 一、选择题 1.算法的时间复杂度取决于 A 。 A.问题的规模 B.变量的多少 C.问题的难度 D.A和B 2. 算法能正确的顺利结束的特性为算法的 B 。 A. 有效性 B.有限性 C.健壮性 D. 高效性 3. 数据的物理结构主要包含 A 这几种结构。 A.顺序结构和链表结构 B.线性结构和非线性结构 C.动态结构和静态结构 D.集合、线性结构、树形结构、图形结构 4.数据在计算机内存中的表示是指 A 。 A. 数据的存储结构 B. 数据结构 C. 数据的逻辑结构 D. 数据元素之间的关系 5.数据结构被形式化定义为二元组(D,S),其中D是 B 的有限集合。 A.算法 B.数据元素 C.数据操作 D.数据关系 6.算法效率的度量是 D A.正确度和简明度 B.数据复杂度和程序复杂度 C.高的速度和正确度 D.时间复杂度和空间复杂度 7. 在存储数据时,通常不仅要存储各数据元素的值,还要存储 D 。 A.数据的存储方法 B.数据处理的方法 C.数据元素的类型 D.数据元素之间的关系 8. 以下叙述不正确的是 C 。 A. 数据结构是指数据以及数据相互之间的联系 B. 数据结构主要指数据的逻辑结构,与计算机的存储和处理无关 C. 数据的存储结构是指数据在计算机中的存储方式,主要包括线形和非线性 D. 对于给定的n个元素,可以构造出的逻辑结构有多种 9. 下列程序段违反了算法 B 特征。 count=0 while count!=3: print(count) . . .
A.明确性 B.有限性 C.有效性 D.功能性 10. 下列程序的时间复杂度为 D 。 for i in range(1,n+1): j=i for k in range(j+1,n+1): x=x+1
A.O(i*j) B.O(n(n-1)/2)
C.O(n2/2) D.O(n2)
二、解答题 1.下列程序段中,函数my_fun(i,k)的执行次数是 n(n+1)/2 ,该程序的时间复杂度为 O(n^2) 。 for k in range(1,n+1): for i in range(0,k): if i!=k: my_fun(i,k)
2.求下列程序段中有数字标号的各语句的执行次数,然后求出该程序段的时间复杂度。 def fun (n) : ① i=s=1 ② while s i=i+1 ③ s=s+i ④ return i
答: ① 1次 ② (2n)^1/2次 ③ (2n)^1/2 - 1次 ④ 1次 ⑤ O(n^1/2)
第2章 数组结构 一、选择题 1.线性表是一个 A 。 A. 有限序列,可以为空 B. 有限序列,不能为空 C. 无限序列,可以为空 D. 无限序列,不能为空 . . .
2.下面关于线性表的叙述中,错误的是 B 。 A. 线性表采用顺序存储,必须占用一片连续的存储单元 B. 线性表采用顺序存储,便于进行插入和删除操作 C. 线性表采用链接存储,不必占用一片连续的存储单元 D. 线性表采用链接存储,便于进行插入和删除操作 3.某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第12个元素的存储地址为 A 。 A. 144 B. 145 C. 147 D. 148 4.若长度为n的顺序存储结构线性表,删除第i个数据元素,需要向前移动 A 个数据元素。 A. n-i B. n+i C. n-i-1 D. n-i+1 5.若长度为n的顺序存储结构线性表, 在第i个位置插入一个元素, 需要依次向后移动 D 个元素。 A. n-i B. n+i C. n-i-1 D. n-i+1 6.一个顺序表所占存储空间的大小与 D 无关。 A.顺序表长度 B.结点类型 C.结点中个数据域的类型 D.结点的存放次序 7. 以下叙述不正确的是 D 。 A. 数据的逻辑结构包括线性和非线性结构,非线性结构包括树和图两种。 B. 数据的逻辑结构主要指元素间的关系,与计算机的存储和处理无关 C. 数据的存储结构是指数据在计算机中的存储方式,主要包括顺序和链式两种 D. 对于给定的n个元素,可以构造出的逻辑结构有顺序表和链表两种 8. 某线性表采用顺序存储结构,则下列叙述正确的是 B 。 A.删除顺序表第i个元素和在第i位置插入一个元素所需移动的元素个数一样 B.删除顺序表第i个元素和在第i位置插入一个元素的时间复杂度一样 C.删除顺序表第i个元素和取第i元素的值的时间复杂度一样 D.在顺序表表头插入和表尾插入的时间复杂度一样 9. 对线性表,在下列情况下应当采用顺序表表示的是 A 。 A. 经常需要随机地存取元素 B. 经常需要进行插入和删除操作 C. 表中每个元素需要的字节数比较大 D. 表中的元素个数不变 . . .
10.在含有n个元素的顺序表中,算法的时间复杂度是O(1)的操作是___A___。 A.访问第i个元素(1≤i≤n)和求第i个元素的直接前驱(2≤i≤n) B.在第i个元素后插入一个新元素(1≤i≤n) C.删除第i个元素(1≤i≤n) D.将n个元素从小到大排序
二、填空题 1. 一个一维数组(列表)A的长度为500,起始(A[0])地址为2000,每个元素占4个字节,则A[80]的地址是 2320 。 2. 一个4*6的二维数组A,每个元素占4个字节,假设该数组起始元素A(1,1)的地址是110,若以行为主存储,则A(3,5)的地址是 174 ;若以列为主存储,A(3,5)的地址是 182 。 3. 以顺序存储结构实现的线性表简称为 顺序表 ,它要求存储空间必须是 连续的 ,并以 下标 来体现元素之间的关系,在顺序表中访问第i个元素的时间复杂度为 O(1) ,因此,顺序表也称为随机存取的数据结构。 以链式存储结构实现的线性表称为 链表 。其存储空间可以是 不连续的 ,以 指针 来体现元素之间的关系。 在链表中访问第i个元素的时间复杂度为 O(n) ,因此,链表也称为顺序访问的数据结构。
三、算法设计题 1.设有一个顺序表L,其元素为整型数据,编写一个要求时间复杂度为O(n)、空间复杂度为O(1)的算法,将L中所有小于0的整数放在前半部分,大于0的整数放在后半部分。提示:从L的两端查找,前端找大于0的数据,后端找小于0的数据,然后将两位置的数据交换。 L = [1,2,3,4,5,6,7,8,9,10,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10] n = len(L) print("原顺序表:\n{}".format(L)) j = 0 k = 0 for i in range(n): if L[i] < 0: k = L[i] . . .
L[i] = L[j] L[j] = k j += 1 else: continue print("排序后顺序表:\n{}".format(L))
2. 在一个有序列表中查找元素x,当被查元素x小于列表中某个元素时就可停止。请编写一个函数实现上述查找,并分析此查找在最好情况、最坏情况以及平均情况下的性能。 def found(L,x): print("查找元素") for i in L: if x > i or x == i: print("元素x大于或等于{},程序继续".format(i)) continue else: print("元素x小于{},程序停止".format(i)) break
if __name__ == "__main__": x = eval(input("请输入要查找的元素x:")) L=[1,2,3,4,5,6,7,8,9] found(L,x)
3. 已知一个n*n的二维数组a已经以行为主存放在一个大小为n2的一维数组b中,编写一个函数计算此二维数组的主对角线元素之和。count(b,n) def count(b,n): x=0 i=0 while True: x += b[i] i += n+1 if i > len(b): break print("主对角线元素之和为:%d"%x)
if __name__ == "__main__": a = [[1,2,3],[4,5,6],[7,8,9]] b = [] n = len(a) print("二维数组A为:") for i in range(n): . . .
for j in range(n): b.append(a[i][j]) print("%d"%a[i][j],end='\t') print() print("存放在一维数组b中为:") print(b) count(b,n)
4. 有一值为整型、长度为n的顺序表(列表),写一个函数,计算该顺序表所有元素的平均值,并输出所有大于平均值的元素。 def Average(L,n): nsum = 0 for i in range(n): nsum += L[i] average = nsum / n print("平均数为:%d"%average) print("所有大于平均值的元素为:") for i in L: if i > average: print(i,end=' ') else: continue
if __name__ == "__main__": L = [1,354,56,57,2,8,9,46,767,678] n = len(L) Average(L,n)
第3章 链表 一、选择题 1.以下关于链式存储结构的叙述中, C 是不正确的。 A.结点除自身信息外还包括指针域,因此空间利用率小于顺序存储结构 B.逻辑上相邻的结点物理上不必邻接 C.可以通过计算直接确定第i个结点的存储地址 D.插入、删除运算操作方便,不必移动结点 2. 在下列存储结构中,最适合实现在线性表中进行随机访问的是 A 。 A. 数组 B. 双向链表 C. 单向链表 D. 循环链表