Java栈的实现
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、网站建设、白碱滩网络推广、重庆小程序开发、白碱滩网络营销、白碱滩企业策划、白碱滩品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供白碱滩建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
public
class
MyStack
{
//定义一个堆栈类
int[]
array;
//用int数组来保存数据,根据需要可以换类型
int
s_size;
//定义堆栈的宽度
public
MyStack(int
i){
//定义一个带参数构造器
array=new
int[i];
//动态定义数组的长度
s_size=0;
//堆栈的默认宽度为0
}
public
MyStack(){
//默认构造器
this(50);
//默认构造器可容纳50个元素
}
public
void
push(int
i){
//压栈
array[this.s_size]=i;
this.s_size++;
}
public
int
pop(){
//从堆栈中取元素,从栈顶开始取
if(this.s_size!=0){
int
t=array[s_size-1];
//用中间变量保存栈顶的元素
array[s_size-1]=0;
//取完元素该位置设为0
s_size--;
//栈的大小减1
return
t;
//返回栈顶元素
}else{
System.out.println("This
stack
is
empty");
//当栈为空时显示提示信息,返回0
return
0;
}
}
public
boolean
isEmpty(){
//判断栈是否为空
return
this.s_size==0;
}
public
int
top(){
//从栈顶取值,功能和
pop()
方法一样
if(!this.isEmpty()){
int
t=array[this.s_size-1];
array[this.s_size-1]=0;
this.s_size--;
return
t;
}else{
System.out.println("This
stack
is
empty!");
return
0;
}
}
public
void
printAll(){
//打印出堆栈中的所有元素的值,不是取出,元素依然在堆栈里
if(!this.isEmpty()){
for(int
i=this.s_size
-
1;i=0;i--){
System.out.println(array[i]);
}
}
}
//下面是测试代码
public
static
void
main(String[]
args){
MyStack
stack=new
MyStack();
stack.push(4);
stack.push(5);
stack.push(6);
stack.push(7);
//System.out.println(stack.isEmpty());
stack.printAll();
System.out.println("===========");
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.top());
}
}
不支持撤回上一步操作,可以通过调试器来查看之前的操作情况。
使用java.util包中的Stack类创建一个栈对象
public Object push(Object data);输入数据,实现压栈
public Object pop();输出数据,实现弹栈
public boolean empty()判空
public Object peek();查看栈顶元素
可以去查查API嘛
我也是学java的,大家一起进步。
p2=p1不是Point对象赋值,而是引用赋值。这和C++不一样。
在java里边,p1、p2、point和temp都是引用,而不是对象本身,引用就象C++的指针。上面的程序中,p2=p1的结果是,p2指向的对象和p1相同,他们都指向了p1=new Point()语句创建的对象。而Point p2=new Point(); 创建的对象,因为p2不再引用它而变成垃圾,java会自动删除。
java的引用赋值就象C++的指针赋值,就类似C++程序:
Point * p1=new Point();
Point * p2=new Point();
p2=p1;
所以你上面的程序也有这个问题,temp=point;其实没什么用,效果把Point temp=new mypoint(); 创建的对象删除了,被压栈的对象还是point,所以去掉这两句,效果完全一样。
如果你想复制一个新对象压栈,应该用java的clone方法,
temp=point.clone();
不过Point必须实现Clonable接口,并且正确实现它。