入栈与出栈的所有排列可能性.doc_第1页
入栈与出栈的所有排列可能性.doc_第2页
入栈与出栈的所有排列可能性.doc_第3页
入栈与出栈的所有排列可能性.doc_第4页
入栈与出栈的所有排列可能性.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include #include #include #include #include /*定义全局变量*/int pu=0,po=0,t=0;char tp13012;/*用栈排出入栈出栈的顺序*/struct train int numb; struct train *next; ;struct push int a; int b; char data24; struct push *next; ;struct push *creat(struct push *top) top=(struct push *)malloc(sizeof(struct push); top-next=NULL; return top;struct push *pup(struct push *top,int a,int b,int n) struct push *p,*q; q=top-next; p=(struct push *)malloc(sizeof(struct push); p-a=a; p-b=b; if(q) strcpy(p-data,q-data); if(q-adataa+b-1=r; p-dataa+b=0; else p-dataa+b-1=c; p-dataa+b=0; p-next=top-next; top-next=p;return top;struct push *pop(struct push *top) top=top-next; return top;struct push *apaili(struct push *top,int numb) /*向后移动一个出命令*/ struct push *q; q=top-next; if(punumb) pu+; top=pup(top,pu,po,numb); top=apaili(top,numb); if(ponext; p=p-next; a=p-a; b=p-b; if(p-dataa+b-1=r) break; else do top=pop(top); p=top-next; a=p-a; b=p-b; while(p-dataa+b-1=c); if(a=1) cir=1; break; top=pop(top); a-; b+; top=pup(top,a,b,numb); top-next-dataa+b-1=c; pu=a; po=b; top=apaili(top,numb); strcpy(x,top-next-data); if(jc(x) strcpy(tpt,x); t+; while(a+b2*numb); if(cir=1) return top; top=pop(top); top=bpaili(top,numb);int jc(char c22) int i=0,k=0; if(ci!=0) do if(ci=r) k+; if(ci=c) k-; if(knext=NULL; return ttop;struct train *tpup(struct train *ttop,int data) struct train *p; p=(struct train *)malloc(sizeof(struct train); p-numb=data; p-next=ttop-next; ttop-next=p; return ttop; struct train *tpop(struct train *ttop)int data;struct train *p;p=ttop-next;data=p-numb;ttop=ttop-next;printf(%d ,data);return ttop;inso(char c22,int n) int i,k=0,begin12; struct train *ttop; ttop=tcreat(ttop); for(i=0;in;i+) begini=i+1; i=0; if(ci!=0) while(ci!=0) switch(ci) case r: ttop=tpup(ttop,begink);k+;break; case c: ttop=tpop(ttop);break; i+; /*输出所有情况*/print(int k)int i,j=0,m;for(i=0;it;i+) if(i%2=0) m=8+j; gotoxy(5,m); j+; printf(第%3d种排列:,i+1); inso(tpi,k); gotoxy(32,m); if(i+1)%16=0) getch(); j=0; /*产生随机数功能函数*/int ram() int a,b; b=random(100); if(b=100) a=4; if(b=60) a=3; if(b=30) a=2; if(b=10) a=1; return a; int aram()int a,b;b=random(120);if(b=120)a=3;if(b=60)a=2;if(b=20)a=1;if(b=5)a=0;return a;/*清屏功能函数*/void clears(int x,int y,int n,int m) setfillstyle(1,8); bar(x,y,n,m);/*提示栏信息库*/tel(int n)switch(n)case 1:clears(459,300,625,465); gotoxy(59,21); printf(这是输入平台一); gotoxy(59,23); printf(输入要调用货车厢个数); gotoxy(59,25); printf(它必须不大于现有个数); break; case 2:clears(459,300,625,465); gotoxy(59,21); printf(这是输入平台二); gotoxy(59,23); printf(你想要调用客车厢个数); gotoxy(59,25); printf(它必须不大于现有个数); break; case 3:clears(459,300,625,465); gotoxy(59,21); printf(这是输入平台三); gotoxy(59,23); printf(邮件车厢要用到多少个); gotoxy(59,25); printf(它必须不大于现有个数); break; case 4:clears(459,300,625,465); gotoxy(59,21); printf(这里是操作提示框); gotoxy(59,23); printf(它可以给你操作提示); gotoxy(59,25); printf(看清信息后任意键继续); break; case 5:clears(459,300,625,465); gotoxy(59,21); printf(正在输出资料); gotoxy(59,23); printf(任意键查看下一页); break; case 6:clears(459,300,625,465); moveto(460,310); setcolor(12); outtext(WARING !); gotoxy(59,23); printf(输入的数字是非法的); gotoxy(59,25); printf(看清信息,任意键重输); break; case 7:clears(459,300,625,465); moveto(460,310); setcolor(12); outtext(WARING !); gotoxy(59,23); printf(输入的数字错误的); gotoxy(59,25); printf(看清信息,按键重输); break; case 8:clears(459,300,625,465); moveto(460,310); setcolor(12); outtext(ok!); gotoxy(59,23); printf(车厢已经排列好); gotoxy(59,25); printf(按键查看所有排列顺序); break; case 9:clears(459,300,625,465); gotoxy(59,21); printf(这是输入平台四); gotoxy(59,23); printf(输入你要的排列的序号); gotoxy(59,25); printf(选择后); gotoxy(59,27); printf(系统将排列演示); break;case 10:clears(459,300,625,465); gotoxy(59,21); printf(正在根据你的选择); gotoxy(59,23); printf(进行调度演示); break;case 11:clears(459,300,625,465); gotoxy(59,21); printf(车厢调度成功); gotoxy(59,23); printf(顺序如右图所示); break;case 12:clears(459,300,625,465); gotoxy(59,21); printf(又有车头进站); gotoxy(59,23); printf(要为它安排车厢吗); gotoxy(59,25); printf(Y/N); break; /*车头信息库*/int atri(void) gotoxy(60,5); printf(这是一辆AT型车头); gotoxy(60,6); printf(最多可以带2个车厢); return 2;int btri(void) gotoxy(60,5); printf(这是一辆BT型车头); gotoxy(60,6); printf(最多可以带3个车厢); return 3;int ctri(void) gotoxy(60,5); printf(这是一辆CT型车头); gotoxy(60,6); printf(最多可以带4个车厢); return 4;int dtri(void) gotoxy(60,5); printf(这是一辆DT型车头); gotoxy(60,6); printf(最多可以带5个车厢); return 5;/*车厢信息库*/truk(int a,int b) setcolor(BROWN); rectangle(a,b,a+70,b+20); setfillstyle(6,6); bar(a+1,b+1,a+69,b+19);passage(int a,int b) setcolor(BROWN); rectangle(a,b,a+70,b+20); setfillstyle(2,1); bar(a+1,b+1,a+69,b+19);mail(int a,int b) setcolor(BROWN); rectangle(a,b,a+70,b+20); setfillstyle(2,WHITE); bar(a+1,b+1,a+69,b+19);carbox() truk(460,160); passage(460,200); mail(460,240);/*车厢个数显示信息*/ttel(a,b,c) gotoxy(69,11); printf(货厢%d个,a); gotoxy(69,14); printf(客厢%d个,b); gotoxy(69,16); printf(邮厢%d个,c);/*图象*/door(int a,int b,int c)setcolor(YELLOW);rectangle(1,1,637,478);rectangle(10,27,628,468);line(1,20,637,20);setfillstyle(1,3);bar(2,2,636,19);setfillstyle(1,8);bar(11,28,627,467);moveto(7,7);settextstyle(5,0,4);setcolor(5);outtext(J01126 WANGBIN);setcolor(YELLOW);rectangle(450,27,457,468);rectangle(11,400,450,407);rectangle(457,120,628,138);rectangle(457,280,628,298);setfillstyle(1,9);bar(451,28,456,467);bar(12,401,449,406);bar(2,21,636,26);bar(2,21,9,477);bar(2,469,636,477);bar(629,21,636,477);line(458,45,627,45);setfillstyle(1,4);bar(458,28,627,44);bar(458,121,627,137);bar(458,281,627,297);setcolor(GREEN);moveto(460,35);outtext(STATIONS INFORMATION);moveto(460,128);outtext(COMPATES INFORMATION);moveto(465,287);outtext(MESSAGE);carbox();ttel(a,b,c);int nform(void) int numb; setcolor(YELLOW); rectangle(150,150,350,230); rectangle(153,153,347,227); line(150,150,155,155); line(150,230,155,225); line(350,230,345,225); line(350,150,345,155); setfillstyle(1,9); bar(154,154,346,226); moveto(170,170); outtext(INPUT THE NUMBER ); setfillstyle(1,8); bar(170,190,290,210); gotoxy(30,13); scanf(%d,&numb); return numb;void initt() int graphdrive=IBM8514LO; int graphmode=IBM8514HI; initgraph(&graphdrive,&graphmode, ); setbkcolor(8); /*动态信息*/int headtrain() int i,z; i=ram(); switch(i) case 1:clears(459,47,625,110); z=atri(); break; case 2:clears(459,47,625,110); z=btri(); break; case 3:clears(459,47,625,110); z=ctri(); break; case 4:clears(459,47,625,110); z=dtri(); break; return z;ptrain(int a,int b,int c)int i;if(a=0)for(i=0;ic;i+)truk(15+(b-c+i)*75,425);if(a=1)for(i=0;ic;i+)passage(15+(b-c+i)*75,425);if(a=2)for(i=0;ic;i+)mail(15+(b-c+i)*75,425);/*主键面*/first()int k,i,m,tr,pa,ma,ci;char c22;struct push *top,*p;clrscr();tr=aram();dopa=aram();while(pa=tr);doma=aram();while(ma=pa|ma=tr);door(tr,pa,ma);m=headtrain();tel(4);do getch(); k=0; for(i=0;itr)|(i=1&cipa)|(i=2&cima) i-; tel(7); getch(); continue; k+=ci; if(km);clears(140,140,360,240);tel(8);getch();top=creat(top);top=apaili(top,k);strcpy(tpt,top-next-data);t+;if(k!=1)top=bpaili(top,k);tel(5);print(k);getch();/*动画*/struct runint data;char kind;ttrai5;savetrain(int i,int j,int c)int a;if(i=0&c!=0)for(a=j-c;aj;a+)ttraia.data=a+1;ttraia.kind=t;if(i=1&c!=0)for(a=j-c;aj;a+) ttraia.data=a+1; ttraia.kind=p; if(i=2&c!=0)for(a=j-c;aj;a+) ttraia.data=a+1; ttraia.kind=m; runtrain(int k)int i=0,a;char c;c=ttraik.kind;switch(c) case t:for(a=0;a210;a+=3) clears(12,190,440,275); if(a=160) truk(365-a,200); else truk(205,39+a); delay(1900); break; case p:for(a=0;a210;a+=3) clears(12,190,440,275); if(a=160) passage(365-a,200); else passage(215,39+a); delay(1900); break; case m:for(a=0;a210;a+=3) clears(12,190,440,275); if(a=160) mail(365-a,200); else mail(205,39+a); delay(1900); break; bruntrain(char c)int a;switch(c) case t:for(a=0;a220;a+=3) clears(12,190,440,275); if(a50) truk(205,249-a); else truk(258-a,200); delay(1900); break; case p:for(a=0;a220;a+=3) clears(12,190,440,275); if(a50) passage(205,249-a); else passage(258-a,200); delay(1900); break; case m:for(a=0;a220;a+=3) clears(12,190,440,275); if(a50) mail(205,249-a); else mail(258-a,200); delay(1900); break; /*演示时的键面*/face() setcolor(10); rectangle(400,170,449,189); rectangle(11,170,60,189); setcolor(YELLOW); rectangle(200,276,290,400); setfillstyle(1,11); bar(401,172,448,187); bar(12,172,59,187); setfillstyle(1,7); bar(201,277,289,399); setcolor(RED); moveto(411,178); outtext(ENTER); moveto(18,178); outtext(OUT); moveto(220,340); outtext(STATION);ztrain(int k) int i=0,j=0,a=0,e=0,b,d; char c12; struct run tpu5; strcpy(c,tpk); face(); if(ci!=0) do switch(ci) case r:clears(15+j*73,424,88+j*75,445); for(b=0;b10;b+) delay(10000); runtrain(j); clears(12,190,440,275); for(b=0;b10;b+) delay(10000); tpue.data=ttraij.data; tpue.kind=ttraij.kind; j+; e+; break; case c:ttraia.data=a+1; ttraia.kind=tpue-1.kind; bruntrain(tpue-1.kind); clears(12,190,440,275); for(b=0;b5;b+) delay(10000); if(ttraia.kind=t) d=0; if(ttraia.kind=p) d=1; if(ttraia.kind=m) d=2; ptrain(d,a+1,1); for(b=0;b5;b+) delay(10000); a+; e-; break; i+;while(ci!=0);/*开始动画*/begi()int i;vo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论