|试卷下载
终身会员
搜索
    上传资料 赚现金
    第二单元初识数据结构 练习及参考答案
    立即下载
    加入资料篮
    第二单元初识数据结构 练习及参考答案01
    第二单元初识数据结构 练习及参考答案02
    第二单元初识数据结构 练习及参考答案03
    还剩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乘客表

    data

    link

    Liu

    7

    Chen

    4

    Wang

    5

    Bao

    2

    Mai

    8

    Dong

    6

    Xi

    0

    Deng

    5

    Chang

    3

     

    *4.约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3,n分别表示)围坐在一张圆桌周围。编号为k的人从1始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个出列;依此规律重复下去,直到圆桌周围的人全部出列。请用单链表设计一个程序求出出列顺序(单链表最后一个结点的指针指向链表的首结点)

     

     

     

    参考答案

    1.

    import random

    class 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 ')

         return

    else:

    self.data[ self. num]= value

        self. num+=1

    #表任意位置插入操作:

     def insert( self, i, value):

       if not isinstance(i, int):

          raise  TypeError

    if 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]= value

    self. num +=1

    #对数据进行排序

     def sortlist( self):

    i=0

    j=0

    temp=0

    for 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=0

    if( 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+1

    Print(self.data[i])

    Print(一共有,t,)

    #小于key的数据递减排列

    def dijian( self, key):

      t=0

    for i in range(0,self.num):

    if( self.data[i] <key):

    t=t+1

    t=t-1

    K=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]= temp

    t=t-1

    #删除某一位置的操作

    def remove( self,i):

     if not isinstance(i, int)

        raise TypeError

     if i< 0 and i >= self.num:

     raise IndexError

    for 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-=1

    def 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=0

    while(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=pnext

    def _repr_(self):

      return str( self.data)

    class NodeList:

    ,,,

    head:头结点

    Length:链表长度

     ,,,

    def _init_(self):

    self.head=Nine

    self.length =0

    #判断链表是否为空

     def isEmpty( self):

        return (self.length== 0)

    #最后一位添加元素

     def append( self, dataOrNode):

    item=Node

    if isinstance( dataOrNode,Node):

          item=dataOrNode

    else:

    item=Node(dataOrNode)

    if not self. head:

    self. head=item

    self.length+=1

    else:

    node=self. head

    while node._next

          Node=node._next

    node._next=item

        self.length + =1

    #删除元素

    def delete( self, index):

     if self.isEmpty():

            print("ERROR: NODELIST EMPTY")

            return

    if index <0 or index > self length:

       print(error: out of index")

        return

    if index == 0:

        self. head =self.head. _next

        self.length-=1

    return

    j=0

    Node=self.head

    prev=self.head

    while node. _next and j< index:

    prev=node

    node=node._next

    self.length -=1

    #更新元素

    def update( self, index, data):

       if self.isEmpty() or index <0 or index > self.length:

          print(ERROR: OUT OF INDEX)

          return

    j=0

    Node=self.head

    while node._ next and j< index:

     node=node._next

         j+=1

    if j== index:

       node.data=data

    #获取元素

    def getltem( self, index):

       if self.isEmpty() or index <0 or index >=self.length:

          print("ERROR: OUT OF INDEX)

          return

    j=0

    node=self.head

    while node._next and j< index:

         node=node._next 

         j+=1

    return node.data

    #找到特定元素的位置

    def getIndex( self, data)

        j=0

    if self. isEmpty():

            print("ERROR: NODELIST EMPTY")

    return

    node=self.head

    while node:

            if node.data = data:

       return  j

    node=node._next

    j+=1

    if j==self.length:

    print("%s not found"% str( data))

    return

    #index的位置插入元素

    def insert( self, index, dataOrNode):

       if self.isEmpty():

    print("ERROR: NODELIST EMPTY")

    return

    if index <0 or index > self length:

            print("ERROR: OUT OF INDEX)

     return

    item = Node

    If isintance( dataOrNode,Node):

    item =Node( dataOrNode)

    if index ==0:

       item._next= self.head

       self. head=item

       self.length += 1

     return

    j=0

    node=self. head

    prev=self. head

    while node._next and j< index:

    prev=node

    node=node._next

    j+=1

    if j== index:

      item. _next =node

    prev. _next=item

    self.length += 1

    #清空

    def clear( self):

       self. head =None

     self.length=0

    def _repr_(self):

    if self isEmpty()

           print("ERROR: NODELIST EMPTY")

           return

    node=self. head

    nlist=

    while node

    nlist += str( node.data)+

            node=node._ next

         return nlist

    def _getitem_(self,ind):

    if self.isEmpy() or ind <0 or ind >= self.length:

          print("ERROR: OUT OF INDEX")

          return

    return self. getltem( ind)

    def _setitem_( self, ind, val)

      if self.isEmpty() or ind <0 or ind >= self.length:

          print("ERROR: OUT OF INDEX")

          return

    self.update( ind, val)

     def_len_(self):

     return self.length

    #------------------------------以下是二次多项式的运算-------------------------------------

    import Nodelist

    class Fomula:

    ,,,

    a,b,c方程系数

       ,,,

    #init

    def _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

     #add

    def add( self, fomula2):

      f1 =self.nodelist.head

      f2 =fomula2.nodeList.head

     while (f1! =None)

        f1.data += f2. data

    f1=f1.next

    f2=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._next

    ratio-=1

    return value

     #calculate result

     def calResult( self):

     f= self.nodeList. head

     list=[]

    while(f! =None):

             list append( f.data)

             f=f._ next

    temp=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]]

    #Demonstration

    def show( self):

    f =self.nodelist. head

    list=[]

    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.某航空公司有一个自动预订飞机票的系统,假设该系统中有一张用单链表表示的乘客表,如下表所示。表中结点按乘客姓氏的字母次序进行链接(指针暂用序号表示),请为该系统编写有新乘客订票时修改乘客表的程序。

    data

    link

    Liu

    7

    Chen

    4

    Wang

    5

    Bao

    2

    Mai

    8

    Dong

    6

    Xi

    0

    Deng

    5

    Chang

    3

     

    参考答案:

    #本题需要用到第二题链表的创建 Nodelist.py

    import NodeList

    nodelist= 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. next

    Position+=1

    else:

    nodeList. insert( position, curString)

        break

    if (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.head

    while(head!= None):

           print( head.data)

           head =head. next

    1s= input("输入姓名(输入#结束)\n)

    while (Is! = #):

      try:

    Insert(1s)

    Head= nodelist.head

    while(head! =None)

              print( head.data)

              head! =head._next

    1s= input("输入姓名(输入#结束)\n)

     except Exception as e:

    Print(e)

    break

    4.约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知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 False

    if n==1:

                return Node(1)

    else:

    root = Node( 1)

          tmp=root

          for i in range(2, n+1):

              tmp.next = Node(i)

    tmp=tmp.next

    tmp.next=root

          return root

     def showLink(root):   #打印链表

       tmp=root

    while True:

           Print(rmp.value)

           tmp=tmp.next

             if tmp == None or tmp == root:

    break

    def josephus(n,k,p)#具体的出圈

      if k==1:

    print(最后出列n)

          return

    root=createLink( n)

        tmp=root

    pT =1

        while (pT< p):

        tmp=tmp.next

    pT+ =1

    while True:

       for i in range(k-2):

       tmp=tmp.next

    print(出列:tmp.next.value)

      tmp.next=tmp.next.next

      tmp=tmp. next

      if tmp.ext =tmp:

         break

    print(最后出列:,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页。试卷主要包含了选择题,填空题,操作题等内容,欢迎下载使用。

    免费资料下载额度不足,请先充值

    每充值一元即可获得5份免费资料下载额度

    今日免费资料下载份数已用完,请明天再来。

    充值学贝或者加入云校通,全网资料任意下。

    提示

    您所在的“深圳市第一中学”云校通为试用账号,试用账号每位老师每日最多可下载 10 份资料 (今日还可下载 0 份),请取消部分资料后重试或选择从个人账户扣费下载。

    您所在的“深深圳市第一中学”云校通为试用账号,试用账号每位老师每日最多可下载10份资料,您的当日额度已用完,请明天再来,或选择从个人账户扣费下载。

    您所在的“深圳市第一中学”云校通余额已不足,请提醒校管理员续费或选择从个人账户扣费下载。

    重新选择
    明天再来
    个人账户下载
    下载确认
    您当前为教习网VIP用户,下载已享8.5折优惠
    您当前为云校通用户,下载免费
    下载需要:
    本次下载:免费
    账户余额:0 学贝
    首次下载后60天内可免费重复下载
    立即下载
    即将下载:资料
    资料售价:学贝 账户剩余:学贝
    选择教习网的4大理由
    • 更专业
      地区版本全覆盖, 同步最新教材, 公开课⾸选;1200+名校合作, 5600+⼀线名师供稿
    • 更丰富
      涵盖课件/教案/试卷/素材等各种教学资源;900万+优选资源 ⽇更新5000+
    • 更便捷
      课件/教案/试卷配套, 打包下载;手机/电脑随时随地浏览;⽆⽔印, 下载即可⽤
    • 真低价
      超⾼性价⽐, 让优质资源普惠更多师⽣
    VIP权益介绍
    • 充值学贝下载 本单免费 90%的用户选择
    • 扫码直接下载
    元开通VIP,立享充值加送10%学贝及全站85折下载
    您当前为VIP用户,已享全站下载85折优惠,充值学贝可获10%赠送
      充值到账1学贝=0.1元
      0学贝
      本次充值学贝
      0学贝
      VIP充值赠送
      0学贝
      下载消耗
      0学贝
      资料原价
      100学贝
      VIP下载优惠
      0学贝
      0学贝
      下载后剩余学贝永久有效
      0学贝
      • 微信
      • 支付宝
      支付:¥
      元开通VIP,立享充值加送10%学贝及全站85折下载
      您当前为VIP用户,已享全站下载85折优惠,充值学贝可获10%赠送
      扫码支付0直接下载
      • 微信
      • 支付宝
      微信扫码支付
      充值学贝下载,立省60% 充值学贝下载,本次下载免费
        下载成功

        Ctrl + Shift + J 查看文件保存位置

        若下载不成功,可重新下载,或查看 资料下载帮助

        本资源来自成套资源

        更多精品资料

        正在打包资料,请稍候…

        预计需要约10秒钟,请勿关闭页面

        服务器繁忙,打包失败

        请联系右侧的在线客服解决

        单次下载文件已超2GB,请分批下载

        请单份下载或分批下载

        支付后60天内可免费重复下载

        我知道了
        正在提交订单

        欢迎来到教习网

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

        微信扫码,快速注册

        还可免费领教师专享福利「樊登读书VIP」

        手机号注册
        手机号码

        手机号格式错误

        手机验证码 获取验证码

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

        设置密码

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

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

        注册成功

        下载确认

        下载需要:0 张下载券

        账户可用:0 张下载券

        立即下载
        账户可用下载券不足,请取消部分资料或者使用学贝继续下载 学贝支付

        如何免费获得下载券?

        加入教习网教师福利群,群内会不定期免费赠送下载券及各种教学资源, 立即入群

        即将下载

        第二单元初识数据结构 练习及参考答案
        该资料来自成套资源,打包下载更省心 该专辑正在参与特惠活动,低至4折起
        [共10份]
        浏览全套
          立即下载(共1份)
          返回
          顶部
          Baidu
          map