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

Posted 结点

篇首语:学者有自立之志,当拔出流俗,不可泛泛与世浮沉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构与算法线性表复习习题3相关的知识,希望对你有一定的参考价值。

   指出以下算法中的错误和低效之处 并将它改写为一个既正确又高效的算法

  Status DeleteK(SqList &a int i int k)

  

  //本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素

  if(i< ||k< ||i+k>a length) return INFEASIBLE;//参数不合法

  else

  for(count= ;count<k;count++)

  //删除第一个元素

  for(j=a length;j>=i+ ;j ) a elem[j i]=a elem[j];

  a length ;

  

  return OK;

  

  解

  Status DeleteK(SqList &a int i int k)

  

  //从顺序存储结构的线性表a中删除第i个元素起的k个元素

  //注意i的编号从 开始

  int j;

  if(i< ||i>a length ||k< ||k>a length i) return INFEASIBLE;

  for(j= ;j<=k;j++)

  a elem[j+i]=a elem[j+i+k];

  a length=a length k;

  return OK;

  

   设顺序表va中的数据元素递增有序 试写一算法 将x插入到顺序表的适当位置上 以保持该表的有序性

  解

  Status InsertOrderList(SqList &va ElemType x)

  

  //在非递减的顺序表va中插入元素x并使其仍成为顺序表的算法

  int i;

  if(va length==va listsize)return(OVERFLOW);

  for(i=va length;i> x<va elem[i ];i )

  va elem[i]=va elem[i ];

  va elem[i]=x;

  va length++;

  return OK;

  

   试写一算法在带头结点的单链表结构上实现线性表操作Locate(L x);

  解

  int LocateElem_L(LinkList &L ElemType x)

  

  int i= ;

  LinkList p=L;

  while(p&&p >data!=x)

  p=p >next;

  i++;

  

  if(!p) return ;

  else return i;

  

   试写一算法在带头结点的单链表结构上实现线性表操作Length(L)

  解

  //返回单链表的长度

  int ListLength_L(LinkList &L)

  

  int i= ;

  LinkList p=L;

  if(p) p=p next;

  while(p)

  p=p >next;

  i++;

  

  return i;

  

   已知指针ha和hb分别指向两个单链表的头结点 并且已知两个链表的长度分别为m和n 试写一算法将这两个链表连接在一起 假设指针hc指向连接后的链表的头结点 并要求算法以尽可能短的时间完成连接运算 请分析你的算法的时间复杂度

  解

  void MergeList_L(LinkList &ha LinkList &hb LinkList &hc)

  

  LinkList pa pb;

  pa=ha;

  pb=hb;

  while(pa >next&&pb >next)

  pa=pa >next;

  pb=pb >next;

  

  if(!pa >next)

  hc=hb;

  while(pb >next) pb=pb >next;

  pb >next=ha >next;

  

  else

  hc=ha;

  while(pa >next) pa=pa >next;

  pa >next=hb >next;

  

cha138/Article/program/sjjg/201311/23409

相关参考