数据结构之堆栈stack

堆栈stack是一种后进先出的通过扩展Vector类而来的数据结构,即先放入的元素在逻辑上处于栈底,而后放入的元素位于栈顶。

常用方法为:push、pop、peek、empty、search等,下面分别列举这些方法:

Stack stack=new Stack();
		
		String ss1="sun";
		String ss2="moon";
		String ss3="star";
		stack.push(ss1);   //把元素压入堆栈
		stack.push(ss2);
		stack.push(ss3);
		System.out.println(stack);  //程序输出:[sun, moon, star]

		stack.pop();	//出栈
		System.out.println(stack);  //程序输出:[sun, moon]
		
		//方法返回栈顶元素,但不做出栈操作
		System.out.println(stack.peek());  //程序输出:moon 

		//方法用来判别堆栈是否为空,
		System.out.println(stack.empty());  //程序输出:false

		//方法返回查找对象的位置。从1开始
		System.out.println(stack.search(ss1)); //程序输出:2 

从jdk1.6的源码来看,stack是继承Vector类的:

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).
     * @exception  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).
     * @exception  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;


细节方面:

1.pop与peek两种方法都返回的是栈顶元素,区别为pop做出栈动作,peek不做。
2.search返回的是与参数equal的与栈顶最近距离的元素与栈顶的距离。

参考: https://blog.csdn.net/a19881029/article/details/9408649

猜你喜欢

转载自blog.csdn.net/weixin_43777983/article/details/89279317