程序员内功— —数据结构与算法之栈--增删改查

前言:

        堆栈堆栈,什么是栈?栈是为执行线程留出的内存空间,当函数被调用时,栈顶为局部变量和一些bookkeeping数据预留块。当函数执行完毕的时候,这个块就没用了。可能在下次函数调用的时候再被使用。栈通常是先进后出,即最先进去的最后出去,如何理解。玩过小时候的玩具枪吗?装黄黄的子弹的那个,是不是要压一颗进去,最先压进去的在最底下。然后开枪发射的时候是最后进的那颗发射出去的。这就是和我们的栈相似——先进后出。


原理解析:

    图解:      有三个后来的程序员要填前人的坑!

        

                这时程序员1 , 2不畏艰难跳进了这个坑里去打补丁:

                                        

                    1号程序员进去后,无法自拔。这时2号进去了,压着1号,1号想走也走不了了。

                                                    

                    3号程序员也进来了,发现这是个巨坑,果断跑路,幸好陷入的不深,所有跑出去了。。接着2号跑路,1号也删库跑路!

                                                                

            这就是先进后出,随便玩玩哈,黑黑自己~~~~


看完上面的搞笑图,谦虚点,咱们撸代码:

package com.ern.demo;

public class MyStack {
	Object stackArray[];
	int maxSize;
	int top;
	/**
	 * 初始化时,初始化数组长度以及栈顶
	 * @param maxSize
	 */
	public MyStack(int maxSize) {
		this.maxSize = maxSize;
		stackArray = new Object[maxSize];
		top = -1;
	}

	/**
	 *	往栈里丢数据
	 * @param data
	 */
	public void push(Object data) {
		stackArray[++top] = data;
	}

	/**
	 * 弹出数据并查看
	 * @param data
	 */
	public Object pop() {
		return stackArray[top--];

	}

	/**
	 * 查看栈是否为空
	 * 
	 * @return
	 */
	public boolean isEmpty() {
		return top == -1;

	}

	/**
	 * 查看栈是不是满了
	 * 
	 * @return
	 */

	public boolean isFull() {
		return top == (maxSize - 1);

	}
	
	/**
	 * 查看栈顶数据
	 */
	public Object peek() {
		return stackArray[top];
		
	}
	
	public static void main(String[] args) {
		String a ="abcdefghijklmm123";
		MyStack myStack= new MyStack(a.length());
		for (int i = 0; i < a.length(); i++) {
			if (!myStack.isFull()) {
				myStack.push(a.charAt(i));
			}
		}
		while (!myStack.isEmpty()) {
			System.out.print(myStack.pop()+" ");			
		}
	
	}

}

总结:

        感觉栈来说,好像真的没太大的难度,很好理解,但是真正用在项目里却真的比较难了。但是,不管什么框架,项目,都离不开栈,如果要深入了解栈,我们可以去了解jvm虚拟机。了解java的内存模型,相信会给我们很大的好处!谢谢大家~祝大家学习进步,步步高升。


程序人生,与君共勉!


猜你喜欢

转载自blog.csdn.net/weixin_41622183/article/details/80512771
今日推荐