java定义栈

public interface StackInterface {
 public boolean isEmpty();
 public boolean isFull();
 public boolean push(Object object);
 public Object pop();
 public Object peek(); //获取栈顶元素
 }

 

public class JavaStack implements StackInterface {
	
	public Object[] table;
	public int top;
	
	/**不带参数的构造器,构造10个储存单元*/
	public JavaStack(){
		table = new Object[10];
		top = -1;
	}
	public JavaStack(int stackNum){
		table = new Object[stackNum];
		top = -1;
		
	}

	@Override
	public boolean isEmpty() {
		return (top == -1);
	}

	@Override
	public boolean isFull() {
		return (top >= table.length -1);
	}

	@Override
	public boolean push(Object object ) {
		if(!isFull()){
			
			table[++top] = new Object();
			table[top] = object;
			return true;
		}
		System.out.println("栈满,无法执行入栈操作!");
		return false;
	}

	@Override
	public Object pop() {
		Object object = null;
		if(!isEmpty()){
			object = table[top];
			table[top] = null;
			top--;
			
		}
		return object;
	}

	@Override
	public Object peek() {
		if(!isEmpty()){
			return table[top];
			
		}
		return null;
	}


}


 

Java顺序使用顺序存储结构实现,下面从实现和使用方法两方面介绍: ### 实现 #### 实现思路 使用数组存储中的元素,用一个变量`top`指向顶元素的下标。初始时,`top`为 -1,表示为空。当有元素入时,`top`加 1,并将元素存储在数组对应位置;出时,先检查是否为空,若不为空,返回`top`位置的元素,并将`top`减 1 [^1]。 #### 实现代码 ```java import java.util.Arrays; // 定义顺序类 class ShunxuStack implements IStack { Object[] objArray; int top = -1; // 指向顶元素所在下标 // 构造函数,初始化的容量 public ShunxuStack(int i) { objArray = new Object[i]; } // 清空 @Override public void clear() { Arrays.stream(objArray).forEach(obj -> obj = null); top = -1; } // 判断是否为空 @Override public boolean isEmpty() { return top == -1; } // 获取的长度 @Override public int length() { return top + 1; } // 获取顶元素 @Override public Object peek() { if (isEmpty()) return null; return objArray[top]; } // 入操作 @Override public void push(Object object) throws Exception { if (top >= objArray.length - 1) throw new Exception("StackOverFlowError"); top++; objArray[top] = object; } // 出操作 @Override public Object pop() { if (isEmpty()) return null; top--; return objArray[top + 1]; } } // 定义的接口 interface IStack { void clear(); boolean isEmpty(); int length(); Object peek(); void push(Object object) throws Exception; Object pop(); } ``` ### 使用方法 #### 初始化 创建`ShunxuStack`对象时,需要指定的初始容量: ```java ShunxuStack stack = new ShunxuStack(10); ``` #### 入操作 调用`push`方法将元素压入中: ```java try { stack.push("element"); } catch (Exception e) { e.printStackTrace(); } ``` #### 出操作 调用`pop`方法将顶元素弹出: ```java Object element = stack.pop(); ``` #### 其他操作 还可以使用`isEmpty`判断是否为空,`peek`获取顶元素,`length`获取的长度,`clear`清空: ```java boolean isEmpty = stack.isEmpty(); Object topElement = stack.peek(); int length = stack.length(); stack.clear(); ``` #### 测试代码示例 ```java public class Main { public static void main(String[] args) { ShunxuStack stack = new ShunxuStack(10); try { stack.push("A"); stack.push("B"); stack.push("C"); System.out.println("顶元素: " + stack.peek()); System.out.println("的长度: " + stack.length()); Object poppedElement = stack.pop(); System.out.println("弹出的元素: " + poppedElement); System.out.println("是否为空: " + stack.isEmpty()); stack.clear(); System.out.println("清空后是否为空: " + stack.isEmpty()); } catch (Exception e) { e.printStackTrace(); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值