知识大全 数据结构与算法线性表复习习题4

Posted 结点

篇首语:少而好学,如日出之阳;壮而好学,如日中之光;老而好学,如炳烛之明。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构与算法线性表复习习题4相关的知识,希望对你有一定的参考价值。

   已知指针la和lb分别指向两个无头结点单链表中的首元结点 下列算法是从表la中删除自第i个元素起共len个元素后 将它们插入到表lb中第i个元素之前 试问此算法是否正确?若有错 请改正之

  Status DeleteAndInsertSub(LinkedList la LinkedList lb int i int j int len)

  

  if(i< ||j< ||len< ) return INFEASIBLE;

  p=la;k= ;

  while(k<i)p=p >next;k++;

  q=p;

  while(k<=len)q=q >next;k++;

  s=lb; k= ;

  while(k<j)s=s >next;k++;

  s >next=p; q >next=s >next;

  return OK;

  

  解

  Status DeleteAndInsertSub(LinkList &la LinkList &lb int i int j int len)

  

  LinkList p q s prev=NULL;

  int k= ;

  if(i< ||j< ||len< ) return INFEASIBLE;

  // 在la表中查找第i个结点

  p=la;

  while(p&&k<i)

  prev=p;

  p=p >next;

  k++;

  

  if(!p)return INFEASIBLE;

  // 在la表中查找第i+len 个结点

  q=p;k= ;

  while(q&&k<len)

  q=p >next;

  k++;

  

  if(!q)return INFEASIBLE;

  // 完成删除 注意 i= 的情况需要特殊处理

  if(!prev) la=q >next;

  else prev >next=q >next;

  // 将从la中删除的结点插入到lb中

  if(j= )

  q >next=lb;

  lb=p;

  

  else

  s=lb;k= ;

  while(s&&k<j )

  s=s >next;

  k++;

  

  if(!s)return INFEASIBLE;

  q >next=s >next;

  s >next=p; //完成插入

  

  return OK;

  

   已知线性表中的元素以值递增有序排列 并以单链表作存储结构 试写一高效的算法 删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素) 同时释放被删结点空间 并分析你的算法的时间复杂度(注意 mink和maxk是给定的两个参变量 它们的值可以和表中的元素相同 也可以不同)

  解

  Status ListDelete_L(LinkList &L ElemType mink ElemType maxk)

  

  LinkList p q prev=NULL;

  if(mink>maxk)return ERROR;

  p=L;

  prev=p;

  p=p >next;

  while(p&&p >data<maxk)

  if(p >data<=mink)

  prev=p;

  p=p >next;

  

  else

  prev >next=p >next;

  q=p;

  p=p >next;

  free(q);

  

  

  return OK;

  

   同 题条件 试写一高效的算法 删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同) 同时释放被删结点空间 并分析你的算法的时间复杂度

  解

  void ListDelete_LSameNode(LinkList &L)

  

  LinkList p q prev;

  p=L;

  prev=p;

  p=p >next;

  while(p)

  prev=p;

  p=p >next;

  if(p&&p >data==prev >data)

  prev >next=p >next;

  q=p;

  p=p >next;

  free(q);

  

  

cha138/Article/program/sjjg/201311/23408

相关参考

知识大全 数据结构与算法线性表复习习题5[1]

  试写一算法对单链表实现就地逆置  解  //带头结点的单链表的逆置  StatusListOppose_L(LinkList&L)    LinkListpq;  p=L;  p=p>

知识大全 数据结构与算法线性表复习习题5[3]

      对题的条件作以下两点修改对单链表重新编写求得表C的算法  ()假设在同一表(A或B)中可能存在值相同的元素但要求新生成的表C中的

知识大全 数据结构与算法线性表复习习题5[2]

      要求同题试对单链表编写求C的算法  解  //将AB求交后的结果放在C表中并删除B表  StatusListCross_L(Li

知识大全 数据结构与算法线性表复习习题6[1]

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

知识大全 数据结构与算法线性表复习习题1

  第章 线性表  描述以下三个概念的区别头指针头结点首元结点(第一个元素结点)  解头指针是指向链表中第一个结点的指针首元结点是指链表中存储第一个数据元素的结点头结点是在首元结点之前附设的

知识大全 数据结构与算法线性表复习习题6[2]

      已知有一个单向循环链表其每个结点中含三个域predata和next其中data为数据域next为指向后继结点的指针域pre也为指

知识大全 数据结构与算法线性表复习习题6[3]

      假设在算法描述语言中引入指针的二元运算异或若a和b为指针则a⊕b的运算结果仍为原指针类型且  a⊕(a⊕b)=(a⊕a)⊕b=b

知识大全 数据结构与算法线性表复习习题2

  已知L是无表头结点的单链表且P结点既不是首元结点也不是尾元结点试从下列提供的答案中选择合适的语句序列  a在P结点后插入S结点的语句序列是__________________  b在P结点前插入S

知识大全 数据结构考研分类复习真题 第二章 线性表[39]

  已知长度为n的线性表A采用顺序存储结构请写一时间复杂度为(n)空间复杂度为()的算法该算法删除线性表中所有值为item的数据元素(O()表示算法的辅助空间为常量)  【北京航空航天大学五(分)】 

知识大全 数据结构考研分类复习真题 第二章 线性表[30]

  顺序结构线性表LA与LB的结点关键字为整数LA与LB的元素按非递减有序线性表空间足够大试用类PASCAL语言给出一种高效算法将LB中元素合到LA中使新的LA的元素仍保持非递减有序高效指最大限度的避