2014算法设计.docVIP

  • 77
  • 0
  • 约6.86千字
  • 约 7页
  • 2016-12-14 发布于北京
  • 举报
1.试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。 【题目分析】 本题要求在单链表中删除最小值结点。单链表中删除结点,为使结点删除后不出现“断链”,应知道被删结点的前驱。而“最小值结点”是在遍历整个链表后才能知道。所以算法应首先遍历链表,求得最小值结点及其前驱。遍历结束后再执行删除操作。 LinkedList Delete(LinkedList L) ∥L是带头结点的单链表,本算法删除其最小值结点。 {p=L-next; ∥p为工作指针。指向待处理的结点。假定链表非空。 pre=L;∥pre指向最小值结点的前驱。 q=p;∥q指向最小值结点,初始假定第一元素结点是最小值结点。 while(p-next!=null) {if(p-next-dataq-data){pre=p;q=p-next;} ∥查最小值结点p=p-next;∥指针后移。 } pre-next=q-next;∥从链表上删除最小值结点 free(q);∥释放最小值结点空间 }∥结束算法delete。 2.将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。 void MergeList_L(LinkList La,LinkList Lb,LinkList Lc){pa=La-next; p

文档评论(0)

1亿VIP精品文档

相关文档