用数组实现一个栈结构

    栈在计算机中是很常见的,栈究竟是什么呢?用官方的话说栈(Stack) 类表示后进先出(LIFO)的对象堆栈。通俗的讲栈至关因而一个容器,就咱们生活中而言,咱们能够在容器中装东西,也能够从中取出咱们想要的物品。咱们能够形象地画个示意图,以下所示:java

    假如,咱们有几个(编号为一、二、三、四、五、六、7)物品按照如图装入容器中,顺序如图所示,假如咱们要取出来,顺序必定是倒着的(即:七、六、五、四、三、二、1),这就是咱们所谓的:LIFO(Last In First Out)。在栈中,咱们称最早放入的元素称为栈底元素,最后放入的称为栈顶元素。将元素放在栈中称为入栈,取出称为出栈。如今咱们想要用数组简单地实现栈结构。数组

    查API可知,在栈中存在5个方法,即:empty()、peek()、pop()、push()、search()。要想实现这几种方法,咱们须要分别构造相应的方法,使之达到预期的效果。函数

package stack01;
import java.util.Arrays;
import java.util.EmptyStackException;
public class StackExer {
	class ArrayStack{
		private String[] data=new String[10];//存储数据
		private int size;//记录个数
//把item压入堆栈顶部
		public void push(String str) {
			//判断是否须要扩容
			if (size>data.length) {
				data=Arrays.copyOf(data, data.length*2);
			}
			data[size++]=str;
		}
		//查看堆栈顶部的对象,但不从堆栈中移除它
		public String peek() {
//判断栈是否为空
			if (size==0) {
				throw new EmptyStackException();
			}
			return data[size-1]; //获取栈顶元素
		}
		//移除堆栈顶部的对象,并做为此函数的值返回该对象
		public String pop() {
			String str=this.peek();//获取栈顶元素
			size--;                //减小元素个数
			return str;
		}
		//测试堆栈是否为空
		public boolean empty() {
			return size==0;
		}


		//返回对象在堆栈中的位置,以 1 为基数

		public int research(String str) {
			
			//顺着放倒着拿(FILO/LIFO)
for (int i = size-1; i >=0; i--) 
{
				if (str==data[i]||str!=null&&data[i].equals(str)) {
					return size-i;   				}
			}
			return -1;    //返回栈中不存在该元素
		}
		
	}

	
	
}