題目
編寫程序,使用一維數組,模擬棧數據結構
要求
- 這個棧可以存儲java中任何引用數據類型的數據
- 在棧中提供push方法模擬壓棧。 (棧滿,有提示)
- 在棧中提供pop方法模擬彈棧 (棧空,也有提示)
- 編寫測試程序,new棧對象,調用push,pop方法來模擬壓棧彈棧的動作
- 不傳參數時,默認初始化時棧空間容量爲10
思路
public class MyStack {//棧類
提供一個數組來存儲棧中的元素
Object[] elements;
棧幀(永遠指向棧頂部的元素)
每加1個元素,棧幀+1
每減1個元素,棧幀-1
int index;
構造方法
構造方法是不是應該給一維數組一個初始化容量
push方法( push 方法壓棧)
壓棧表示棧中多一個元素
但是棧如果已滿,壓棧失敗
這個方法的參數以及返回值類型自己定義
pop方法(pop 方法彈棧)
彈棧表示棧中少一個元素
但是棧如果已空,彈棧失敗
這個方法的參數以及返回值類型自己定義
}
編程實現
java
public class MyStack {
//爲啥選用Object 數組,因爲Object可以存任何引用數據類型的數據
//提供一個數組來存儲棧中的元素
private Object[] elements;
//棧幀(永遠指向棧頂部的元素) 初始化0
private int index = 0 ; //如果index採用0,表示棧幀指向了頂部元素的上方
// private int index = -1 ; //如果index採用-1,表示棧幀指向了頂部元素
public MyStack(){
//默認初始化容量
this.elements = new Object[10];
}
public MyStack(Object[] elements){
this.elements = elements;
}
public void setElements(Object[] elements) {
this.elements = elements;
}
public Object[] getElements() {
return elements;
}
public void setIndex(int index) {
this.index = index;
}
public int getIndex() {
return index;
}
// push方法( push 方法壓棧)
public void push(Object ele){
//先判斷棧是否滿了
if (this.index <this.elements.length){
//壓棧操作
// this.elements[this.index] = ele;
//向棧中加1個元素,棧幀向上移動一個位置
// this.index++;
this.elements[this.index++] = ele; //整合方法 index是 index++ 或者++index 取決於 index初始化的值
System.out.println("棧空間還剩"+(this.elements.length-this.index)+"數據"+ele+",壓棧成功");
}else {
System.out.println("棧空間已滿,壓棧失敗");
}
}
// pop方法(pop 方法彈棧)
public Object pop(){
//先判斷棧內是否有數據
if(this.index>0){
System.out.println("彈出棧內元素:"+this.elements[this.index-1]);
this.index--;
System.out.println("棧幀指向:"+this.index);
return this.elements[this.index];
}else {
System.out.println("棧內無元素,彈棧失敗");
return null;
}
}
}
class StackTest{
public static void main(String[] args) {
MyStack myStack = new MyStack(new String[8]);
myStack.push("張三");
myStack.pop();
MyStack myStack1 = new MyStack(new Integer[23]);
myStack1.push(23);
myStack1.pop();
MyStack myStack2 = new MyStack(new String[2]);
myStack2.push("xiaom");
myStack2.push("xiaohong");
myStack2.push("xiaogang");
myStack2.pop();
myStack2.pop();
myStack2.pop();
MyStack myStack3 = new MyStack();
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
}
}