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