格雷码生成算法 头文件: /**//**//**///////////////////////////////////////////// 文件名: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;} 呵呵,就这么多了,谢谢各位!