導航:首頁 > 編程語言 > java入棧

java入棧

發布時間:2022-11-29 19:46:05

java 作業 編寫固定長度棧和動態棧,完成入棧和出棧。(註:測試介面。)

//棧介面

/**
*2016/10/3110:19
*
*@author3306TODO
*/

publicinterfaceStackInterface<T>{
/**
*壓入元素
*
*@paramelement元素
*/
voidpush(Telement);

/**
*彈出棧頂元素
*
*@returnT
*/
Tpop();
}
//固定長度棧
/**
*2016/10/3110:03
*
*@param<T>壓入元素類型
*@author3306TODO固定長度棧
*/

publicclassFixedStack<T>implementsStackInterface<T>{

privateObject[]objects=newObject[10];
privateintindex=0;

/**
*往固定長度棧壓入元素
*
*@paramelement元素
*@壓縮元素大於棧的容量的時候
*/
publicvoidpush(Telement){

if(index>objects.length){
();
}

objects[index++]=element;
}

/**
*彈出棧頂元素
*
*@returnT
*/
publicTpop(){

if(index<0){
();
}

return(T)objects[--index];
}
}
//動態棧

importjava.util.ArrayList;
importjava.util.List;

/**
*2016/10/3110:23
*
*@author3306TODO
*/

publicclassFreeStack<T>implementsStackInterface<T>{

privateList<T>storage=newArrayList<>();
privateintindex=0;

@Override
publicvoidpush(Telement){
if(null==element){
();
}

storage.add(element);
index++;
}

@Override
publicTpop(){


if(index<0){
();
}


returnstorage.get(--index);
}
}
//student類

/**
*2016/10/3110:11
*
*@author3306TODO
*/

publicclassStudent{

privateintstudentNo;
privateStringstudentName;

publicintgetStudentNo(){
returnstudentNo;
}

publicvoidsetStudentNo(intstudentNo){
this.studentNo=studentNo;
}

publicStringgetStudentName(){
returnstudentName;
}

publicvoidsetStudentName(StringstudentName){
this.studentName=studentName;
}

@Override
publicStringtoString(){
return"Student{"+
"studentNo="+studentNo+
",studentName='"+studentName+'''+
'}';
}
}
//測試類

/**
*2016/10/3110:12
*
*@author3306TODO
*/

publicclassTestStack{

publicstaticvoidmain(String[]args){

testStableStack();

testFreeStack();
}


(){

System.out.println(" -----------fixed------------");

StackInterface<Student>myStack=newFixedStack<>();
intnumOfStudent=3;

for(intindex=0;index<numOfStudent;index++){
Studentstu=newStudent();

stu.setStudentNo(index);
stu.setStudentName("stu"+index);

myStack.push(stu);
}


for(intindex=0;index<numOfStudent;index++){
System.out.println(myStack.pop());
}


}

(){
System.out.println(" -----------free------------");

StackInterface<Student>freeStack=newFreeStack<>();
intnumOfStudent=5;

for(intindex=0;index<numOfStudent;index++){
Studentstu=newStudent();

stu.setStudentNo(index);
stu.setStudentName("stu"+index);

freeStack.push(stu);
}


for(intindex=0;index<numOfStudent;index++){
System.out.println(freeStack.pop());
}
}


}

Ⅱ Java中棧的使用

和C++裡面一樣,有入棧,彈棧,查找函數
import java.util.*;(引入包含棧類的頭文件)
相關函數介紹
boolean empty()
測試堆棧是否為空。
E peek()
查看堆棧頂部的對象,但不從堆棧中移除它。
E pop()
移除堆棧頂部的對象,並作為此函數的值返回該對象。
E push(E item)
把項壓入堆棧頂部。
int search(Object o)
返回對象在堆棧中的位置,以 1 為基數。

Ⅲ JAVA 方法的入棧出棧問題

你得明白棧的定義。代碼執行的時候是執行一個方法,執行完,返回方法的上一個代碼塊繼續往下執行後面的內容。這樣的話是不是就是一個棧結構了?先進後出。方法一邊執行,一邊往棧裡面存數據,等執行完了就取出數據(取出的是返回值,是最後一個存進去的 棧結構是後進先出),然後執行外面的代碼。這么說你可能不明白,我給你舉個例子。

int sub(int a,int b){
return a+b;

}
int c = sub(2,3);//注意執行這條語句的時候是不是執行了一個方法?
//那麼語句執行的時候是要從左往右執行的對吧,但是事實的邏輯卻是先算出來sub(2,3)這個方
//法的返回值,然後再把返回值(5)賦值給 c ,那麼這個怎麼實現,肯定是一個棧的數據結構,編譯的時候先把」int c = 「入棧,然後再把 sub(2,3),入棧,執行的時候,從棧裡面取,取的第一個肯定是sub(2,3)吧?於是就計算出等於5,繼續取,取出了int c =,然後就和5對接上了,就把值賦給c了。這只是一個小例子。
道理是這樣,但是具體的存取可不是這樣的哦。具體的存取應該分的非常細膩,應該是按照java語法的最小單位來往棧里存取的。說白了一句話,程序運行的時候的先後順序是跟人大腦想問題的順序一樣的,但是代碼不是按照這樣的順序寫的(從左到右),於是就用棧結構來達到這樣的效果。
這么說,明白了嗎?

Ⅳ 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;
}

Ⅳ java元素入棧

代碼貼全下。
你先 弄清楚 入棧邏輯。
你應該是 自己用 數組 來 實現 固定大小 棧的功能。
top 應該是 最後一次元素的 位置。
getSize() 應該是數組長度 應該是 數組當前實際存儲的長度
入棧 第一步 是不是 先要 判斷一下 這一次 入棧 會不會超過 當前 棧的大小。
我認為if(getSize()>=elements.length) 是這個功能。
然後 如果 此次 入棧 沒有超過 其數組的大小。
那麼將其 入棧 。

Ⅵ java數據結構 有關於 入棧和入隊的 問題

這和具體的實現有關,例如top初始值為-1,當然要先加一,然後在放數據。如果top初始值是0那麼也可以是data[top++]這樣的形式。tail也是一樣的道理,放入數據在加一,下一次就可以先放數據。

Ⅶ java 進棧

public StackX(int maxSize){
maxSize=maxSize;
stackarray=new long[maxSize];
top=-1;
}

不好意思,你犯了一個很傻的錯誤,這里應該是this.maxSize = maxSize,否則的話,你的實例變數maxSize還是沒有被初始化為正確值,而只是默認值0

Ⅷ java stack棧的入棧出棧問題

java 裡面的對象傳入多為 址 傳遞,當你傳遞一個對象的時候,如果是址傳遞,那麼接收者存儲的只是被傳遞對象的地址,所以,當這個地址上的元素發生變化的時候,所有引用該地址的變數都會發生變化。

閱讀全文

與java入棧相關的資料

熱點內容
伺服器怎麼用不會斷電 瀏覽:301
主從伺服器有什麼用 瀏覽:213
jstlpdf 瀏覽:14
安卓原神在哪個app下載 瀏覽:808
單片機編程技術什麼意思 瀏覽:104
e點課堂源碼 瀏覽:45
免費打擊墊app哪個好 瀏覽:532
程序員必裝的6款軟體 瀏覽:750
基於單片機的遙控器設計 瀏覽:521
安卓如何取消圓圖標 瀏覽:11
收件伺服器怎麼樣 瀏覽:48
建築設計規范pdf 瀏覽:98
如何合並兩個pdf 瀏覽:174
刷機包必須要解壓的單詞 瀏覽:483
android課表實現 瀏覽:864
頭條app在哪裡能看見有什麼活動 瀏覽:511
冰櫃壓縮機電容80歐 瀏覽:609
安卓各個版本圖標什麼樣 瀏覽:152
無錫哪裡有製作手機app 瀏覽:538
php字元串轉json數組 瀏覽:6