Stack学习笔记

mac2025-10-25  4

Stack 简介

Stack 是一种后进先出的数据结构实现,也就是LIFO(last in first out). 举个例子吧,大学食堂的大妈会摊煎饼。摊好了就放到桌子上,后面摊好的会叠加到之前一个上。如果有个人来买,大妈通常会把最上面的煎饼给到到你。当然,一般情况她不会从最底下抽一个出来给你。那样容易把饼子扯烂了,而且从底下拿饼子,就是大妈在演示FIFO(first in firt out)啦。开个玩笑,一般是大家在旁边等着大妈摊饼子。煎饼果子切克闹,有钱没钱来一套。走起。

Stack class

Stack 很单纯,只有一个父类 Vector,它通过五个操作扩展了Vector类,这些操作允许将 Vector 视为 Stack。提供了通常的 推入 push() 和 弹出 pop() 操作,以及一种 查看堆栈顶部项目的方法peek()

public class Stack<E> extends Vector<E> {}

当stack倍创建后,他是不包含任何对象的。Deque接口及其实现提供了一组更完整和一致的LIFO堆栈操作,应优先于此类使用。 Deque stack = new ArrayDeque();

代码不多,就全部贴上来:

public class Stack<E> extends Vector<E> { /** * Creates an empty Stack. */ public Stack() { } /** * Pushes an item onto the top of this stack. This has exactly * the same effect as: * <blockquote><pre> * addElement(item)</pre></blockquote> * * @param item the item to be pushed onto this stack. * @return the <code>item</code> argument. * @see java.util.Vector#addElement */ public E push(E item) { addElement(item); return item; } /** * Removes the object at the top of this stack and returns that * object as the value of this function. * * @return The object at the top of this stack (the last item * of the <tt>Vector</tt> object). * @throws EmptyStackException if this stack is empty. */ public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj; } /** * Looks at the object at the top of this stack without removing it * from the stack. * * @return the object at the top of this stack (the last item * of the <tt>Vector</tt> object). * @throws EmptyStackException if this stack is empty. */ public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1); } /** * Tests if this stack is empty. * * @return <code>true</code> if and only if this stack contains * no items; <code>false</code> otherwise. */ public boolean empty() { return size() == 0; } /** * Returns the 1-based position where an object is on this stack. * If the object <tt>o</tt> occurs as an item in this stack, this * method returns the distance from the top of the stack of the * occurrence nearest the top of the stack; the topmost item on the * stack is considered to be at distance <tt>1</tt>. The <tt>equals</tt> * method is used to compare <tt>o</tt> to the * items in this stack. * * @param o the desired object. * @return the 1-based position from the top of the stack where * the object is located; the return value <code>-1</code> * indicates that the object is not on the stack. */ public synchronized int search(Object o) { int i = lastIndexOf(o); if (i >= 0) { return size() - i; } return -1; } /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = 1224463164541339165L; }

可以看到,Stack 也是做了同步操作的。

最新回复(0)