《数据结构(C++版)(第二版)》第02篇.pptVIP

  • 3
  • 0
  • 约1.79万字
  • 约 54页
  • 2017-06-24 发布于湖北
  • 举报
循环链表上的运算与单链表上的运算基本一致,区别只在于最后一个结点的判断(即循环的条件不同),但利用循环链表实现某些运算较单链表方便(从某个结点出发能求出它的直接前驱,而单链表是不行的,只能从头出发)。 【例2-3】在如下图所示的单循环链表中,求P的直接前驱(从P出发,而不从head出发),算法如下: link *link::prior(link *head , link *p) { link *q; q=p-next; while(q-next!=p) q=q-next; return q; } 显然该算法的时间复杂度为O(n)。 既然是循环链表, head指针就可以指向任意结点,若将head指向末尾,有时的操作会比head指向开头的操作更方便,下面将举例说明。 【例2-4】将两个链表合并成一个链表(第一个表的尾接第二个表的头),要求用head指向头和head指向尾两种循环链表实现,分别如下图一和图二所示。 图一 图二 对第一种合并算法,可以分三步走: 第一步,先找到head1中最后一个结点an ,语句描述为: p=head1-next; while(p-next!=head1) p=p-next; 第二步,找到head2中最后一个结点bm ,语句描述为: q=head2-next; while(q-next!=head2) q=q-next; 第三步,合并,

文档评论(0)

1亿VIP精品文档

相关文档