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 }

数组实现堆栈——Java实现的更多相关文章

  1. JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想

    JAVA之旅(三)--数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 我们继续JAVA之旅 一.数组 1.概念 数组就是同一种类型数据的集合,就是一个容器 数组的好 ...

  2. 数据结构(3):java使用数组模拟堆栈

    堆栈原理: 数组模拟堆栈: //数组模拟栈 class ArrayStack{ //栈顶 private int top = -1; private int maxSize; private int[ ...

  3. Java 数组实现堆栈操作

    class Stack { private int stck[] ; private int tos ; Stack(int size) { // 一个参数的构造参数 stck = new int[s ...

  4. JSon_零基础_007_将JSon格式的"数组"字符串转换为Java对象"数组"

    将JSon格式的"数组"字符串转换为Java对象"数组". 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“n ...

  5. Java-Runoob-高级教程-实例-数组:16. Java 实例 - 数组并集

    ylbtech-Java-Runoob-高级教程-实例-数组:16. Java 实例 - 数组并集 1.返回顶部 1. Java 实例 - 数组并集  Java 实例 以下实例演示了如何使用 unio ...

  6. ylbtech-Java-Runoob-高级教程-实例-数组:15. Java 实例 – 判断数组是否相等

    ylbtech-Java-Runoob-高级教程-实例-数组:15. Java 实例 – 判断数组是否相等 1.返回顶部 1. Java 实例 - 判断数组是否相等  Java 实例 以下实例演示了如 ...

  7. Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素

    ylbtech-Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素 1.返回顶部 1. Java 实例 - 在数组中查找指定元素  Java 实例 以下实例 ...

  8. Java-Runoob-高级教程-实例-数组:13. Java 实例 – 数组交集

    ylbtech-Java-Runoob-高级教程-实例-数组:13. Java 实例 – 数组交集 1.返回顶部 1. Java 实例 - 数组交集  Java 实例 以下实例演示了如何使用 reta ...

  9. Java-Runoob-高级教程-实例-数组:12. Java 实例 – 数组差集

    ylbtech-Java-Runoob-高级教程-实例-数组:12. Java 实例 – 数组差集 1.返回顶部 1. Java 实例 - 数组差集  Java 实例 以下实例演示了如何使用 remo ...

随机推荐

  1. linux 关于 环境变量

    有关环境变量的文件 系统级环境变量:每一个登录到系统的用户都能够读取到系统级的环境变量       用户级环境变量:每一个登录到系统的用户只能够读取属于自己的用户级的环境变量  文件加载顺序: ==& ...

  2. Vue 基础自查——条件渲染和列表渲染

    v-if和v-show的区别是什么? v-if和v-for为什么不能一起用? v-for中的key有什么作用? 1 v-if 和 v-show 1.1 作用 都用来控制元素的显示和隐藏 1.2 控制元 ...

  3. VSCode Java 开发环境配置 详细教程

    VSCode Java 开发环境配置 详细教程 配置java 下载 用于现在大多数使用者用的是java 8,小白的我先安装java 8好了,^ w ^. 下载地址:Java 8 | Java SE 打 ...

  4. 用 Python 修改微信(支付宝)运动步数,轻松 TOP1

    用 Python 修改微信(支付宝)运动步数,轻松 TOP1 项目意义 如果你想在支付宝蚂蚁森林收集很多能量种树,为环境绿化出一份力量,又或者是想每天称霸微信运动排行榜装逼,却不想出门走路,那么该py ...

  5. 蓝图before request

    方法1 @bp.before_request def test(): print("test") 方法2 def bp_before_request(): print(test) ...

  6. hbuilder中webview调试console.log无法输出日志的问题

    遇到这个问题的亲,肯定是用的模拟器来测试的,其实你只要换成真机测试就能打印了,前提是安卓系统. 有问题欢迎留言,如果你觉得这个文章对你有帮助,就请点个赞吧!

  7. 大爽Python入门教程 3-2 条件判断: if...elif..else

    大爽Python入门公开课教案 点击查看教程总目录 简单回顾if 回顾下第一章的代码 >>> x = 5 >>> if x > 0: ... print(&q ...

  8. python实现图像二值化

    1.什么是图像二值化 彩色图像: 有blue,green,red三个通道,取值范围均为0-255 灰度图:只有一个通道0-255,所以一共有256种颜色 二值图像:只有两种颜色,黑色和白色,二值化就是 ...

  9. [bzoj1072]排列

    考虑用状压dp枚举排列,即f[i][j]表示当前状态为i,余数为j的方案数,考虑在末尾新增一个字符来转移即可,注意最后答案要除以排列组合 1 #include<bits/stdc++.h> ...

  10. [bzoj5291]链上二次求和

    记$bi=b_{i-1}+ai$,$ci=c_{i-1}+bi$,那么答案就是$\sum_{i=l}^{r}\sum_{j=0}^{n-i}b_{j+i}-bj=(r-l+1)cn-\sum_{i=l ...