数据结构(java)

版权声明:版权所有,翻版我也没办法!!! https://blog.csdn.net/tebtebtebteb/article/details/82951002

栈的实现(java):

栈是大家比较熟悉的一种数据结构了,关于它的一些具体内容就不多说了,我们要记住的就是LIFO(后进先出)特性。因为栈是一种表,所以任何实现表的方法都能实现栈,这里我们选择两种方式来实现栈,即数组和链表。

Java代码实现栈

数组实现

package com.tongtong;

import java.util.Arrays;

/**
 * 数组方式实现栈
 */
public class MyStack<E> {

    private Object[] stack; //数组
    private int size; //数组中存储元素的个数
    public MyStack(){
        stack = new Object[10]; //初始长度为10
    }

    //判断堆栈是否为空
    public boolean isEmpty(){
        return size == 0;
    }

    //访问栈顶元素
    public E peek(){
        return (isEmpty()?null : (E)stack[size-1]);
    }

    //弹出元素
    public E pop(){
        E e = peek();
        stack[size-1] = null;
        size--;
        return e;
    }

    //压入元素
    public E push(E item){
        ensureCapacity(size+1); //检查容量
        stack[size++] = item;
        return item;
    }

    //判断数组是否已满,若已满,则扩充数组空间
    private void ensureCapacity(int size){

        int len = stack.length;
        if(size > len){ //数组已满
            int newLen = 10; //每次数组扩充的容量
            stack = Arrays.copyOf(stack,newLen); //扩充数组
        }
    }

    public static void main(String[] args) {
        MyStack<Integer> s = new MyStack<Integer>();
        s.push(1);
        s.push(2);
        s.push(3);

        System.out.println(s.size);
        System.out.println(s.peek());
        System.out.println(s.pop());
        System.out.println(s.size);

    }

}

链表实现

package com.tongtong;

/**
 * 定义单链表
 * @param <E>
 */
class Node<E>{
    Node<E> next = null;
    E data;
    public Node(E data){this.data = data;}
}


public class MyStack2<E> {

    Node<E> top = null;
    public boolean isEmpty(){
        return top == null;
    }

    public void push(E data){

        //创建一个Node
        Node<E> newNode = new Node<E>(data);
        //把新创建的Node放在top前
        newNode.next = top;
        //top指向新创建的Node
        top = newNode;
    }

    public E pop(){
        if(this.isEmpty()){
            return null;
        }
        E data = top.data; //取出top中的数据,用于返回
        top = top.next; //将top节点删除
        return data; //返回栈顶元素
    }

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

    public static void main(String[] args) {

        MyStack2<Integer> s = new MyStack2<Integer>();
        s.push(1);
        s.push(2);
        s.push(3);
        s.push(4);
        s.push(5);

        System.out.println(s.peek());
        System.out.println(s.pop());
        System.out.println(s.peek());
    }

}



猜你喜欢

转载自blog.csdn.net/tebtebtebteb/article/details/82951002