队列和栈中指针与数据之间的先后关系-----应用(汉诺塔问题的最简单解法)

时间:2022-03-03 13:14:26

 

队列的入队是放数据进来后再自加,而且刚开始头尾指针都指向同一位置,判断是否队列满的时候用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作为辅助塔   }  } }