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

来源:互联网 发布:阿里云 招聘 安全 编辑:程序博客网 时间:2024/05/19 19:15

提供一个接口 

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());}}}







原创粉丝点击