队列和栈中指针与数据之间的先后关系-----应用(汉诺塔问题的最简单解法)
队列的入队是放数据进来后再自加,而且刚开始头尾指针都指向同一位置,判断是否队列满的时候用if(t.tail=队列长度)而不是用if(t.tail+1=队列长度),这是因为先插入数据再自加这一性质决定的。 栈判断是否为空,注意:指针刚开始时处于-1位置,不是处于0位置。
bool isEmpty()
{
if(top == -1) return true;
else return false;
}
出栈时先拿出数据再自减,入栈时先自加再插入数据int pop()
出栈:{
if(isEmpty()) {
cout<<"STACK IS EMPTY ";
return NULL;
}
else
{ int data=arr[top];
arr[top]=NULL;
top--;
return data; }
}
入栈: void push(int a)
{ top++;
if(top < MAX) {
arr[top]=a;
} else {
cout<<"STACK FULL!!"<<top;
}
}
汉若塔问题就是涉及到栈的问题及递归的问题,java代码如下:
package huang.de.wei;
public class Hanroitower {
static int k=0; public static void main(String[] args) {
hanroitower(2,'A','B','C');
System.out.println(k); }
public static void hanroitower(int n,char X,char Y,char Z)
{ k++;
if(n==1){ System.out.println("圆盘1从"+X+"移动到"+Z); }
else{ hanroitower(n-1,X,Z,Y);//将x上编号为1到n-1的圆盘移动到y,z作为辅助塔
System.out.println("圆盘"+n+"从"+X+"移动到"+Z);//将编号为n的圆盘从x移动到z
hanroitower(n-1, Y, X, Z);//将Y上编号为1到n-1的圆盘移动到Z,x作为辅助塔 } } }

浙公网安备 33010602011771号