當前位置:首頁 » 編程語言 » 棧的java實現

棧的java實現

發布時間: 2024-11-22 17:07:37

⑴ 求助!如何用java編寫一個棧

可以利用LinkedList 來寫一個棧. 例如

import java.util.* ;

public class testStack{

private LinkedList list = new LinkedList() ;

public void push(Object o ){

try{

list.addFirst( o ) ;
}catch(Exception e){

}
}

public Object pop(){

return list.removeFirst() ;

}

public Object top() {

return list.getLast() ;
}

public static void main(String[] args){

//code here
testStack s = new testStack() ;
for( int i = 0 ; i<10 ;i++){

s.push( i );

}

System.out.println ( s.pop());

System.out.println(s.top());
}
}

你可以好好看看Thinking in JAVA中對集合的講解。。

⑵ 跪求用JAVA語言實現一個棧和一個隊列,數據元素為double型。。。具體在問題補充里

publicinterfaceMyStack<T>{
/**
*判斷棧是否為空
*/
booleanisEmpty();
/**
*清空棧
*/
voidclear();
/**
*棧的長度
*/
intlength();
/**
*數據入棧
*/
booleanpush(Tdata);
/**
*數據出棧
*/
Tpop();
}
publicclassMyArrayStack<T>implementsMyStack<T>{
privateObject[]objs=newObject[16];
privateintsize=0;

@Override
publicbooleanisEmpty(){
returnsize==0;
}

@Override
publicvoidclear(){
//將數組中的數據置為null,方便GC進行回收
for(inti=0;i<size;i++){
objs[size]=null;
}
size=0;
}

@Override
publicintlength(){
returnsize;
}

@Override
publicbooleanpush(Tdata){
//判斷是否需要進行數組擴容
if(size>=objs.length){
resize();
}
objs[size++]=data;
returntrue;
}

/**
*數組擴容
*/
privatevoidresize(){
Object[]temp=newObject[objs.length*3/2+1];
for(inti=0;i<size;i++){
temp[i]=objs[i];
objs[i]=null;
}
objs=temp;
}

@SuppressWarnings("unchecked")
@Override
publicTpop(){
if(size==0){
returnnull;
}
return(T)objs[--size];
}

@Override
publicStringtoString(){
StringBuildersb=newStringBuilder();
sb.append("MyArrayStack:[");
for(inti=0;i<size;i++){
sb.append(objs[i].toString());
if(i!=size-1){
sb.append(",");
}
}
sb.append("]");
returnsb.toString();
}
}
//棧的鏈表實現
publicclassMyLinkedStack<T>implementsMyStack<T>{
/**
*棧頂指針
*/
privateNodetop;
/**
*棧的長度
*/
privateintsize;

publicMyLinkedStack(){
top=null;
size=0;
}

@Override
publicbooleanisEmpty(){
returnsize==0;
}

@Override
publicvoidclear(){
top=null;
size=0;
}

@Override
publicintlength(){
returnsize;
}

@Override
publicbooleanpush(Tdata){
Nodenode=newNode();
node.data=data;
node.pre=top;
//改變棧頂指針
top=node;
size++;
returntrue;
}

@Override
publicTpop(){
if(top!=null){
Nodenode=top;
//改變棧頂指針
top=top.pre;
size--;
returnnode.data;
}
returnnull;
}

/**
*將數據封裝成結點
*/
privatefinalclassNode{
privateNodepre;
privateTdata;
}
}

⑶ 我要用java實現一個棧,基本操作就是出棧入棧。請問如何實現效率比較高。

//這是JDK提供的棧

import java.util.Stack;

public class UsingStack {
public static void main(String[] args) {
//構造棧對象,使用類型限制,只能存儲Integer數據
Stack<Integer> s = new Stack<Integer>();

//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);

//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}

//這是我寫的順序結構的棧
import java.util.EmptyStackException;
import java.util.Vector;

public class UsingStack{
public static void main(String[] args){
//構造棧對象,使用類型限制,只能存儲Integer數據
MyStack<Integer> s = new MyStack<Integer>();

//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);

//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}

/**
* 棧類
* @author developer_05
* @param <T>
*/
class MyStack<T> extends Vector<T>{
/**
* 構造方法
*/
public MyStack(){
}

/**
* 入棧方法
* @param item 待入棧的元素
* @return 返回入棧的元素
*/
public T push(T item) {
addElement(item);

return item;
}

/**
* 出棧方法(同步處理)
* @return 返回出棧元素
*/
public synchronized T pop() {
T obj;
int len = size();

if (len == 0)
throw new EmptyStackException();
obj = elementAt(len - 1);

removeElementAt(len - 1);

return obj;
}

/**
* 判斷棧是否為空的方法
* @return 返回true(棧空)或false(棧非空)
*/
public boolean empty() {
return size() == 0;
}

private static final long serialVersionUID = 1L;
}

熱點內容
青草下載ftp 發布:2024-11-22 22:43:08 瀏覽:850
壓縮機方面 發布:2024-11-22 22:31:47 瀏覽:953
php網上購物 發布:2024-11-22 22:17:50 瀏覽:939
安卓系統低會有什麼影響 發布:2024-11-22 22:16:59 瀏覽:412
解壓到u盤根目錄 發布:2024-11-22 22:05:13 瀏覽:716
伺服器上如何查看sz的版本號 發布:2024-11-22 21:46:24 瀏覽:844
isa演算法 發布:2024-11-22 21:45:09 瀏覽:180
我的世界外區伺服器 發布:2024-11-22 21:44:12 瀏覽:791
android開發工具有哪些 發布:2024-11-22 21:43:34 瀏覽:697
如何配置鹽水比例 發布:2024-11-22 21:38:36 瀏覽:742