为什么?对链表实施二分法查询是否有意义?
对链表实施二分法查询是否有意义,为什么?
对于无序的链表,还是沿着头结点顺序查找比较好。 如果要用二分法查找,则先将该链表进行排序,以下是我用冒泡法对单链表进行的排序: /*单链表排序(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上测度通过。
答:C与C++语言里面对于整数除法的运算是取整的。 你定义的序数是整数类型, 那么经过整数除法运算以后得到的数如果是带有小数的,他将舍去小数位,只保留整数位,当然有...详情>>
答:详情>>