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

Posted 结点

篇首语:无私是稀有的道德,因为从它身上是无利可图的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第二章 答案[31]相关的知识,希望对你有一定的参考价值。

   .[题目分析]  知道双向循环链表中的一个结点 与前驱交换涉及到四个结点(p结点 前驱结点 前驱的前驱结点 后继结点)六条链   void  Exchange(LinkedList p)∥p是双向循环链表中的一个结点 本算法将p所指结点与其前驱结点交换   q=p >llink;  q >llink >rlink=p;∥p的前驱的前驱之后继为p  p >llink=q >llink;∥p的前驱指向其前驱的前驱   q >rlink=p >rlink;∥p的前驱的后继为p的后继   q >llink=p;∥p与其前驱交换  p >rlink >llink=q;∥p的后继的前驱指向原p的前驱  p >rlink=q;∥p的后继指向其原来的前驱  ∥算法exchange结束

   .[题目分析] 顺序存储的线性表递增有序 可以顺序查找 也可折半查找 题目要求 用最少的时间在表中查找数值为x的元素 这里应使用折半查找方法

  void  SearchExchangeInsert(ElemType a[];ElemType x)∥a是具有n个元素的递增有序线性表 顺序存储 本算法在表中查找数值为x的元素 如查到则与其后继交换位置;如查不到 则插入表中 且使表仍递增有序    low= ;high=n ;∥low和high指向线性表下界和上界的下标  while(low<=high)  mid=(low+high)/ ;∥找中间位置  if(a[mid]==x) break;∥找到x 退出while循环   else if (a[mid] <x) low=mid+ ;∥到中点mid的右半去查   else high=mid ;∥到中点mid的左部去查     if(a[mid]==x && mid!=n)∥若最后一个元素与x相等 则不存在与其后继交换的操作   t=a[mid];a[mid]=a[mid+ ];a[mid+ ]=t;∥数值x与其后继元素位置交换   if(low>high)∥查找失败 插入数据元素x  for(i=n ;i>high;i ) a[i+ ]=a[i];∥后移元素   a[i+ ]=x;∥插入x   ∥结束插入  ∥结束本算法

  [算法讨论] 首先是线性表的描述 算法中使用一维数组a表示线性表 未使用包含数据元素的一维数组和指示线性表长度的结构体 若使用结构体 对元素的引用应使用a elem[i] 另外元素类型就假定是ElemType 未指明具体类型 其次 C中一维数组下标从 开始 若说有n个元素的一维数组 其最后一个元素的下标应是n 第三 本算法可以写成三个函数 查找函数 交换后继函数与插入函数 写成三个函数显得逻辑清晰 易读

cha138/Article/program/sjjg/201311/23335

相关参考