俺自己写的一个二分法查找的的代码

// serch.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "goqomessage.h"
#define  MAX_CS_NUM          50                      //CS的数量
#define  MAX_CLIENT_NUM      5000                    //NS的数量


int HalfSearch(CLIENTNODE s[],int a,int b,DWORD key)
/* s为有序数列,a、b分别为查找区间的起点和终点,key为查找关键字 */
{
 int mid;
 if(a==b)
 {
  if(key==s[a].id)
   return (a);
  else
   return (-1);
 }
 else
 {
  mid=(a+b)/2;
  if(key<s[mid].id)
  {
   return(HalfSearch(s,a,mid,key));
  }

  if(key>s[mid].id)
  {
   return(HalfSearch(s,mid+1,b,key));
  }
  if(key==s[mid].id)
  {
   return (mid);
  }
 }
}

 

int SearchClient(CLIENTLIST AllCliet,CLIENTNODE Client)
{

 int iResult=-1;
 int a=0;
 int b=AllCliet.iClientNum;
 iResult = HalfSearch(AllCliet.ClientList,a,b,Client.id);
 return iResult;

}

bool AddClient(CLIENTLIST &AllCliet,CLIENTNODE Client)
{
 //如果满,则退出,出错
 if (AllCliet.iClientNum > MAX_CLIENT_NUM)
 {
  return false;
 }
 //刚开始时
 if (AllCliet.iClientNum == 0)
 {
  AllCliet.ClientList[0]=Client;
  ++AllCliet.iClientNum;
 }
 return true;
}
bool DeleteClient(CLIENTLIST &AllCliet,CLIENTNODE Client)
{
 int pos;
 pos = SearchClient(AllCliet,Client);
 if (pos < 0)
 {
  return true;
 }
 for (int i=pos; i<AllCliet.iClientNum;++i)
 {
  AllCliet.ClientList[i]=AllCliet.ClientList[i+1];
 }
 --AllCliet.iClientNum;
 return true; 

}


int _tmain(int argc, _TCHAR* argv[])
{

 CLIENTLIST AllClient;
 CLIENTNODE Client;
 Client.id=125;
 AllClient.ClientList[0].id = 123;
 AllClient.ClientList[1].id = 124;
 AllClient.ClientList[2].id = 125;
 AllClient.ClientList[3].id = 126;
 AllClient.ClientList[4].id = 127;
 AllClient.iClientNum=5;
 printf("%d/n",AllClient.ClientList[2].id);
 int i;
 i=SearchClient(AllClient,Client);
 printf("%d/n",i);
 
 Sleep(10000);
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值