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. 记录 mysql 使用时遇到的问题

    1,linux平台上mysqld和mysql的区别. 首先,mysql数据库是标准的c/s架构,yum安装时注意到了,有mysql和mysql-server包 mysql是客户端的工具,mysqld ...

  2. Linux 服务器的基本性能及测试方法

    1. 摘要 一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其当程序非正常工作 ...

  3. hudi clustering 数据聚集(一)

    概要 数据湖的业务场景主要包括对数据库.日志.文件的分析,而管理数据湖有两点比较重要:写入的吞吐量和查询性能,这里主要说明以下问题: 1.为了获得更好的写入吞吐量,通常把数据直接写入文件中,这种情况下 ...

  4. SpringCloud 2020.0.4 系列之 Stream 消息广播 与 消息分组 的实现

    1. 概述 老话说的好:事情太多,做不过来,就先把事情记在本子上,然后理清思路.排好优先级,一件一件的去完成. 言归正传,今天我们来聊一下 SpringCloud 的 Stream 组件,Spring ...

  5. CSS学习笔记:flex布局

    目录 一.Flex布局简介 1. Flex布局的主要作用 2. Flex布局应用场景 二.Flex布局的使用 1. Flex布局的两种相关元素 2. 父项属性 2.1 flex- direction ...

  6. Robot frawork关键字使用报错原因

    对比发现1或者${1}两种方式赋值输出的类型都为整形 >>> ${test1}    set variable   'www' >>> log    ${test1 ...

  7. 如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室(升级版)

    很长一段时间没有写3D库房,3D密集架相关的效果文章了,刚好最近有相关项目落地,索性总结一下 与之前我写的3D库房密集架文章<如何用webgl(three.js)搭建一个3D库房,3D密集架,3 ...

  8. emoji表情等特殊字符处理和存储的两个方案

    方案1.改数据库配置 使之支持emoji表情等特殊字符,小公司或者个人开发还好,大公司用此方案代价较大. 以mysql为例,改配置方法参考:https://blog.csdn.net/u0107373 ...

  9. js数组常用添加方法有两种

        //头部     //this.list.unshift({name:this.itemName,date:new Date()});     //尾部         this.list.p ...

  10. mybatis避免sql的like注入

    <select id="NotInByEvalQuestion" resultType="com.rm.eval.entity.EvalQnQuestion&quo ...