int data[STACK_SIZE];
int top;
}stack;
int clear(stack *a);
int create(stack **a);
int push(stack *a,int data);
int pop(stack *a,int *data);
otherwise remove it.
*/
//#define ERROR_DEBUG
#ifdef ERROR_DEBUG
#define error(x) error_debug(x)
#define report() report_debug()
#define initerror() initerror_debug()
Hanoi,非递归,演示,动画效果
kensta
有动画演示,move2()是标准解的调用
move()是用于演示动画或显示移动秩序和包含监测有无错误移动的调用
使用Borland c++ 3.0(Turbo c++ 3.0,Turbo c 2.0也可)编译通过,图形方式使用Tc的bgi
if(a->top){
*data=a->data[a->top-1];
return 1;
}else{
error("gettop(stack *,int *):stack empty!\n");
return 0;
}
}
int dispose(stack *a){
strcpy(err[errs],a);
printf(a);
errs++;
}
void report_debug(){
int i;
if(!errs)return;
for(i=0;i<errs;i++){
printf(err[i]);
free(err[i]);
}
if(a){
free(a);
return 1;
}else{
error("dispose(stack *):stack not exist!\n");
return 0;
}
}
/**************************************/
/*
about Hanoi the game
int gettop(stack *a,int *data);
int dispose(stack *a);
int pop(stack *a,int *data){
if(a->top){
*data=a->data[--a->top];
return 1;
}else{
error("pop(stack *,int *):stack empty!\n");
char *err[10];
int errs=0;
void initerror_debug(){
int i;
for(i=0;i<10;i++)err[i]=NULL;
}
void error_debug(char *a){
if(errs>9)return;
err[errs]=(char *)malloc(strlen(a)+1);
return 0;
}
}
int clear(stack *a){
if(a){
a->top=0;
return 1;
}else {
error("clear(stack *):stack not exist!\n");
return 0;
}
}
int gettop(stack *a,int *data){
*/
#include <graphics.h>
#include <dos.h>
#define MAX_LEVEL STACK_SIZE
int position[MAX_LEVEL+1];
stack *theStack[3];
int depth;
int mode;
int print;
initgraph(&gdriver, &gmode, "");
*/
/*************************************/
/*
about error process
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/*
if debuging use #define ERROR_DEBUG
return 0;
}
}
int create(stack **a){
*a=(stack *)malloc(sizeof(stack));
if(*a)return clear(*a);
else{
error("create(stack **):create error! Not enough momery!\n");
int initgame(int d){
int i;
int x,y;
int h=5;
int w;
initerror();
if(mode){
int gdriver = DETECT, gmode, errorcode;
/* initialize graphics mode */
return 0;
}
}
int push(stack *a,int data){
if(a->top<STACK_SIZE){
a->data[a->top++]=data;
return 1;
}else {
error("push(stack *,int):stack full!\n");
}
#else
#define error(x)
#define report()
#define initerror()
#endif
/*************************************/
/*
about stack
*/
#define STACK_SIZE 31