设为首页 加入收藏

TOP

西卡C语言汉诺塔演示程序(一)
2014-11-23 23:24:23 来源: 作者: 【 】 浏览:1
Tags:西卡 语言 汉诺 演示 程序

下面是西卡学院C语言汉诺塔演示程序。以前学习没有了解那里清楚,发现数据结构的应用很广啊。显示几个栈底是复制的别人的代码,再此表示感谢了。(VC++6.0下面可以运行)
stack.h内容
[cpp]
#define NULL 0

typedef int ElementType;

typedef struct
{ www.2cto.com
ElementType *pbuffer;
int max;
int top;
}Stack;

Stack *InitStack(int n);

int Push(Stack *sp,ElementType *pdata);

int Pop(Stack *sp,ElementType *pdata);

int DestroyStack(Stack *sp);

int IsEmpty(Stack *sp);

int IsFull(Stack *sp);

int TravereStack(Stack *sp,int (*pfn)(ElementType *pdata,int ,int ),int x,int y);

stack.c内容
[cpp]
#include "stack.h"
#include
#include
#include

Stack *InitStack(int n)
{
Stack *sp = NULL;
sp = (Stack *)malloc(sizeof(Stack));
if(!sp)
{
return sp;
}

sp->pbuffer = (ElementType *)malloc(sizeof(ElementType)*n);
if(!sp->pbuffer)
{
free(sp);
sp=NULL;
return sp;
}
sp->max = n;
sp->top = -1;
return sp;
}

int Push(Stack *sp,ElementType *pdata)
{
if(IsFull(sp))
{
return 0;
}

sp->top++;
//sp->pbuffer[sp->top] = *pdata;
memcpy(sp->pbuffer + sp->top,pdata,sizeof(ElementType));
return 1;
}

int Pop(Stack *sp,ElementType *pdata)
{
if(IsEmpty(sp))
{
return 0;
}

*pdata = sp->pbuffer[sp->top];
sp->top--;
return 1;
}

int DestroyStack(Stack *sp)
{
if(sp)
{
free(sp->pbuffer);
free(sp);
return 1;
}
return 0;
}

int IsEmpty(Stack *sp)
{
return sp->top == -1;
}

int IsFull(Stack *sp)
{
return sp->top == sp->max;
}

int TravereStack(Stack *sp,int (*pfn)(ElementType *pdata,int x,int y),int x,int y)
{
int i =0;
for(i=0;itop+1;i++)
{
pfn(sp->pbuffer+i,x,y);
y--;
}
printf("\n");
return 1;
}

汉诺塔主体函数,没有进行优化。
[cpp]
#include "stack.h"
#include
#include
#include <windows.h>
#include

int step = 0;

typedef struct
{
Stack * sp[3];
int x[3];
int y;
int total;
}Hannuota;

void gotoxy(int x,int y)
{
COORD C;
C.X = x;
C.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),C);
}

void FreeThreeStack(Hannuota *han)
{
int i =0;
for(;i<3;i++)
{
if(han->sp[i])
{
free(han->sp[i]);
han->sp[i] =0;
}
}
}

int DestroyHannuota(Hannuota *han)
{
if(han)
{
FreeThreeStack(han);
free(han);
return 1;
}
return 0;
}

Hannuota * InitHannuota(int n)
{
int i =0;
Hannuota * han = NULL;
han = (Hannuota *)malloc(sizeof(Hannuota));
if(!han)
{
return han;
}
han->total = n;
han->y = 10;

for(i=0;i<3;i++)
{
han->sp[i] = 0;
han->x[i] = 10*i+10;
}


for(i=0;i<3;i++)
{
han->sp[i] = InitStack(han->total);

if(!han->sp[i])
{
DestroyHannuota(han);
return han;
}
}

return han;
}



int ShowElement(ElementType *pdata,int x,int y)
{
gotoxy(x,y);
printf("%d",*pdata);
return 1;
}

int ShowFace(Hannuota * ph)
{
int i ;
gotoxy(8,3);
printf("Hanio Game Ver 0.1");
for(i=0 ; i<3 ;i++)
{
gotoxy(ph->x[i] - 2 , ph->y + 1);
printf("-----");
gotoxy(ph->x[i] , ph->y + 2);
printf("%c",0x41 + i);
}
return 1;
}

int ShowHannuota(Han

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C Primer笔记之 C基本概念 下一篇玩儿转C语言:C语言中的字符和字..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: