栈和队列
Posted hup666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈和队列相关的知识,希望对你有一定的参考价值。
栈
相关概念
- 栈是一种特殊的线性表
- 只允许在固定的一端进行插入和删除元素操作。
- 进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。
- 原则:后进先出LIFO(Last In First Out)
- 压栈:栈的插入操作,入数据在栈顶
- 出栈:栈的删除操作,出数据也在栈顶
我们来实现自己的栈,首先用数组来实现
package com.differ.jackyun.examples.javabasisc.datastructure; import org.junit.Test; import java.util.Arrays; /** * 实现自己的栈 * * @author hup * @data 2020-06-14 8:54 **/ public class MyStackWithArr<E> { /** * 数组 */ public Object[] arrStack; /** * 数组内元素数量 */ public int count; public MyStackWithArr() { arrStack = new Object[10]; } /** * 入栈 * * @param item */ public void push(E item) { //判断空间大小情况和扩容 this.relize(count + 1); //元素放入数组 arrStack[count] = item; count++; } /** * 判数组长度是否够用,自动扩容 * * @param maxCount 需要存储的总量 */ private void relize(int maxCount) { if (maxCount <= this.count) { return; } //扩容 10 arrStack = Arrays.copyOf(arrStack, 10); } /** * 出栈 * * @return */ public E pop() { E item = (E) arrStack[count - 1]; arrStack[count - 1] = null; count--; return item; } /** * 取栈顶数据 * * @return */ public E peek() { E item = (E) arrStack[count - 1]; return item; } }
然后我们测试下好不好用
@Test public void test() { MyStackWithArr mystack = new MyStackWithArr(); //入栈3个元素 mystack.push(new Node(1)); mystack.push(new Node(2)); mystack.push(new Node(3)); //出栈3个元素 System.out.println(mystack.pop()); System.out.println(mystack.pop()); System.out.println(mystack.pop()); }
输出结果:
Node{next=null, data=3} Node{next=null, data=2} Node{next=null, data=1}
可以看到,是后入先出的输出,栈生效了
用单向链表实现自己的栈
以上是关于栈和队列的主要内容,如果未能解决你的问题,请参考以下文章