java数据结构基础,望在2h内解答,要代码!!

建立栈的Java接口IStack,并用顺序栈类SqStack实现这个接口。要求
(1)编写所有栈的基本方法,包括(初始化、盘空、求长度、入栈、弹栈、取栈顶元素)
(2)调用初始化方法建立一个栈MyStack。
(3)调用入栈方法,依次使a,b,c,d,e入栈;
(4)输出顺序栈MyStack的长度;
(5)输出顺序栈MyStack中的所有元素;
(6)判断栈MyStack是否为空。
(7)释放顺序栈MyStack。

接口

package 栈;
interface IStack {
    public void clear();

    public boolean isEmpty();

    public int length(); // 返回数据元素个数

    public Object peek(); // 取栈顶元素并返回其值

    public void push(Object x) throws Exception; // 将数据元素压入栈顶

    public Object pop(); // 删除并返回栈顶元素
}

顺序栈与测试

package 栈;



class Node {
    public Object data;// 存放节点值
    public Node next;// 后继节点的引用

    // 无参数时的构造函数
    public Node() {
        this(null, null);
    }

    // 带一个参数时的构造函数
    public Node(Object data) {
        this(data, null);
    }

    // 带两个参数的构造函数
    public Node(Object data, Node next) {
        this.data = data;
        this.next = next;
    }
}

//顺序栈
class SqStack implements IStack {
    private Object[] stackElem;// 对象数组
    private int top;// 在非空栈中,top始终指向栈顶元素的下一个存储位置,当栈为空时,top值为0

    // 构造函数
    public SqStack(int maxSize) {
        top = 0;
        stackElem = new Object[maxSize];// 为栈分配maxSize个存储单元
    }

    // 栈置空
    @Override
    public void clear() {
        top = 0;
    }

    // 判断栈是否为空
    @Override
    public boolean isEmpty() {
        return top == 0;
    }

    // 求栈中数据元素个数
    @Override
    public int length() {
        return top;
    }

    // 取栈顶元素
    @Override
    public Object peek() {
        if (!isEmpty()) {
            return stackElem[top - 1];
        } else {
            return null;
        }
    }

    // 入栈
    @Override
    public void push(Object x) throws Exception {
        if (top == stackElem.length)// 栈满
            throw new Exception("栈已满");
        else
            stackElem[top++] = x;// 先将X赋值给stackElem[top],再将top加一
    }

    // 出栈
    @Override
    public Object pop() {
        if (isEmpty())
            return null;
        else
            return stackElem[--top];// 先将top减一,再返回stackElem[top]的值
    }

    // 输出栈中所有元素(从栈顶到栈底元素)
    public void display() {
        for (int i = top - 1; i >= 0; i--) {
            System.out.print(stackElem[i].toString() + " ");// 输出
        }
    }
}
 public class MyStack{
    
    public static void main(String[] args) throws Exception {
        
        SqStack MyStack = new SqStack(20);
        MyStack.push('a');
        MyStack.push('b');
        MyStack.push('c');
        MyStack.push('d');
        MyStack.push('e');
        System.out.println("长度: "+MyStack.length());
        while(! MyStack.isEmpty())
        System.out.println(MyStack.pop());
        System.out.println("MyStack是否为空? \n"+(MyStack.isEmpty()?"是":"不是"));
        System.out.println("清空栈中...");
        MyStack.clear();
        System.out.println("栈清空了!");

        
    }
    
    
    
}


运行截图

img

链表结构的顺序栈完整代码如下 :

public class Answer7723579 {

    public static void main(String[] args) {
        SqStack<String> myStack = SqStack.<String>init();
        myStack.push("a");
        myStack.push("b");
        myStack.push("c");
        myStack.push("d");
        myStack.push("e");
        System.out.println("顺序栈MyStack的长度: " + myStack.size());
        System.out.print("顺序栈MyStack中的所有元素: ");
        while (!myStack.isEmpty()) {
            System.out.print(myStack.pop() + " ");
        }
        System.out.println();
        System.out.println("栈MyStack是否为空: " + myStack.isEmpty());
        myStack = null;
        System.out.println("顺序栈MyStack已释放");
    }
}

interface IStack<T> {
    boolean isEmpty();
    int size();
    void push(T data);
    T pop();
    T peek();
}

class SqStack<T> implements IStack<T> {

    DataNode<T> top;
    int count;

    public static <T> SqStack<T> init() {
        SqStack<T> myStack = new SqStack<>();
        return myStack;
    }

    public boolean isEmpty() {
        return count==0;
    }

    public int size() {
        return this.count;
    }

    public void push(T data) {
        DataNode<T> newTop = new DataNode<>(data, top);
        top = newTop;
        ++count;
    }

    public T pop() {
        T data = this.top.data;
        DataNode<T> newTop = this.top.next;
        this.top = newTop;
        --count;
        return data;
    }

    public T peek() {
        if(isEmpty()) {
            return null;
        }
        return this.top.data;
    }

    class DataNode<T> {
        T data;
        DataNode<T> next;

        public DataNode(T data, DataNode<T> next) {
            this.data = data;
            this.next = next;
        }
    }
}

运行结果如下:

顺序栈MyStack的长度: 5
顺序栈MyStack中的所有元素: e d c b a 
栈MyStack是否为空: true
顺序栈MyStack已释放

如有帮助,请采纳,十分感谢!