文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>编程珠玑读书笔记——串的转置算法

编程珠玑读书笔记——串的转置算法

时间:2011-03-28  来源:ying_seven

将一个具有n个元素的一维向量向左旋转i个位置.假若n = 8, i = 3, 那么向量abcdefgh 旋转后为defghabc.

1、将待旋转的向量看作是ab两段,假设a比b短,将b分割为b1和b2使b2长度与a相等.

交换a、b2,这样ab1b2变为b2b1a这样a已经在自己最终的位置上了.下面的工作就变成了旋转b2b1.

/**********************************

       Fction:将字符串按条件转置

       char * p:字符串首地址

       int t:所要选择部分的长度

       int n:串的总长度

Return:void

      

**********************************/

void  Q(char *p,int t,int n){

 

         char tmp;

         int i;

         int flag = 0;                                   //标记变量

         char *p1 ;                                     //用于指向b2的头地址

         if(n !=1 && n != 0)

         {       

/*********************************************

                   判断t即所要旋转的长度是否大于另一部分,因为我们

                   选择短的那部分,相应的分解长的那部分.所以若t>n-t

                   则把短的那部分赋值给t

*********************************************/

                   if(t>n-t){

                            t = n-t;

                            flag = 1;

                   }

                   //对b2串头地址的初始化

                   p1 = p+n-t;

                   //开始交换变量

                   for(i = 0;i<t;i++){

                            tmp = *(p1+i);

                            *(p1+i) = *(p+i);

                            *(p+i) = tmp;

                   }

/*********************************************

                   根据标志位选择递归

                   若形参t即为分解部分即ab(这里假设a比b短)

                   则a已经在最终位置固串首地址不变,t不变,所选择串总长度-t

                   若是ba,则t为需分解的串的长度.这里为了简化代码

                   我们还把b1b2a看成ab1b2固上文对t赋值n-t

                   但a被换置前端亦为最终位置固.总串首地址后移t

                   而总长度-t,下次所旋转的长度在n-t的基础上再-t

*********************************************/

 

                   if(flag)

                            Q((p+t),n-2*t,n-t);

                   else

                            Q(p,t,n-t);

 

         }

额~ 太晚了  今天先睡觉

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载