zoukankan      html  css  js  c++  java
  • 算法之 栈内存共享空间

    package bin;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.management.RuntimeErrorException;
    
    /**
     * @author bin 15/3/10
     * target  共享栈空间
     *
     */
    public class Bin_stack_share {
        private int top1;//栈一的栈顶记录
        private int top2;//栈二的栈顶记录
        private Object obj[];//存储容器
        private int type;
        private int size;//栈长度
        
        
        
        public int getTop1() {
            return top1;
        }
    
    
    
        public void setTop1(int top1) {
            this.top1 = top1;
        }
    
    
    
        public int getTop2() {
            return top2;
        }
    
    
    
        public void setTop2(int top2) {
            this.top2 = top2;
        }
    
    
    
        public Object[] getObj() {
            return obj;
        }
    
    
    
        public void setObj(Object[] obj) {
            this.obj = obj;
        }
    
    
        public int getSize() {
            return size;
        }
    
    
    
        public void setSize(int size) {
            this.size = size;
        }
    
    
        //构造方法 初始化栈长度 
        public Bin_stack_share(int size){
            this.setTop1(-1);
            this.setTop2(size);
            this.setSize(size);
            this.setObj(new Object[size]);
        }
         
            
        //进栈方法
        public void push(Object val,int type){
            if(top1+1 == top2){
                throw new RuntimeException("栈满");
            } 
            //如果type 为1 则入栈一    else 为栈二
            if(type == 1){
                obj[top1+1] = val;
                top1 = ++top1;
            }else{
                obj[top2-1] = val;
                top2 = --top2;
            }
        }
        public Object pop(int type){
            
            if(top1 == -1 && top2 == size){
                throw new RuntimeException("空栈");
            } 
            Object temp = new Object();
            if(type == 1){
                //当TYPE等于1的时候 我们弹出栈1的栈顶
                temp = obj[top1];
                obj[top1] = null;
                top1 = --top1;
            }else{
                temp = obj[top2];
                obj[top2] = null;
                top2 = ++top2;
            }
            return temp;
        }
        
        public static void main(String[] args) {
            
            Bin_stack_share b = new Bin_stack_share(2);
            b.pop(2);
            
            System.out.println(b.top1);
            
        }
        
    }
     

    场景:这样的数据结构使用场景在哪儿呢?

            量是一定的,分两边,一边多+另一边等于总量。

            比如投票: A B 两位选手,一共三十个人投票,只允许投这俩人,所以非A即B。

            如果按常规的,开两个栈,如果最极端的情况,一边没有,一边满栈,就浪费了一倍的内存。

    积累知识,分享知识,学习知识。
  • 相关阅读:
    【转】一句话理解数据库索引
    ionic 2.x 3.x 打包 压缩
    编程命名规范之驼峰命名法、匈牙利命名法
    PowerDesigner的Name和Code不同步设置
    PowerDesigner执行脚本 name/comment/stereotype互转
    【转】PowerDesigner快捷键
    ionic 2.x 3.x input触发调用键盘搜索及事件
    ionic 2.x 3.x项目结构解析
    nginx windown命令
    ionic3.x angular4.x ng4.x 自定义组件component双向绑定之自定义计数器
  • 原文地址:https://www.cnblogs.com/bin-pureLife/p/4326633.html
Copyright © 2011-2022 走看看