爱问知识人 爱问教育 医院库

为什么?对链表实施二分法查询是否有意义?

首页

为什么?对链表实施二分法查询是否有意义?

对链表实施二分法查询是否有意义,为什么?

提交回答

全部答案

    2014-04-11 18:18:03
  •   对于无序的链表,还是沿着头结点顺序查找比较好。
    如果要用二分法查找,则先将该链表进行排序,以下是我用冒泡法对单链表进行的排序:
    /*单链表排序(mark=1,降序;mark=0,升序)*/
    void SortList(LNode *L,int mark)
    {
    int i,j,change=TRUE;
    ElemType temp;
    LNode *p=L->next,*q;
    if(p && (p->next)) //如果单链表长度data && change;j++)
      {
       change=FALSE;
       p=L->next;
       q=p->next;
       for(i=0;idata-j;i++)
       {
        if((q->data>p->data && mark) || (q->datadata && (!mark)))
         {
          temp=p->data;
          p->data=q->data;
          q->data=temp;
          change=TRUE;
         }
        p=q;
        q=q->next;
       }
      }
     }
    printf("排序成功\r\n");
    }
    /*从链表的第curI个点处开始查找第i个结点,前提:i>curI*/
    LNode *GetElem2(LNode *L,int curI,int i)
    {
    LNode *p=L;
    while(p=p->next)
     if(i==(++curI)) {
      return p;
      }
    return NULL;
    }
    /*对排序后的链表进行二分法查找*/
    int DichotomyList(LNode *L,ElemType e)
    {
    LNode *p=L;
    int cur=0;//cur用来保存当前的位置结点,避免每次定位结点都从头结点开始
    int left=1,right=L->data;//我定义的链表,其头结点的数据域保存着链表的长度
    int mid=(left+right)/2;
    //SortList(L,0);
    while(leftdata!=e)
    {
    if(p->data>e) {cur=0;p=L;right=mid-1;mid=(left+right)/2;}
    else {cur=mid;left=mid+1;mid=(left+right)/2;}
    }
    if(p->data==e) {printf("find node in %d。
      \r\n",mid);return mid;} else {printf("find none。\r\n");return 0;} } 经VC上测度通过。

    矫***

    2014-04-11 18:18:03

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):