格雷码生成算法

原创 2007年10月05日 22:07:00

格雷码生成算法

头文件:

/**//**//**///////////////////////////////////////////
// 文件名:GrayCode.h 
// 功  能:产生N位格雷码算法头文件
/**//**//**///////////////////////////////////////////
#include <iostream>
#include 
<string>
#include 
<cstdio>
#include 
<string>
#include 
<stack>
#include 
<conio.h>

using namespace std;

//定义结点数据结构
typedef struct CodeNode...{
    
char    *code;        //格雷码串
    struct    CodeNode *next;    //指向上一个码段的指针
}
CodeNode, *CodeList;

//函数声明
void GenerateGrayCode( int n );
CodeList CreateCodeList();
void IncreaseCode( CodeList L );
void PrintGrayCode( CodeList L );
void ReleaseGrayCode( CodeList L );
char *CodeCat( char *des, char *src );

//定义全局变量
CodeList L;

cpp文件:

 

/**//**//**///////////////////////////////////////////
// 文件名:GrayCode.cpp 
// 功  能:产生N位格雷码算法实现文件
/**//**//**///////////////////////////////////////////
#include "GrayCode.h"

void main()
...{
    
int nbits = 1;
    
char c;
    
while( nbits != 0)
    
...{
        cout
<<"Please input the bits of GrayCode(0:exit):";
        cin
>>nbits;
        GenerateGrayCode( nbits );    
//产生编码
        cout<<"Done!"<<"     Print Codes(y/n)?";
        
if( ((c = getch()) == 'y'|| ((c = getch()) == 'Y') )
        
...{
            printf(
" ");
            PrintGrayCode( L );        
//打印编码
        }

        printf(
" ");
    }

    ReleaseGrayCode( L );            
//释放内存
}


void GenerateGrayCode( int n )        //算法主体
...{
    
if(n == 1)
    
...{
        L 
= CreateCodeList();
    }

    
else
    
...{
        GenerateGrayCode( n
-1 );
        IncreaseCode( L );
    }

}


CodeList CreateCodeList()        
//建立链表
...{
    CodeList Head 
= (CodeList)malloc(sizeof(CodeNode));
    CodeList p 
= (CodeList)malloc(sizeof(CodeNode));
    CodeList q 
= (CodeList)malloc(sizeof(CodeNode));

    p
->code = "0";    q->code = "1";
    p
->next = q;    q->next = NULL;

    Head
->next = p;

    
return Head;
}


void ReleaseGrayCode( CodeList L )    //释放内存空间
...{
    CodeList q;    
    
while( L )
    
...{
        q 
= L;
        L 
= L->next;
        free(q);
    }

}


void IncreaseCode( CodeList L)        //做编码的一位扩展
...{
    CodeList p;    
    p 
= L;
    
int count = 0;
    stack 
<char*> CodeStack;    //定义栈

    
while( p->next )
    
...{
        CodeStack.push( p
->next->code );
        p
->next->code = CodeCat("0",p->next->code );
        p 
= p->next;
        count
++;
    }


    
while( count > 0 )
    
...{
        CodeList q 
= (CodeList)malloc(sizeof(CodeNode));
        q
->code = CodeCat( "1",CodeStack.top() );
        CodeStack.pop();
        q
->next = NULL;
        p
->next = q;
        p 
= p->next;
        count
--;
    }

}


void PrintGrayCode( CodeList L )    //打印编码
...{
    CodeList p;
    p 
= L->next;
        
    
while(p)
    
...{
        cout
<<p->code<<endl;
        p 
= p->next;
    }

}


char *CodeCat( char *des, char *src )    //粘合两个字符串
...{
    
char *stone = (char*)malloc((strlen(src)+strlen(des))*sizeof(char));
    strcpy(stone,des);
    strcat(stone,src);

    
return stone;
}

呵呵,就这么多了,谢谢各位!

 

生成学习算法

生成学习算法 本次课程大纲: 1、 生成学习算法 2、 高斯判别分析(GDA,Gaussian Discriminant Analysis) -          高斯分布(简...
  • llwszjj
  • llwszjj
  • 2014年04月13日 20:51
  • 1472

三大迷宫生成算法 (Maze generation algorithm) -- 深度优先,随机Prim,递归分割

之前同学参加面试,面试官问到迷宫生成算法,这个问题自己想了下也没有好办法,所有就查询了相关资料。这里进行了相关整理: 本文主要讲解的迷宫生成算法有三种: 1.Recursive backtracker...
  • juzihongle1
  • juzihongle1
  • 2017年06月12日 20:31
  • 5284

基本图形生成算法

基本图形生成算法 DDA和Bresenham直线段生成算法; Bresenham圆弧生成算法。
  • wp1603710463
  • wp1603710463
  • 2015年12月20日 21:09
  • 1204

直线生成算法

Bresenham算法   1.0   d=k;   d   d>=0.5  取上方点   x++;y++; d=d+k-1;     程序:      x=x0;y=y0; putpixel(x,y...
  • yinyu19950811
  • yinyu19950811
  • 2015年09月17日 21:32
  • 344

素数生成算法

1. 根据概念判断: 如果一个正整数只有两个因子, 1和p,则称p为素数.这是通常最先想到的判断方法: 代码: bool isPrime(int n) { if(...
  • wangran51
  • wangran51
  • 2013年04月09日 21:36
  • 8698

产生验证码的两种算法

随机产生验证码是很常见yehenjianda
  • lanhuzi9999
  • lanhuzi9999
  • 2014年04月13日 23:11
  • 1219

最小生成树Prim算法理解

MST(Minimum Spanning Tree,最小生成树)
  • yeruby
  • yeruby
  • 2014年08月16日 18:49
  • 85123

URL短网址生成算法原理

短网址(Short URL),顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代...
  • wanghuan203
  • wanghuan203
  • 2015年03月31日 10:57
  • 20923

最小生成树之Kruskal算法

给定一个无向图,如果它任意两个顶点都联通并且是一棵树,那么我们就称之为生成树(Spanning Tree)。如果是带权值的无向图,那么权值之和最小的生成树,我们就称之为最小生成树(MST, Minim...
  • luomingjun12315
  • luomingjun12315
  • 2015年08月18日 08:12
  • 26259

一个生成伪随机数的超级算法【转】

什么叫伪随机数? 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定...
  • LVXIANGAN
  • LVXIANGAN
  • 2017年06月15日 15:32
  • 712
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:格雷码生成算法
举报原因:
原因补充:

(最多只允许输入30个字)