「出栈java」出栈序列有多少种公式

博主:adminadmin 2023-01-25 07:54:08 644

本篇文章给大家谈谈出栈java,以及出栈序列有多少种公式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA编程实现堆栈出栈操作!

数组实现的堆栈:ArrayStack.java

public class ArrayStack {

Object[] m_elements;

int m_size;

public ArrayStack(int len) {

m_elements = new Object[len];

m_size = 0;

}

public ArrayStack() {

this(50);

}

// insert onto stack

public void push(Object element) {

m_elements[m_size] = element;

m_size++;

}

// return and remove the top element

public Object pop() {

if (!this.isEmpty()) {

Object obj = m_elements[m_size - 1];

m_elements[m_size - 1] = null;

m_size--;

return obj;

} else {

return null;

}

}

// return the top element

public Object top() {

if (!this.isEmpty()) {

return m_elements[m_size - 1];

} else {

return null;

}

}

// return 1 -- is empty

// return 0 -- is not empty

public boolean isEmpty() {

return this.size() == 0;

}

public int size() {

return m_size;

}

}

使用链表实现(单链表) :

public class Stacklist {

Node m_header;

int m_size;

public ListStack() {

m_header = null;

m_size = 0;

}

public void push(Object value) {

m_header = new Node(value, m_header);

}

public Object pop() {

if (!this.isEmpty()) {

throw new RuntimeException("Stack underflow");

}

Object obj = m_header.element;

m_header = m_header.next;

return obj;

}

// return reference to most recently added elemenet

public Object peek() {

if (!this.isEmpty()) {

throw new RuntimeException("Stack underflow");

}

return m_header.element;

}

public boolean isEmpty() {

return this.size() == 0;

}

//return the number of the queue's elements;

public int size() {

return m_size;

}

}

链表的需要用到一个结点类 Node.java 代码如下

public class Node {

Object element;

Node next;

public Node(Object theElement) {

this(theElement, null);

}

public Node(Object theElement, Node n) {

element = theElement;

next = n;

}

public Object getElement() {

return element;

}

public void setElement(Object element) {

this.element = element;

}

public Node getNext() {

return next;

}

public void setNext(Node next) {

this.next = next;

}

}

JAVA 作业 编写固定长度栈和动态栈,完成入栈和出栈。(注:测试接口。)

//栈接口

/**

 * 2016/10/31 10:19

 *

 * @author 3306 TODO

 */

public interface StackInterfaceT {

    /**

     * 压入元素

     *

     * @param element 元素

     */

    void push(T element);

    /**

     * 弹出栈顶元素

     *

     * @return T

     */

    T pop();

}

//固定长度栈

/**

 * 2016/10/31 10:03

 *

 * @param T 压入元素类型

 * @author 3306 TODO 固定长度栈

 */

public class FixedStackT implements StackInterfaceT{

    private Object[] objects = new Object[10];

    private int index = 0;

    /**

     * 往固定长度栈压入元素

     *

     * @param element 元素

     * @throws IndexOutOfBoundsException 压缩元素大于栈的容量的时候

     */

    public void push(T element) {

        if (index  objects.length) {

            throw new IndexOutOfBoundsException();

        }

        objects[index++] = element;

    }

    /**

     * 弹出栈顶元素

     *

     * @return T

     */

    public T pop() {

        if (index  0) {

            throw new IndexOutOfBoundsException();

        }

        return (T) objects[--index];

    }

}

//动态栈

import java.util.ArrayList;

import java.util.List;

/**

 * 2016/10/31 10:23

 *

 * @author 3306 TODO

 */

public class FreeStackT implements StackInterfaceT {

    private ListT storage = new ArrayList();

    private int index = 0;

    @Override

    public void push(T element) {

        if (null == element) {

            throw new IllegalArgumentException();

        }

        storage.add(element);

        index++;

    }

    @Override

    public T pop() {

        if (index  0) {

            throw new IndexOutOfBoundsException();

        }

        return storage.get(--index);

    }

}

//student类

/**

 * 2016/10/31 10:11

 *

 * @author 3306 TODO

 */

public class Student {

    private int studentNo;

    private String studentName;

    public int getStudentNo() {

        return studentNo;

    }

    public void setStudentNo(int studentNo) {

        this.studentNo = studentNo;

    }

    public String getStudentName() {

        return studentName;

    }

    public void setStudentName(String studentName) {

        this.studentName = studentName;

    }

    @Override

    public String toString() {

        return "Student{" +

                "studentNo=" + studentNo +

                ", studentName='" + studentName + '\'' +

                '}';

    }

}

//测试类

/**

 * 2016/10/31 10:12

 *

 * @author 3306 TODO

 */

public class TestStack {

    public static void main(String[] args) {

        testStableStack();

        testFreeStack();

    }

    private static void testStableStack() {

        System.out.println("\n\n----------- fixed ------------");

        StackInterfaceStudent myStack = new FixedStack();

        int numOfStudent = 3;

        for (int index = 0; index  numOfStudent; index++) {

            Student stu = new Student();

            stu.setStudentNo(index);

            stu.setStudentName("stu" + index);

            myStack.push(stu);

        }

        for (int index = 0; index  numOfStudent; index++) {

            System.out.println(myStack.pop());

        }

    }

    private static void testFreeStack() {

        System.out.println("\n\n----------- free ------------");

        StackInterfaceStudent freeStack = new FreeStack();

        int numOfStudent = 5;

        for (int index = 0; index  numOfStudent; index++) {

            Student stu = new Student();

            stu.setStudentNo(index);

            stu.setStudentName("stu" + index);

            freeStack.push(stu);

        }

        for (int index = 0; index  numOfStudent; index++) {

            System.out.println(freeStack.pop());

        }

    }

}

JAVA 方法的入栈出栈问题

你得明白栈的定义。代码执行的时候是执行一个方法,执行完,返回方法的上一个代码块继续往下执行后面的内容。这样的话是不是就是一个栈结构了?先进后出。方法一边执行,一边往栈里面存数据,等执行完了就取出数据(取出的是返回值,是最后一个存进去的 栈结构是后进先出),然后执行外面的代码。这么说你可能不明白,我给你举个例子。

int sub(int a,int b){

return a+b;

}

int c = sub(2,3);//注意执行这条语句的时候是不是执行了一个方法?

//那么语句执行的时候是要从左往右执行的对吧,但是事实的逻辑却是先算出来sub(2,3)这个方

//法的返回值,然后再把返回值(5)赋值给 c ,那么这个怎么实现,肯定是一个栈的数据结构,编译的时候先把”int c = “入栈,然后再把 sub(2,3),入栈,执行的时候,从栈里面取,取的第一个肯定是sub(2,3)吧?于是就计算出等于5,继续取,取出了int c =,然后就和5对接上了,就把值赋给c了。这只是一个小例子。

道理是这样,但是具体的存取可不是这样的哦。具体的存取应该分的非常细腻,应该是按照java语法的最小单位来往栈里存取的。说白了一句话,程序运行的时候的先后顺序是跟人大脑想问题的顺序一样的,但是代码不是按照这样的顺序写的(从左到右),于是就用栈结构来达到这样的效果。

这么说,明白了吗?

Java 堆栈Stack使用

java中stack的使用方法,堆栈是一种"后进先出"(LIFO) 的数据结构, 只能在一端进行插入(称为"压栈") 或删除 (称为"出栈")数据的操作,下面看示例:

JAVA 中,使用 java.util.Stack 类的构造方法创建对象。

public class Stack extends vector

构造方法 : public Stack() 创建一个空 Stack。

方法:

1. public push (item ) 把项 压入栈顶。其作用与 addElement (item ) 相同。

参数 item 压入栈顶的项 。 返回: item 参数 ;

2. public pop () 移除栈顶对象,并作为函数的值 返回该对象。

返回:栈顶对象(Vector 对象的中的最后一项)。

抛出异常 : EmptyStackException 如果堆栈式空的 。。。

3. public peek() 查看栈顶对象而不移除它。。

返回:栈顶对象(Vector 对象的中的最后一项)。

抛出异常 : EmptyStackException 如果堆栈式空的 。。。

4. public boolean empty (测试堆栈是否为空。) 当且仅当堆栈中不含任何项时 返回 true,否则 返回 false.

5. public int search (object o) 返回对象在堆栈中位置, 以 1 为基数, 如果对象 o是栈中的一项,该方法返回距离 栈顶最近的出现位置到栈顶的距离; 栈中最上端项的距离为 1 。

关于出栈java和出栈序列有多少种公式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。