zoukankan      html  css  js  c++  java
  • java数据机构之自定义栈

    一、栈的特点

      1、线性数据结构

      2、后进先出

    二、使用数组来实现栈

    //使用数组来实现栈
    public class MyArrayStack<E> {
        
        //保存数据
        private Object[] items;
        
        //栈的 容量
        private int capacity;
        
        //栈的数据个数
        private int size;
    
        public MyArrayStack(int capacity){
            this.capacity = capacity;
            this.items = new Object[capacity];
        }
        
        //入栈
        public boolean push(E item){
            //栈已经满了
            if(size == capacity){
                return false;
            }
            items[size++] = item; 
            return true;
        }
        
        //出栈
        @SuppressWarnings("unchecked")
        public E pop() {
            if(size == 0){
                return null;
            }
            E e = (E)items[size-1];
            items[--size] = null;
            return e;
        }
        
    
    }

    三、使用链表来实现栈、

    //使用链表创建栈
    public class MyLinkedStack<E> {
    
        //节点存储元素信息
        private static class Node<E>{
            
            E item;
            
            Node<E> next;//下一个节点
            
            Node(E item, Node<E> next){
                this.item = item;
                this.next = next;
            }
        }
    
        
        //栈的 容量
        private int capacity;
        
        //栈的数据个数
        private int size;
        
        //头节点
        private Node<E> head;
        
        public MyLinkedStack(int capacity){
            this.capacity = capacity;
        }
        
        //入栈
        public boolean push(E item){
            //栈已经满了
            if(size == capacity){
                return false;
            }
            //创建新节点,head指向新的节点
            Node<E> node = new Node<>(item,head);
            head = node;
            size++;
            return true;
        }
        
        //出栈
        public E pop() {
            if(size == 0){
                return null;
            }
            E e = head.item;
            head.item = null;//方便GC
            head = head.next;
            size--;
            return e;
        }
    
        
    }
  • 相关阅读:
    C++ new 解析重载 .
    __cdecl,__fastcall, __stdcall 什么区别? .
    C++构造函数调用顺序
    用gdb调试core dump文件
    placement new(转)
    [精华] 跟我一起写 Makefile
    使用 GDB 调试多进程程序
    第37条:避免对函数中继承得来的默认参数值进行重定义
    程序只运行一个是实例 .
    南通SEO:单页的SEO元素
  • 原文地址:https://www.cnblogs.com/kyleinjava/p/10874566.html
Copyright © 2011-2022 走看看