终身会员
搜索
    上传资料 赚现金

    第二单元初识数据结构 练习及参考答案

    立即下载
    加入资料篮
    第二单元初识数据结构 练习及参考答案第1页
    第二单元初识数据结构 练习及参考答案第2页
    第二单元初识数据结构 练习及参考答案第3页
    还剩9页未读, 继续阅读
    下载需要10学贝 1学贝=0.1元
    使用下载券免费下载
    加入资料篮
    立即下载

    高中信息技术沪教版(2019)选修1 数据与数据结构第二单元 初识数据结构本章综合与测试优秀当堂达标检测题

    展开

    这是一份高中信息技术沪教版(2019)选修1 数据与数据结构第二单元 初识数据结构本章综合与测试优秀当堂达标检测题,共12页。试卷主要包含了约瑟夫环是一个数学的应用问题等内容,欢迎下载使用。
    第二单元单元练习及参考答案 1.设有一个正整数序列组成的有序表(按递增次序有序,且允许有相等的整数存在),请编写能实现下列功能的程序:(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次,如序列{20,20,17,16,15,15,11,10,8,7,7,5,4}中比10大的数有5)(2)将比正整数x小的数按递减次序排列;(3)将比正整数x大的偶数删除。(4)比较使用数组和链表实现上述功能的优劣。2.把二次多项式ax2+bx+c设计成一种抽象数据类型,该类型的数据对象为三个系数项a,bc,操作部分为:(1)初始化a,bc的值;(2)做两个多项式加法;(3)根据给定x的值计算多项式的值;(4)计算方程ax2+bx+c=0的两个实数根;(5)按照ax**2+bx+c的格式输出二次多项式 3.某航空公司有一个自动预订飞机票的系统,假设该系统中有一张用单链表表示的乘客表,见表2-7。表中结点按乘客姓氏的字母次序进行链接(指针暂用序号表示),请为该系统编写有新乘客订票时修改乘客表的程序。2-7乘客表datalinkLiu7Chen4Wang5Bao2Mai8Dong6Xi0Deng5Chang3 *4.约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3,n分别表示)围坐在一张圆桌周围。编号为k的人从1始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个出列;依此规律重复下去,直到圆桌周围的人全部出列。请用单链表设计一个程序求出出列顺序(单链表最后一个结点的指针指向链表的首结点)   参考答案1.import randomclass SeqList( object) def _init_ (self, max=100):self.max = max  #默认顺序表最多容纳10个元素#初始化顺序表数组    self. num =0    self.data [None] *self.max def is_empty(self)#判定线性表是否为空   return self. num is 0 def is_full(self)):  #判定线性表是否全满   return self. num is self. max#统计线性表中元素的个数 def  Count(self):    return self. num#表末尾插入操作 def  appendLast( self,value):   if self. num >= self.max:     print(The list is full ')     returnelse:self.data[ self. num]= value    self. num+=1#表任意位置插入操作: def insert( self, i, value):   if not isinstance(i, int):      raise  TypeErrorif i <0 and i self.num:      raise  IndexError for j in range( self. num, i-1, -1):       self.data[j]= self.data[i-1]    self data[i]= valueself. num +=1#对数据进行排序 def sortlist( self):i=0j=0temp=0for i in range( self num-1):        for j in range( i+1, self. num): if( self.data[j]<self.data[i]):                temp=self.data[i]                self.data[i]=self.data[j]                Self.data[j]=temp#找比key大的,不重复的数据def compareList( self, key):    t=0if( self.data[0]>key)t=t+1  Print(self.data[0])for i in range(1,self.num-1):if( self.data[i]>key and self. data[i]!=self.data(i-1]):t=t+1Print(self.data[i])Print(一共有,t,)#小于key的数据递减排列def dijian( self, key):  t=0for i in range(0,self.num):if( self.data[i] <key):t=t+1t=t-1K=int(t/2)temp=0 #print(------------k, t------------,k,t)for i in range(0,k):temp=self.data[i]    self.data[i]= self.data[t]    sel.data[t]= tempt=t-1#删除某一位置的操作def remove( self,i): if not isinstance(i, int)    raise TypeError if i< 0 and i >= self.num: raise IndexErrorfor j in range(i,self.num-1)#此处是self.num-1,因为循环中是j+1   #print(j, self data[j],self. data[j+1])   self.data[j]=self.data[j+1]) self.num-=1def delete( self, index) for i in range( index, self.num-1)    self.data[i] =self.data[i+ 1]  self.num-=1#删除key之后的偶数 def deleteKey( self, key):  i=0while(i <self.num)   if( self.data[i]> key and self.data(i)% 2== 0)     self. delete(i)  else:i+=1#输出操作 def printlist( self):   for i in range(0, self. num):     print( self data[i])#print()Print(----------------------------)#销毁操作def destroy( self): self. _init_()seq=SeqList(20) for i in range(10)#创建10个随机数的数据   t=random.randint(1, 100)#print(t)seq.appendLast(t)# print("*******")Seq.appendLast( seq.data[0])Seq.appendLast( seq.data[1])Seq.appendLast( seq.data[2])Seq.appendLast( seq.data[3])Seq.appendLast( seq.data[2])Seq.appendLast( seq.data[2])#seq.printList()  #输出排序前的数据seq. sortList()  #对数据进行排序seq.printList()  #出排序后的数据x=int(input("请输入要比较的数字:"))seq. compareList(x) #x比较,统计比x大的数据个数print(将比x小的数按递减次序排列:")seq.printList()print("将比x大的偶数删除:")seq. deleteKey(x)  #删除比x大的偶数seq. printList() 2.把二次多项式ax2+bx+c设计成一种抽象数据类型,类型的数据对象为三个系数项a,bc,操作部分为:初始化a,bc的值;做两个多项式加法;根据给定x的值计算多项式的值;计算方程ax2+bx+c=0的两个实数根;按照ax**2+bx+c的格式输出二次多项式。参考答案:先创建链表,命名为 NodeList.py,程序在第3题也需要使用 #NodeList. py class Node:,,,data:结点保存的数据_next:保存下一个结点对象,,, def _init_(self, data,pnext=None):  self. data = data  self. Next=pnextdef _repr_(self):  return str( self.data)class NodeList:,,,head:头结点Length:链表长度 ,,,def _init_(self):self.head=Nineself.length =0#判断链表是否为空 def isEmpty( self):    return (self.length== 0)#最后一位添加元素 def append( self, dataOrNode):item=Nodeif isinstance( dataOrNode,Node):      item=dataOrNodeelse:item=Node(dataOrNode)if not self. head:self. head=itemself.length+=1else:node=self. headwhile node._next      Node=node._nextnode._next=item    self.length + =1#删除元素def delete( self, index): if self.isEmpty():        print("ERROR: NODELIST EMPTY")        returnif index <0 or index > self length:   print(error: out of index")    returnif index == 0:    self. head =self.head. _next    self.length-=1returnj=0Node=self.headprev=self.headwhile node. _next and j< index:prev=nodenode=node._nextself.length -=1#更新元素def update( self, index, data):   if self.isEmpty() or index <0 or index > self.length:      print(ERROR: OUT OF INDEX)      returnj=0Node=self.headwhile node._ next and j< index: node=node._next     j+=1if j== index:   node.data=data#获取元素def getltem( self, index):   if self.isEmpty() or index <0 or index >=self.length:      print("ERROR: OUT OF INDEX)      returnj=0node=self.headwhile node._next and j< index:     node=node._next       j+=1return node.data#找到特定元素的位置def getIndex( self, data)    j=0if self. isEmpty():        print("ERROR: NODELIST EMPTY") returnnode=self.headwhile node:        if node.data = data:   return  jnode=node._nextj+=1if j==self.length:print("%s not found"% str( data))return#index的位置插入元素def insert( self, index, dataOrNode):   if self.isEmpty():print("ERROR: NODELIST EMPTY")returnif index <0 or index > self length:        print("ERROR: OUT OF INDEX) returnitem = NodeIf isintance( dataOrNode,Node):item =Node( dataOrNode)if index ==0:   item._next= self.head   self. head=item   self.length += 1 returnj=0node=self. headprev=self. headwhile node._next and j< index:prev=node node=node._nextj+=1if j== index:  item. _next =nodeprev. _next=itemself.length += 1#清空def clear( self):   self. head =None self.length=0def _repr_(self):if self isEmpty()       print("ERROR: NODELIST EMPTY")       returnnode=self. headnlist= while nodenlist += str( node.data)+         node=node._ next     return nlistdef _getitem_(self,ind):if self.isEmpy() or ind <0 or ind >= self.length:      print("ERROR: OUT OF INDEX")      returnreturn self. getltem( ind)def _setitem_( self, ind, val)  if self.isEmpty() or ind <0 or ind >= self.length:      print("ERROR: OUT OF INDEX")      returnself.update( ind, val) def_len_(self): return self.length#------------------------------以下是二次多项式的运算-------------------------------------import Nodelistclass Fomula:,,,a,b,c方程系数   ,,,#initdef _init_(self, a, b, c): nodeA= NodeList. Node( a) nodeB =Nodelist. Node( b) nodeC =NodeList.Node( c) nodeList =Nodelist.NodeList() nodeList. append( nodeA) nodeList. append( nodeB) nodeList append( nodeC) Self.nodeList= nodeList #adddef add( self, fomula2):  f1 =self.nodelist.head  f2 =fomula2.nodeList.head while (f1! =None)    f1.data += f2. dataf1=f1.nextf2=f2.next # calculate the sum def calValue( self, x): value=0     ratio= 2     f= self.nodelist.head     while (f!=None):        value += f.data *(x** ratio)    f=f._nextratio-=1return value #calculate result def calResult( self): f= self.nodeList. head list=[]while(f! =None):         list append( f.data)         f=f._ nexttemp=list[1]**2-4*list[0]*list[2] if temp<0    return ERROR: NO ANSWER elif temp==0   return -list[1]/(2* list[0])else:   return[(-list[1]+temp**0.5)/2/list[0],(-list[1]-temp**0.5)/2/list[0]]#Demonstrationdef show( self):f =self.nodelist. headlist=[]while (f! =None):        list.append( f data)        f=f._next     return str( list [0]+x**2++str( list[1]+x++str( list[ 2]) If _name_==_main_:print( fomula. Show())  print( fomula. calResult())  print( fomula. calValue(2))  fomulaNew=fomula(2, 4, 0)  fomula.add(fomulaNew)print( fomula show())  print( fomula. calResult())  print( fomula. calRValue( 2)) 3.某航空公司有一个自动预订飞机票的系统,假设该系统中有一张用单链表表示的乘客表,如下表所示。表中结点按乘客姓氏的字母次序进行链接(指针暂用序号表示),请为该系统编写有新乘客订票时修改乘客表的程序。datalinkLiu7Chen4Wang5Bao2Mai8Dong6Xi0Deng5Chang3 参考答案:#本题需要用到第二题链表的创建 Nodelist.pyimport NodeListnodelist= Nodelist, Nodelist()def insert( curString)  if nodeList. isEmptyo()     nodeList. append( curString)else:head= nodeList.head    position =0    While(head!=None):if (curString > head.data):           head = head. nextPosition+=1 else:nodeList. insert( position, curString)    breakif (head == None):    nodeList.append(curString) def init():   initialSet =["Liu", "Chen","Wang","Bao", "Mai","Dong","Xi", "Deng",Chang]   for i in range( initialSet. _len_()):   insert(initialSet[i])If _name_==_main_:init()head nodeList.headwhile(head!= None):       print( head.data)       head =head. next1s= input("输入姓名(输入#结束)\n)while (Is! = #):  try:Insert(1s)Head= nodelist.headwhile(head! =None)          print( head.data)          head! =head._next1s= input("输入姓名(输入#结束)\n) except Exception as e:Print(e)break4.约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3分别表示)围坐在一张圆桌周围。编号为k的人从1开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人出列;依此规律重复下去,直到圆桌周围的人全部出列。请用单链表设计一个程序求出出列顺序(单链表最后一个结点的指针指向链表的首结点)    class Node()#定义结点       def_init_(self, value,next=None):          self.value=value          self.next=next def createLink(n)#创建链表    if n<=0: return Falseif n==1:            return Node(1) else:root = Node( 1)      tmp=root      for i in range(2, n+1):          tmp.next = Node(i)tmp=tmp.nexttmp.next=root      return root def showLink(root):   #打印链表   tmp=rootwhile True:        Print(rmp.value)       tmp=tmp.next         if tmp == None or tmp == root:breakdef josephus(n,k,p)#具体的出圈  if k==1:print(最后出列n)      returnroot=createLink( n)    tmp=rootpT =1    while (pT< p):    tmp=tmp.nextpT+ =1while True:   for i in range(k-2):   tmp=tmp.nextprint(出列:tmp.next.value)  tmp.next=tmp.next.next  tmp=tmp. next  if tmp.ext =tmp:     breakprint(最后出列:,tmp.value)If _name_==_main_:n=int(input(请输入总人数:"))m=int(input("请输入m:))p=int(input("请输入开始的位置p:"))Josephus(n,m,p)Print(------------------------)                                         

    相关试卷

    高中信息技术沪教版 (2019)选修1 数据与数据结构1.问题分析课后复习题:

    这是一份高中信息技术沪教版 (2019)选修1 数据与数据结构1.问题分析课后复习题,共60页。PPT课件主要包含了第三章房间篇,◇物业服务等内容,欢迎下载使用。

    1.1初识多媒体技术同步练习沪科版信息技术选修2:

    这是一份高中信息技术教科版 (2019)选修4 人工智能初步本册综合复习练习题,共5页。试卷主要包含了选择题,填空题,判断题,操作题,简答题等内容,欢迎下载使用。

    4.1初识面向对象程序设计思想同步练习沪科版信息技术选修1:

    这是一份教科版 (2019)选修4 人工智能初步本册综合达标测试,共9页。试卷主要包含了选择题,填空题,操作题等内容,欢迎下载使用。

    欢迎来到教习网
    • 900万优选资源,让备课更轻松
    • 600万优选试题,支持自由组卷
    • 高质量可编辑,日均更新2000+
    • 百万教师选择,专业更值得信赖
    微信扫码注册
    qrcode
    二维码已过期
    刷新

    微信扫码,快速注册

    手机号注册
    手机号码

    手机号格式错误

    手机验证码 获取验证码

    手机验证码已经成功发送,5分钟内有效

    设置密码

    6-20个字符,数字、字母或符号

    注册即视为同意教习网「注册协议」「隐私条款」
    QQ注册
    手机号注册
    微信注册

    注册成功

    返回
    顶部
    Baidu
    map