知识大全 数据结构考研分类复习真题 第二章 答案[33]

Posted 结点

篇首语:贫不足羞,可羞是贫而无志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第二章 答案[33]相关的知识,希望对你有一定的参考价值。

   .[题目分析] 在单链表中删除自第i个元素起的共len个元素 应从第 个元素起开始计数 记到第i个时开始数len个 然后将第i 个元素的后继指针指向第i+len个结点 实现了在A链表中删除自第i个起的len个结点 这时应继续查到A的尾结点 得到删除元素后的A链表 再查B链表的第j个元素 将A链表插入之 插入和删除中应注意前驱后继关系 不能使链表 断链 另外 算法中应判断i len和j的合法性

  LinkedList  DelInsert(LinkedList heada headb int i j len)∥heada和headb均是带头结点的单链表 本算法删除heada链表中自第i个元素起的共len个元素 然后将单链表heada插入到headb的第j个元素之前   if(i< || len< || j< )printf( 参数错误\\n );exit( );∥参数错 退出算法   p=heada;∥p为链表A的工作指针 初始化为A的头指针 查到第i个元素时 p指向第i 个元素  k= ;∥计数  while(p!=null && k<i )∥查找第i个结点   k++;p=p >next;  if(p==null)printf( 给的%d太大\\n i);exit( );∥i太大 退出算法  q=p >next;∥q为工作指针 初始指向A链表第一个被删结点   k= ;  while(q!=null && k<len)k++;u=q q=q >next;free(u);∥删除结点 后移指针   if(k<len)printf( 给的%d太大\\n len);exit( );  p >next=q;∥A链表删除了len个元素   if (heada >next!=null)∥heada >next=null说明链表中结点均已删除 无需往B表插入  while(p >next!=null)p= p >next;∥找A的尾结点   q=headb;∥q为链表B的工作指针   k= ;∥计数  while(q!=null && k<j )∥查找第j个结点   k++;q= q >next;∥查找成功时 q指向第j 个结点  if(q==null)printf( 给的%d太大\\n j);exit( );  p >next=q >next;∥将A链表链入  q >next=heada >next;∥A的第一元素结点链在B的第j 个结点之后  //if  free(heada);∥释放A表头结点   ∥算法结束

cha138/Article/program/sjjg/201311/23337

相关参考