(01) 栈中数据是按照”后进先出(LIFO, Last In First Out)”方式进出栈的。

(02) 向栈中添加/删除数据时,只能从栈顶进行操作。

栈通常包括的三种操作:push、peek、pop。

push — 向栈中添加元素。

peek — 返回栈顶元素。

pop — 返回并删除栈顶元素的操作。

2.出栈

img

出栈前:栈顶元素是30。此时,栈中的元素依次是 30 —> 20 —> 10

出栈后:30出栈之后,栈顶元素变成20。此时,栈中的元素依次是 20 —> 10

入栈前:栈顶元素是20。此时,栈中的元素依次是 20 —> 10

入栈后:40入栈之后,栈顶元素变成40。此时,栈中的元素依次是 40 —> 20 —> 10

4.栈的Java实现

JDK包中也提供了”栈”的实现,它就是集合框架中的Stack类。 本部分使用数组实现栈,能存储任意类型的数据。

二、队列

img

队列中有10,20,30共3个数据。

2.出队列

出队列前:队首是10,队尾是30。

出队列后:出队列(队首)之后。队首是20,队尾是30。

入队列前:队首是20,队尾是30。

4.队列的Java实现

JDK中的Queue接口就是”队列”,它的实现类也都是队列,用的最多的是LinkedList。本部分使用数组实现队列,能存储任意类型的数据。

  1. * Java : 数组实现“队列”,只能存储int数据。
  2. *
  3. * @author skywang
  4. * @date 2013/11/07
  5. */
  6. public class ArrayQueue {
  7. private int mCount;
  8. public ArrayQueue(int sz) {
  9. mArray = new int[sz];
  10. mCount = 0;
  11. }
  12. // 将val添加到队列的末尾
  13. public void add(int val) {
  14. mArray[mCount++] = val;
  15. }
  16. // 返回“队列开头元素”
  17. public int front() {
  18. return mArray[0];
  19. }
  20. public int pop() {
  21. int ret = mArray[0];
  22. mCount--;
  23. mArray[i-1] = mArray[i];
  24. return ret;
  25. }
  26. // 返回“栈”的大小
  27. public int size() {
  28. return mCount;
  29. }
  30. // 返回“栈”是否为空
  31. public boolean isEmpty() {
  32. return size()==0;
  33. }