当前位置: 高中信息技术 / 综合题
  • 1. (2019高二下·衢州期末) 小明探索用链表思想实现插入排序。链表由节点连接而成,每个节点包含一个数据域和一个指针域。为了模拟这个过程,小明用a数组保存链表数据域,b数组保存链表指针域,排序的过程就是将每个数据的指针域不断链接到已有的有序链表合适位置,形成更长 的链表,直到所有的数据均链接到链表中。

    例如将某节点插入到已有链表中,根据大小比较有三种情况:插入到最前面、插入到 最后、插入到中间,如图a所示,在链表中的节点 x 和节点 y之间插入节点n的过程示意:过程一(初始状态)如图1所示,链表中节点 x 的指针域指向节点y数据域,即图示①指向;过程二如图2所示,将节点n的指针域指向节点 y 数据域,即图示②指向;过程三如图 3 所示,将①指向断开,同时将节点 x 的指针域指向节点n数据域,即图示③指向;至此完成节点n的插入操作。

    图a

    具体程序设计方法如下:

    1)将待排序的n个数保存在a(1)~a(n),b(1)~b(n)保存对应a数组各元素的位置,形成 n个没有链接的节点;

    2)将a(1)结点看成只含有一个结点的链表head,且 head=1;

    3)将a(2)节点插入到链表head的适当位置,使head仍有序,此时head成为含有两个结点的有序链表;以此方法依次将a数组中的其他节点插入到链表head中,最后链表 head上包含所有结点,且结点有序。依次输出head链表的数据域即完成排序。

    程序运行界面如图b所示,采用此思想进行升序排序的 VB 代码如下,请回答下列问题。

    图b

    1. (1) 若用该算法对5 个数进行降序排序,a(1)~a(5)的值分别为“52,82,12,3,66”,排序完成后,head变量的值为
    2. (2) 为实现上述功能,请在划线处填入合适的代码。

      Private Sub Command1_Click()

      Dim a(1 To 100) As Integer  'a 数组存储待排序数据(数据域)

      Dim b(1 To 100) As Integer  'b 数组存储待排序数的位置(指针域) Randomize

      n = Val(Text1.Text)

      ‘随机产生 n 个待排序的数,并将 b 数组初始化(初始值全部指向自身)

      For i = 1 To n

      b(i) = i

      a(i) = Int(Rnd * 100) + 1

      List1.AddItem Str(b(i)) + "  " + Str(a(i))

      Next i head = 1

      For i = 2 To n k = head

      ‘插入到链表最前面

      If a(i) <= a(head) Then

      head = i

      Else

      ‘寻找插入位置

      Do While  k = b(k)

      Loop

      If b(k) <> k Then

      b(i) = b(k): b(k) = i Else

      b(k) = i End If

      End If Next i

      List2.AddItem Str(head) + "  " + Str(a(head))

      Do While head <> b(head)

      List2.AddItem Str(b(head)) + "  " + Str(a(b(head)))

      Loop

      End Sub

微信扫码预览、分享更方便