java栈的实现复习

 

栈是一种线性表,仅限在一端进行插入和删除操作,特点是先进后出。

由于栈是一种线性结构,首先可以想到用数组来实现,但由于数组初始化后容量就已经确定,如果不添加扩容操作,则会出现栈溢出,同时扩容操作也会降低一些效率;如果事先九分配较大空间则可能造成资源浪费。一种解决方法是同一个数组实现两个栈,让两个栈向数组中心延伸,当两个栈底元素相遇则溢出,虽然空间利用率大于数组长度的一半,但仍不理想。

 

另一种实现方法则是链表实现,链表实现可以避免数组实现的各项问题。

栈的基本操作接口

1 public interface StackMethods {
2     Stack initStack(Stack stack);//栈的初始化
3     Object getTop() throws Exception;//获取栈顶
4     void push(Object data);//入栈
5     public Object pop() throws Exception;//出栈
6     void clearStack();//清空栈内元素
7     boolean isStackEmpty();
8     int stackLength();
9 }

 

栈的实体类

 1 public class Stack {
 2     
 3     public Object data;
 4     public Stack next;  
 5     public Stack( Object data) {     
 6         this.data = data;
 7     }
 8    
 9     
10 }

 

栈基本操作方法的具体实现类SimpleStack

 1 public class SimpleStack implements StackMethods  {
 2     private Stack first = null;
 3    
 4     @Override
 5     public Stack initStack(Stack stack) {
 6        
 7         return null;
 8     }
 9     /**
10      * 返回站定元素
11      */
12     @Override
13     public Object getTop() throws Exception{
14         if( first == null)  throw new Exception("empty!");   
15         return first.data;
16     }
17     /**
18      * 入栈
19      */
20     @Override
21     public void push(Object data) {
22         Stack stack = new Stack(data);
23         stack.next = first;
24         first = stack;
25     }
26     /**
27      * 出栈
28      */
29     @Override
30     public Object pop() throws Exception{
31         if( first == null)  throw new Exception("empty!");   
32         Object data = first.data;
33         first = first.next;
34         return data;
35     }
36     /**
37      * 清空栈
38      */
39     @Override
40     public void clearStack() {
41         while(first != null){
42             first = first.next;
43         }
44 
45     }
46     
47     @Override
48     public boolean isStackEmpty() {
49        return first == null;
50     }
51 
52     @Override
53     public int stackLength() {
54         int i = 0;
55         while(first != null) i++;
56         return i;
57     }
58     public static void main(String[] args) throws Exception{
59         SimpleStack s = new SimpleStack();
60         for(int i=0; i<10; i++){
61             s.push(i);
62             System.out.println(s.getTop()+""); 
63         }
64             
65         while(!s.isStackEmpty()){
66             System.out.println(s.pop()+"");      
67         }
68         
69     }
70 
71     
72 
73 }

 

posted @ 2017-02-23 23:09  iiiorz  阅读(203)  评论(0编辑  收藏  举报