数据结构<十>: 线程结构 栈的两种实现

提供一个接口 

package com.mo.stack;

/**
 * 	这是栈的接口,抽象数据类型
 */
public interface Stack {
	/**
	 *	入栈 
	 */
	void push(Object obj) throws Exception;
	/**
	 * 出栈 
	 */
	Object pop() throws Exception;
	/**
	 *	取出栈的元素 
	 */
	Object getTop() throws Exception;
	/**
	 *	栈是不是为空 
	 */
	boolean isEmpty();
}


用数组实现的栈


package com.mo.stack;

public class SeqStack implements Stack {
	
	private final static int defaultSize = 10;//默认创建的数组大小
	private int top;//栈顶的元素的下标
	private Object[] stack;//栈数组
	private int maxStackSize;//数组的容量
	
	public SeqStack() {
		init(defaultSize);
	}
	public SeqStack(int size) {
		init(size);
	}
	private void init(int size) {
		stack = new Object[size];
		top = 0;
		maxStackSize = size;
	}
	public void push(Object obj) throws Exception {
		if(top == maxStackSize) throw new Exception();
		stack[top] = obj;
		top++;
	}
	public Object pop() throws Exception {
		if(top == 0) throw new Exception();
		Object obj = stack[top - 1];
		top--;
		return obj;
	}
	public Object getTop() throws Exception {
		if(top < 0) throw new Exception();
		return stack[top - 1];
	}
	public boolean isEmpty() {
		return top == 0;
	}
	public static void main(String[] args) throws Exception {
		SeqStack seqStack = new SeqStack();
		for(int i = 0; i < 10; i++) {
			seqStack.push(i);
		}
		while(!seqStack.isEmpty()) {
			System.out.print(seqStack.pop());
		}
	}
}


用链表实现的栈


package com.mo.stack;

import com.mo.linList.Node;

//链表实现的堆栈
public class LinStack implements Stack{

	private Node head;//栈顶
	private int size;//栈中的元素个数
	
	public LinStack() {
		head = null;
		size = 0;
	}
	
	public void push(Object obj) throws Exception {
		Node node = new Node(obj,head);//把首节点放在新增的obj后面
		head = node;//设为当前节点
		size++;
	}

	public Object pop() throws Exception {
		if(size == 0) throw new Exception();
		Object oldHead = head.getData();//获取首节点的元素数据
		head = (Node)head.getNext();//把链表的下一个Node设为当前节点
		size--;
		return oldHead;
	}

	public Object getTop() throws Exception {
		if(size == 0) throw new Exception();
		return head.getData();
	}

	public boolean isEmpty() {
		return size == 0;
	}
	
	public static void main(String[] args) throws Exception {
		LinStack linStack = new LinStack();
		for(int i = 0; i < 10; i++) {
			linStack.push(i+1);
		}
		while(!linStack.isEmpty()) {
			System.out.print(linStack.pop());
		}
	}
	

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值