• 2022-06-03
    假设以两个元素依值递增有序排列的线性表 A 和 B 分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表 C ,其元素为 A 和 B 中元素的交集,且表 C 中的元素也依值递增有序排列。对上述条件作以下两点修改,对单链表重新编写求得表 C 的算法。(1)假设在同一表( A 或 B )中可能存在值相同的元素,但要求新生成的表 C 中的元素值各不相同;(2)利用原表( A 表或 B 表)中的结点构造表 C ,并释放 A 表中的无用结点空间。
  • 解  算法如下:void LinkList_Intersect_True(LinkList &A,LinkList B)//在链表结构上重做上题{      p=A->next;q=B->next;pc=A;      while(p&&q)      {            if(p->datadata) p=p->next;            else if(p->data>q->data) q=q->next;            else if(p->data!=pc->data)            {                 pc=pc->next;                 pc->data=p->data;                 p=p->next;q=q->next;            }      }//while}//LinkList_Intersect_True

    举一反三

    内容

    • 0

      一个顺序表元素值有序递增,编写算法,删除顺序表中值相同的多余元素.

    • 1

      假设有两个按元素值递增有序排列的线性表[tex=0.786x1.0]Yn3GgEZev6SOu2r4v1WnCw==[/tex]和[tex=0.786x1.0]ri6gmnf1+J9dGqG5/1sV6A==[/tex],均以单链表作存储结构,请编写算法将[tex=0.786x1.0]Yn3GgEZev6SOu2r4v1WnCw==[/tex]表和[tex=0.786x1.0]ri6gmnf1+J9dGqG5/1sV6A==[/tex]表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表[tex=0.714x1.0]J/aA9EEo0KmJFnWWfX7LmQ==[/tex],并要求利用原表(即表[tex=0.786x1.0]Yn3GgEZev6SOu2r4v1WnCw==[/tex]和[tex=0.786x1.0]ri6gmnf1+J9dGqG5/1sV6A==[/tex])的结点空间构造[tex=0.714x1.0]J/aA9EEo0KmJFnWWfX7LmQ==[/tex]表。

    • 2

      已知 A 、 B 和 C 为3个递增有序的线性表,现要求对 A 表作如下操作:删去那些既在 B表中出现又在 C 表中出现的元素。试对顺序表编写实现上述操作的算法,并分析你的算法的时间复杂度(注意:题中没有特别指明同一表中的元素值各不相同)。

    • 3

      已知有两个按元素值递增有序的顺序表A和B(这样的顺序表称递增有序顺序表)。设计一个算法将顺序表A和B的全部元素归并到一个按元素递增有序的顺序表C中。并分析算法的空间复杂度和时间复杂度。

    • 4

      【简答题】已知线性表的元素按递增顺序排列,并以带头结点的单链表作存储结构。试编写一个删除表中所有值大于min且小于max的元素(若表中存在这样的元素)的算法