C 基础

 

递归链表反序

void Invert(struct node *p)
{
     if(p->next==NULL) return;
     if(p->next->next!=0)
          Invert(p->next);
    p->next->next = p;
    p->next = 0;
}

两种方法判断是否有相同字串,一是效率最高的,二是最节省内存的.

int fn1(const char *str)
{
 unsigned char *p = ( unsigned char *)str;
 int a[255]={0};
 for( ; *p != '/0'; p++ )
  if( ++a[*p] == 2 ) return 1;
 return 0;
}

int fn2(const char *str)
{
   const char *p1, *p2;
   if (*str == '/0')
      return 0;
   for (p1 = str; *p1 != ''; p1++)
      for (p2 = p1 + 1; *p2 !=''; p2++) 
         if (*p1 == *p2)
            return 1;
   return 0;
}

一句话判断是否是2的幂次: #define Is2n(a)  ( a > 0 ) && ( ( ( ~a + 0x01 ) &a ) == a )

int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
a[q-p]=?
当然是 2

高低位交换:

int test;
test = ( test<<8 & 0xFF00 ) | ( test>>8 & 0x00FF );

找一个数1的个数:

内存换速度
char one[256]={0,1,1,2,1,2,……} // 此为 0-255 每个数中 1 的个数
int func(int n){
  for(int i=0;n>0;n>>=8)
    i+=one[n&255];
  return i;
}

2)&优化
int func(int n){
  int count=0;
  while(n>0){
    n&=(n-1);
    count++;
  }
  return count;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值