3.n阶Hanoi塔问题的C函数
void hanoi(int n,char x,char y,char z)
{
//将塔座x上按直径由小到大且自上而下编号为1到n个n个圆盘按规则搬到塔座z上,y
//可用作辅助塔座,搬动操作move(x,n,z)可定义为(c是初值为0的全局变量,对搬动计数)
if(n==1)
move(x,1,z);
else
{
hanoi(n-1,x,z,y);//将x上编号为1至n-1的圆盘移到y,z作辅助塔
move(x,n,z);//将编号为n的圆盘从x移到z
hanoi(n-1,y,x,z);//将y上编号为1至n-1的圆盘移到z,x作辅助塔
}
}
*******************************************************************************************
1. 队列基本操作算法
Status InitQueue(LinkQueue &Q)
{
//构造一个空队列Q
Q.front =Q.rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q.front) exit (OVERFLOW);//存储分配失败
Q.front->next = NULL;
return OK;
}
Status DestroyQueue(LinkQueue&Q)
{
//销毁队列Q
while(Q.front)
{
Q.rear= Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
return OK;
}
Status EnQueue(LinkQueue&Q,QElemType e)
{//插入元素e为Q的新的队尾元素
p= (QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);//存储分配失败
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
Status DeQueue(LinkQueue&Q,QElemType &e)
{
//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR
if(Q.front==Q.rear) return ERROR;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear ==p) Q.rear = Q.front;
free(p);
return OK;
}原文:http://blog.csdn.net/woailvmengmeng/article/details/19120921