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