数组实现堆栈——Java实现

原创 2018年04月17日 20:09:19
package struct;


//接口
interface IArrayStack{
	//栈的容量
	int length();
	//栈中元素个数(栈大小)
	int size();
	//取栈顶元素
	Object top();
	//判断栈是否为空
	boolean isEmpty();
	//入栈
	Object pop();
	//出栈
	Object push(Object value);
	//清空栈
	void clear();
}


//实现接口的StackImpl类
class StackImpl implements IArrayStack{
	static Object[] arr;//数组
	private int top;//标记栈顶位置,并且表示栈的容量大小
	private static int MAXSIZE = 10;//数组的最大长度(常量)
	//构造方法 
	public StackImpl(){
		arr = new Object[MAXSIZE];
		top = 0;
	}
	//求堆栈容量
	public int length() {
		return MAXSIZE;
	}
	//求堆栈中元素的个数,即堆栈大小
	public int size(){
		return top;
	}
	//取栈顶元素
	public Object top() {
		return arr[top];
	}
	//判断堆栈是否为空
	public boolean isEmpty() {
		return (size() == 0);
	}
	//出栈
	public Object pop() {
		if(isEmpty()){
			System.out.println("The Stack is empty");
			return -1;
		}
		Object value = arr[top - 1];
		top--;
		arr[top -1] = null;
		return value;
	}
	//对栈进行扩容(每次扩容一倍)
		public void expand(){
			Object[] largerArr = new Object[size()*2];
			for(int index = 0;index < top;index++){
				largerArr[index] = arr[index];
			}
			arr = largerArr;
			MAXSIZE = arr.length;
		}
	//入栈
	public Object push(Object value) {
		//如果超过入栈元素数组长度
		if(top == arr.length){
			expand();
		}else{
			arr[top] = value;
			top++;	
		}
		return arr;
	}
	//打印堆栈中元素
	public static void print(){
		myPrint1(arr);
	}
	private static void myPrint1(Object[] obj){
		for(int i = 0;i < obj.length;i++){
			System.out.println(obj[i] + " ");
		}
	}
	//清空堆栈
	public void clear() {
		for(int i = top;i > 0;i--){
			arr[i] = null;
			top--;
		}
	}
}


//测试函数
public class ArrayStack {
	public static void main(String[] args) {
		IArrayStack stack = new StackImpl();
		System.out.println("==================栈中不存在元素测isEmpty函数================");
		System.out.println(stack.isEmpty());
		System.out.println("==================测length函数================");
		System.out.println( stack.length());
		System.out.println("==================测push及print函数================");
		stack.push("lemon");
		stack.push("hah");
		stack.push(1);
		stack.push(9);
		stack.push("lemon");
		stack.push("hah");
		stack.push(1);
		stack.push(9);
		stack.push("lemon");
		stack.push("hah");
		stack.push(1);
		stack.push(9);
		StackImpl.print();
		System.out.println("==================扩容后测length函数================");
		System.out.println(stack.length());
		System.out.println("==================测top函数================");
		System.out.println(stack.top());
		System.out.println("==================测size函数================");
		System.out.println( stack.size());
		System.out.println("==================测pop函数================");
		stack.pop();
		stack.pop();
		System.out.println( stack.size());
		System.out.println("==================栈中存在元素测isEmpty函数================");
		System.out.println(stack.isEmpty());
		System.out.println("==================clear后侧size函数================");
		stack.clear();
		System.out.println( stack.size());
	}
}


java基础(三)方法/数组/堆栈/

方法: 方法调用的类型:单独调用,输出调用,赋值调用,返回值是void的只有单独调用; 方法的注意事项:1.方法不调用不执行;main方法是被虚拟机自动识别调用的,是程序的入口; 2.方法与方法是...
  • u011146511
  • u011146511
  • 2016-06-25 16:44:18
  • 344

Java数组实现自定义栈

栈是一种“先进后出(FILO)”的数据结构,最后压入的数据项总是位于栈顶的位置,下面是维基百科中对栈的定义: 堆栈(英语:stack),也可直接称栈。台湾作堆叠,在计算机科学中,是一种特殊的串行形...
  • hu1991die
  • hu1991die
  • 2015-01-12 17:25:19
  • 1395

Java数组实现堆栈和队列

数组堆栈: public class Stack { private long[] stackArray; private int top; private int maxSize; p...
  • lingzhm
  • lingzhm
  • 2015-03-11 18:31:11
  • 1307

java用数组实现栈

1.1.  栈的数据结构 栈是一种先进后出的数据结果,只能在一端(称为栈顶(top))对数据项进行插入和删除。 1.2.  Java实现 StackTest p...
  • u022812849
  • u022812849
  • 2015-02-14 10:10:14
  • 9640

数组实现堆栈操作

感觉自己数据结构学的好慢啊。 感觉用不惯C++的输入输出,其实看我胡扯不如直接去看代码来的实在。 堆栈的在于查看是否满(溢出),或者为空(NULL) 上代码: // // main.cpp ...
  • sdlwzzm19971226
  • sdlwzzm19971226
  • 2017-03-20 16:14:46
  • 611

4-7 在一个数组中实现两个堆栈 (20分)

本题要求在一个数组中实现两个堆栈。 函数接口定义:Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int ...
  • wanmeiwushang
  • wanmeiwushang
  • 2016-07-11 19:12:33
  • 3351

数组模拟堆栈

需求:编写一个类使用数组模拟堆栈的存储方式。 堆栈存储特点: 先进后出,后进先出。注意: 不再使用的对象,应该不要让变量指向该对象,要让该对象尽快的被垃圾回收期回收。class StackList{...
  • zxiang248
  • zxiang248
  • 2016-07-04 19:18:00
  • 540

4-7 在一个数组中实现两个堆栈

本题要求在一个数组中实现两个堆栈。  函数接口定义: Stack CreateStack( int MaxSize );  bool Push( Stack S, ElementType X...
  • wszzzx
  • wszzzx
  • 2016-12-17 23:14:11
  • 176

java通过数组描述堆栈

public class StackArray{ int MaxSize=20; int Top=-1; int[] AStack=new int[MaxSize];//---------------...
  • htyy521
  • htyy521
  • 2007-12-06 14:32:00
  • 455

【Java】一个数组实现三个栈 (未完待续)

等长的相对简单,设置三个栈顶指针,考虑栈为空的情况分别push和pop就好 public class threeStacks { int stackSize = 100; int[] buffe...
  • michellechouu
  • michellechouu
  • 2015-07-10 10:46:13
  • 581
收藏助手
不良信息举报
您举报文章:数组实现堆栈——Java实现
举报原因:
原因补充:

(最多只允许输入30个字)