飞行笔记- 可拿到MAX与Min值的栈,以及用两个栈实现的队列

1.本地文件上传git

为了方便管理项目,在git上创建了我的项目路径,在开始需要配置git ,以及与我本地的eclipse集成,为了方便开发,

因为从未用过git ,找了几篇文章来配置github

将下载git 以及将本地项目传入github配置如下链接 ,十分完整,

https://www.cnblogs.com/cxk1995/p/5800196.html

提交失败

https://blog.csdn.net/jingtingfengguo/article/details/51892864

以及:欢迎阅读我的github   https://github.com/will959/flightdiary

如果你是第一次提交的话 。可能会出现以下问题 :

*** Please tell me who you are.


Run


  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"


to set your account's default identity.
Omit --global to set the identity only in this repository.

解决方法很简单,只需在当前输入下面两句命令,把引号里的改成自己的邮箱和账号就OK了

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

 

2.飞行笔记之可拿到MAX与Min值的栈,以及用两个栈实现的队列

本博客的题型来自 左程云大神所著的 算法与数据结构的最优解

1 .实现可以拿到Max以及min值的栈:

完整代码可以参照我的github

栈的特点就是先入后出,因此,当我们想拿到最大/最小值,则需要再压入栈的时候做写手脚

如果想同时实现拿到最小值,最大值的栈,那么则需要用到三个栈,

stackData存储原始数据,stackMin存储最小值,stackMax存储最大值

/**
     * 压入数据  当压入的数据比min小的时候压入stackMin 当压入的数据比max大的时候压入stackMax
     * @param num
     */
    public void push(int num){
        if(this.stackMin.isEmpty()){
            this.stackMin.push(num);    
        }
        if(this.stackMax.isEmpty()){
            this.stackMax.push(num);
        }
        if(num <= this.getMin()){
            this.stackMin.push(num);
        }
        if(num >=this.getMax()){
            this.stackMax.push(num);
        }
        this.stackData.push(num);
    }

如上逻辑,这样stackMin.peek() 的时候则就是最小,同理Max在stackMax.peek() 也能取得

 

2.两个栈实现的队列

原理上 队列是FIFO ,而栈是LIFO , 换句话来说,如果一个队列是 1 2 3 4 5 按顺序入队 , 则 5 4 3 2 1 按顺序入栈的 栈pop的时候  顺序便是队列的顺序。

那么根据思路。如果有两个栈 ,即可达到我们要的效果,一个栈用来记录原始数据 记做stackPush,然后pop进另一个栈记做stackPop,再由stackPop进行最后的输出Pop即可达到效果。

这里有比较注意的逻辑点,

1:当刚开始压入stackPop时,stackPop必须为空。

2:当stackPush要往stackPop放数据就必须要把stackPush里的值,一次性全部压入。

/**
     *  添加一个元素
     */
    public void add(int num){
        this.stackPush.push(num);
    }
    /**
     *  移除并返问队列头部的元素    如果队列为空,则返回null
     * @return
     */
    public int poll(){
        if(this.stackPop.isEmpty()&&stackPush.isEmpty()){
            throw new RuntimeException("你的栈为空");
        }
        if(this.stackPop.isEmpty()){
            while(!this.stackPush.isEmpty()){
                this.stackPop.push(stackPush.pop());
            }
        }
        return this.stackPop.pop();
    }

如上: 当pop()一次的时候,再次往stackPush栈里压入一个数据的时候,并不会马上压入stackpop栈,而是当staclpop栈pop()为空的时候才会重新的将stackpushi的值压入,这样就算是多次add poll peek 都不会有问题

转载于:https://www.cnblogs.com/will959/p/10467959.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值