java实现入栈push和出栈pop

什么叫栈:凡是满足数据先进后出的一种数据结构都叫做栈。

特点:先进后出,后进先出。

        数据一般存储在两种数据结构中:1.数组、2.链表

实现入栈出栈可以用链表也可以用数组,数组是最简单的一种方法,我们用数组来实现:

        栈的就像杯子一样,模型如下图:

java实现入栈push和出栈pop_第1张图片

 那么我们往栈中放数据时入栈(push)就可以跟数组添加数据一样,假如我们放入数组顺序依次为3,5,7,9,那它在栈中的表现形式如下图,先进入的在栈底,最后进入的在栈顶,当然我们定义的数组会有长度限制,在到达栈顶时我们需要考虑给他扩容

java实现入栈push和出栈pop_第2张图片

 那出栈时我们需要从栈顶开始输出值的大小,再出栈时就要输出栈顶的下一个值,即9出栈后下一个出栈的就是7,如下图:

java实现入栈push和出栈pop_第3张图片

 那我们是需要定义一个指针index,当入栈时我们让index在数组里index++,出栈时,index指向的是栈顶元素上方,所以我们要先输出栈顶元素就要使index-1,再让index--;让下一个元素成为栈顶,如下图:

java实现入栈push和出栈pop_第4张图片java实现入栈push和出栈pop_第5张图片

 java实现入栈push和出栈pop_第6张图片java实现入栈push和出栈pop_第7张图片

代码如下:

定义一个栈stack类:

public class Stack {
    //定义私有数组只能本类方法可以访问
	private int[] arr=new int[10];
     //定义指针index,来指向栈顶元素上方
	private int index;
    //入栈方法,通过传参来添加元素
	public void push(int val) {
        //考虑扩容,如果数组长度不够就先进行扩充
		if(index==arr.length) {
			int[] brr=new int[arr.length*2];
			for(int i=0;i

通过测试类来测试结果:

public class Test {
	public static void main(String[] args) {
		Stack stack=new Stack();
		stack.push(1);
		stack.push(2);
		stack.push(3);
		stack.push(4);
		stack.push(5);
		stack.push(6);
		stack.push(7);
		stack.push(8);
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
        }
}

结果如下图:

java实现入栈push和出栈pop_第8张图片

 

你可能感兴趣的:(java,数据结构,算法)