欢迎来到天天文库
浏览记录
ID:34415931
大小:42.50 KB
页数:12页
时间:2019-03-05
《c语言用堆栈0到n-1的全排列》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C语言用堆栈0到n-1的全排列本程序用C语言实现,采用多文件编译,从主函数中调用其接口函数即可.需要注意的是由于采用了堆栈,其运行效率并不是十分高.对于n阶,共有n!种情况.以下plzh代表排列组合.(本机运行环境是xpsp3+vc6.0++)//头文件plzh.h#ifndefPLZH_H#definePLZH_H#include#includevoidinitial(intn);intstackfull(intn);voidstackprint(intn);voidstackoutfile(intn);voidstackback();voidstac
2、kadd(intn);voidstackmov(intn);voidstackfun(intn);#endif//头文件实现函数plzh.c#include#include#include"plzh.h"#defineN50//定义栈的大小.intstack[N];//定义栈.intp=-1;//定义栈底.inta[N],b[N],c[N];//分别表示当前数的值,改变后的值,及改变的次数.FILE*pfile;/***********************对栈进行初始化.**********************/voidinitial(intn)
3、{inti=0;for(i=0;i4、幕上.********************/voidstackprint(intn){inti=0;for(i=0;i5、f(pfile,"%d",stack[i]);//putw(stack[i],pfile);//fprintf(pfile,"%c",'');//fclose(pfile);}/************************退栈.*实际上这个可以省去,但为了更好理解,写成一个函数.***********************/voidstackback(){p--;}/***********************************当经过一次退栈后,当前栈顶是p,则p+1到n-1*中并没有填充数字,此函数的作用就是为后面*的栈中重新入栈.*并且此处是有规律的入栈.*******6、***************************/voidstackadd(intn){intj,k,flag;//j,k是控制变量,flag是标志变量.while(1+p7、,表示赋值成功.{stack[++p]=j;//当此值赋到栈中.a[p]=b[p]=j;//同时重新定义当前值,并使其相等.相当于又初始化.c[p]=0;//把值的改变次数定义为0.break;}}}}/**********************************本程序的核心所在.*算法是若退栈到当前值,则改变当前值.*使当前栈值b[p]=(b[p]+1)%n;********************
4、幕上.********************/voidstackprint(intn){inti=0;for(i=0;i5、f(pfile,"%d",stack[i]);//putw(stack[i],pfile);//fprintf(pfile,"%c",'');//fclose(pfile);}/************************退栈.*实际上这个可以省去,但为了更好理解,写成一个函数.***********************/voidstackback(){p--;}/***********************************当经过一次退栈后,当前栈顶是p,则p+1到n-1*中并没有填充数字,此函数的作用就是为后面*的栈中重新入栈.*并且此处是有规律的入栈.*******6、***************************/voidstackadd(intn){intj,k,flag;//j,k是控制变量,flag是标志变量.while(1+p7、,表示赋值成功.{stack[++p]=j;//当此值赋到栈中.a[p]=b[p]=j;//同时重新定义当前值,并使其相等.相当于又初始化.c[p]=0;//把值的改变次数定义为0.break;}}}}/**********************************本程序的核心所在.*算法是若退栈到当前值,则改变当前值.*使当前栈值b[p]=(b[p]+1)%n;********************
5、f(pfile,"%d",stack[i]);//putw(stack[i],pfile);//fprintf(pfile,"%c",'');//fclose(pfile);}/************************退栈.*实际上这个可以省去,但为了更好理解,写成一个函数.***********************/voidstackback(){p--;}/***********************************当经过一次退栈后,当前栈顶是p,则p+1到n-1*中并没有填充数字,此函数的作用就是为后面*的栈中重新入栈.*并且此处是有规律的入栈.*******
6、***************************/voidstackadd(intn){intj,k,flag;//j,k是控制变量,flag是标志变量.while(1+p7、,表示赋值成功.{stack[++p]=j;//当此值赋到栈中.a[p]=b[p]=j;//同时重新定义当前值,并使其相等.相当于又初始化.c[p]=0;//把值的改变次数定义为0.break;}}}}/**********************************本程序的核心所在.*算法是若退栈到当前值,则改变当前值.*使当前栈值b[p]=(b[p]+1)%n;********************
7、,表示赋值成功.{stack[++p]=j;//当此值赋到栈中.a[p]=b[p]=j;//同时重新定义当前值,并使其相等.相当于又初始化.c[p]=0;//把值的改变次数定义为0.break;}}}}/**********************************本程序的核心所在.*算法是若退栈到当前值,则改变当前值.*使当前栈值b[p]=(b[p]+1)%n;********************
此文档下载收益归作者所有