Java棧的實(shí)現(xiàn)
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、白堿灘網(wǎng)絡(luò)推廣、重慶小程序開(kāi)發(fā)、白堿灘網(wǎng)絡(luò)營(yíng)銷、白堿灘企業(yè)策劃、白堿灘品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供白堿灘建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
public
class
MyStack
{
//定義一個(gè)堆棧類
int[]
array;
//用int數(shù)組來(lái)保存數(shù)據(jù),根據(jù)需要可以換類型
int
s_size;
//定義堆棧的寬度
public
MyStack(int
i){
//定義一個(gè)帶參數(shù)構(gòu)造器
array=new
int[i];
//動(dòng)態(tài)定義數(shù)組的長(zhǎng)度
s_size=0;
//堆棧的默認(rèn)寬度為0
}
public
MyStack(){
//默認(rèn)構(gòu)造器
this(50);
//默認(rèn)構(gòu)造器可容納50個(gè)元素
}
public
void
push(int
i){
//壓棧
array[this.s_size]=i;
this.s_size++;
}
public
int
pop(){
//從堆棧中取元素,從棧頂開(kāi)始取
if(this.s_size!=0){
int
t=array[s_size-1];
//用中間變量保存棧頂?shù)脑?/p>
array[s_size-1]=0;
//取完元素該位置設(shè)為0
s_size--;
//棧的大小減1
return
t;
//返回棧頂元素
}else{
System.out.println("This
stack
is
empty");
//當(dāng)棧為空時(shí)顯示提示信息,返回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]);
}
}
}
//下面是測(cè)試代碼
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());
}
}
不支持撤回上一步操作,可以通過(guò)調(diào)試器來(lái)查看之前的操作情況。
使用java.util包中的Stack類創(chuàng)建一個(gè)棧對(duì)象
public Object push(Object data);輸入數(shù)據(jù),實(shí)現(xiàn)壓棧
public Object pop();輸出數(shù)據(jù),實(shí)現(xiàn)彈棧
public boolean empty()判空
public Object peek();查看棧頂元素
可以去查查API嘛
我也是學(xué)java的,大家一起進(jìn)步。
p2=p1不是Point對(duì)象賦值,而是引用賦值。這和C++不一樣。
在java里邊,p1、p2、point和temp都是引用,而不是對(duì)象本身,引用就象C++的指針。上面的程序中,p2=p1的結(jié)果是,p2指向的對(duì)象和p1相同,他們都指向了p1=new Point()語(yǔ)句創(chuàng)建的對(duì)象。而Point p2=new Point(); 創(chuàng)建的對(duì)象,因?yàn)閜2不再引用它而變成垃圾,java會(huì)自動(dòng)刪除。
java的引用賦值就象C++的指針賦值,就類似C++程序:
Point * p1=new Point();
Point * p2=new Point();
p2=p1;
所以你上面的程序也有這個(gè)問(wèn)題,temp=point;其實(shí)沒(méi)什么用,效果把Point temp=new mypoint(); 創(chuàng)建的對(duì)象刪除了,被壓棧的對(duì)象還是point,所以去掉這兩句,效果完全一樣。
如果你想復(fù)制一個(gè)新對(duì)象壓棧,應(yīng)該用java的clone方法,
temp=point.clone();
不過(guò)Point必須實(shí)現(xiàn)Clonable接口,并且正確實(shí)現(xiàn)它。