1 package struct;
2
3
4 //接口
5 interface IArrayStack{
6 //栈的容量
7 int length();
8 //栈中元素个数(栈大小)
9 int size();
10 //取栈顶元素
11 Object top();
12 //判断栈是否为空
13 boolean isEmpty();
14 //入栈
15 Object pop();
16 //出栈
17 Object push(Object value);
18 //清空栈
19 void clear();
20 }
21
22
23 //实现接口的StackImpl类
24 class StackImpl implements IArrayStack{
25 static Object[] arr;//数组
26 private int top;//标记栈顶位置,并且表示栈的容量大小
27 private static int MAXSIZE = 10;//数组的最大长度(常量)
28 //构造方法 
29 public StackImpl(){
30 arr = new Object[MAXSIZE];
31 top = 0;
32 }
33 //求堆栈容量
34 public int length() {
35 return MAXSIZE;
36 }
37 //求堆栈中元素的个数,即堆栈大小
38 public int size(){
39 return top;
40 }
41 //取栈顶元素
42 public Object top() {
43 return arr[top];
44 }
45 //判断堆栈是否为空
46 public boolean isEmpty() {
47 return (size() == 0);
48 }
49 //出栈
50 public Object pop() {
51 if(isEmpty()){
52 System.out.println("The Stack is empty");
53 return -1;
54 }
55 Object value = arr[top - 1];
56 top--;
57 arr[top -1] = null;
58 return value;
59 }
60 //对栈进行扩容(每次扩容一倍)
61 public void expand(){
62 Object[] largerArr = new Object[size()*2];
63 for(int index = 0;index < top;index++){
64 largerArr[index] = arr[index];
65 }
66 arr = largerArr;
67 MAXSIZE = arr.length;
68 }
69 //入栈
70 public Object push(Object value) {
71 //如果超过入栈元素数组长度
72 if(top == arr.length){
73 expand();
74 }else{
75 arr[top] = value;
76 top++;
77 }
78 return arr;
79 }
80 //打印堆栈中元素
81 public static void print(){
82 myPrint1(arr);
83 }
84 private static void myPrint1(Object[] obj){
85 for(int i = 0;i < obj.length;i++){
86 System.out.println(obj[i] + " ");
87 }
88 }
89 //清空堆栈
90 public void clear() {
91 for(int i = top;i > 0;i--){
92 arr[i] = null;
93 top--;
94 }
95 }
96 }
97
98
99 //测试函数
100 public class ArrayStack {
101 public static void main(String[] args) {
102 IArrayStack stack = new StackImpl();
103 System.out.println("==================栈中不存在元素测isEmpty函数================");
104 System.out.println(stack.isEmpty());
105 System.out.println("==================测length函数================");
106 System.out.println( stack.length());
107 System.out.println("==================测push及print函数================");
108 stack.push("lemon");
109 stack.push("hah");
110 stack.push(1);
111 stack.push(9);
112 stack.push("lemon");
113 stack.push("hah");
114 stack.push(1);
115 stack.push(9);
116 stack.push("lemon");
117 stack.push("hah");
118 stack.push(1);
119 stack.push(9);
120 StackImpl.print();
121 System.out.println("==================扩容后测length函数================");
122 System.out.println(stack.length());
123 System.out.println("==================测top函数================");
124 System.out.println(stack.top());
125 System.out.println("==================测size函数================");
126 System.out.println( stack.size());
127 System.out.println("==================测pop函数================");
128 stack.pop();
129 stack.pop();
130 System.out.println( stack.size());
131 System.out.println("==================栈中存在元素测isEmpty函数================");
132 System.out.println(stack.isEmpty());
133 System.out.println("==================clear后侧size函数================");
134 stack.clear();
135 System.out.println( stack.size());
136 }
137 }

最新文章

  1. CoreData总结
  2. javascript 之拼接html字符串
  3. HeadFirst Jsp 14 (Structs)
  4. POJ_2488——骑士遍历棋盘,字典序走法
  5. Python -- machine learning, neural network -- PyBrain 机器学习 神经网络
  6. hdu1695 GCD(莫比乌斯入门题)
  7. SpringCloud是否值得引入?
  8. iOS中 动态启动图GIF的简单设置 韩俊强的博客
  9. 语法、id和class选择器、创建、
  10. 将struct转为map
  11. 2017-2018-2 20155314《网络对抗技术》Exp9 Web安全基础
  12. TortoiseSvn/Git的WaterEffect
  13. pthread线程特定数据
  14. label 和input/textarea居中对齐
  15. CSS之浏览器默认样式问题
  16. 通过C/C++基于http下载文件
  17. 2017-2018-2 20155230《网络对抗技术》实验9:Web安全基础
  18. Android开发(二)——自定义圆形控件的使用CircleImageView
  19. cURL 是一个功能强大的PHP库。
  20. 使用wireshark分析tcp/ip报文之报文头

热门文章

  1. linux 的 逻辑卷管理
  2. Typecho 反序列化漏洞 分析及复现
  3. robot_framewok自动化测试--(4)常用关键字介绍
  4. 使用BadBoy录制JMeter脚本
  5. [python]django的mode设置表结构和serializers序列化数据
  6. 大爽Python入门教程 3-5 习题
  7. 双非本科进大疆(SP)!
  8. 分布式配置系统Apollo如何实时更新配置的?
  9. java-通过IO流复制文件夹到指定目录
  10. [hdu7032]Command and Conquer: Red Alert 2