算法:栈和队列的设计

news2024/11/17 23:41:04

一 用两个栈实现队列

1.1 题目描述

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
示例 2:

输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
 

1.2 思路以及代码

题目的意思

 输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]

1.执行CQueue的操作,生成队列,没有值传递,也不返回任何信息

2.进队列的操作:将3放入队列,没有返回值

3.删除对头元素:在这里队头元素为3,删除队头元素,并返回删除的元素值,所以返回3

4.删除对头元素:队列中不存在元素,删除失败,返回-1

5.删除对头元素:队列中不存在元素,删除失败,返回-1

思路:

进队列的操作:

直接在栈1中添加就行,例如队尾先后添加1,2,3,注意栈是上面是top(先进后出)

3
2
1

删除队头元素的时候的操作为,首先我们要将 上面的栈中的数据转移到栈2中。

1
2
3

删除栈顶的元素,我们就删除1

2
3

就通过双栈实现了队列。(添加直接在一个栈中完成,删除队头元素,需要将元素从栈1转移到栈2,删除栈2,栈顶的元素,完成删除队头的操作)

代码如下:

其中StackPractice类的代码:

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SuanfapRractice
{
    public class StackPractice
    {
        Stack<int> inStack;
        Stack<int> outStack;

        public StackPractice()
        {
            inStack=new Stack<int>();
            outStack=new Stack<int>();
        }

        public void AppendTail(int value)
        {
            inStack.Push(value);
        }

        public int DeleteHead()
        {
            if(outStack.Count == 0)
            {
                if(inStack.Count==0)
                {
                    return -1;
                }
                while(inStack.Count> 0)
                {
                    outStack.Push(inStack.Pop());
                }

            }
            
            return outStack.Pop();

        }
    }
}

开始类,主函数

using System.Collections;
using System.Collections.Generic;
using System.Numerics;
using System.Reflection.Metadata.Ecma335;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System;
using System.Collections.Generic;
using System.Xml.Linq;
using SuanfapRractice;

public class Solution
{
    public static void Main(String[] args)
    {
        StackPractice sp = new StackPractice();
        Console.WriteLine(sp.DeleteHead());
        sp.AppendTail(5);
        sp.AppendTail(2);
        Console.WriteLine(sp.DeleteHead());
        Console.WriteLine(sp.DeleteHead());
      

    }
}

结果为:

-1
5
2

1.3 c#相关知识点

1.Stack常用的方法

序号方法名 & 描述
1public virtual void Clear();
从 Stack 中移除所有的元素。
2public virtual bool Contains( object obj );
判断某个元素是否在 Stack 中。
3public virtual object Peek();
返回在 Stack 的顶部的对象,但不移除它。
4public virtual object Pop();
移除并返回在 Stack 的顶部的对象。
5public virtual void Push( object obj );
向 Stack 的顶部添加一个对象。
6public virtual object[] ToArray();
复制 Stack 到一个新的数组中。

 2.C#访问修饰符

 

 

 上文代码修改修饰符后也是可以执行的

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SuanfapRractice
{
    internal class StackPractice
    {
        Stack<int> inStack;
        Stack<int> outStack;

        public StackPractice()
        {
            inStack=new Stack<int>();
            outStack=new Stack<int>();
        }

        internal void AppendTail(int value)
        {
            inStack.Push(value);
        }

        internal int DeleteHead()
        {
            if(outStack.Count == 0)
            {
                if(inStack.Count==0)
                {
                    return -1;
                }
                while(inStack.Count> 0)
                {
                    outStack.Push(inStack.Pop());
                }

            }
            
            return outStack.Pop();

        }
    }
}

二 包含min函数的栈

2.1 题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.min();   --> 返回 -2.

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/bao-han-minhan-shu-de-zhan-lcof
 

1.2 思路以及代码

 

 

 此思路具体可以查看官方 解题的讲解

代码

MinStack类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SuanfapRractice
{
    
    public class MinStack
    {
        Stack<int> inStack;
        Stack<int> minStack;
        public MinStack()
        {
            inStack = new Stack<int>();
            minStack = new Stack<int>();
        }

        public void Push(int x)
        {
            inStack.Push(x);
            if(minStack.Count == 0||minStack.Peek() > x )
            {
                minStack.Push(x);
            }
            else
            {
                minStack.Push(minStack.Peek());
            }
        }

        public void Pop()
        {
            inStack.Pop();
            minStack.Pop();
        }

        public int Top()
        {
            return inStack.Peek();
        }

        public int Min()
        {
            return minStack.Peek();
        }
    }
}

包含Main方法的类

using System.Collections;
using System.Collections.Generic;
using System.Numerics;
using System.Reflection.Metadata.Ecma335;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System;
using System.Collections.Generic;
using System.Xml.Linq;
using SuanfapRractice;

public class Solution
{
    public static void Main(String[] args)
    {
        MinStack minStack = new MinStack();
        minStack.Push(-2);
        minStack.Push(0);
        minStack.Push(-3);
        Console.WriteLine(minStack.Min());
        minStack.Pop();
        Console.WriteLine(minStack.Top());
        Console.WriteLine(minStack.Min());


        Console.WriteLine("----------------");
        MinStack minStack1 = new MinStack();
        minStack1.Push(2);
        minStack1.Push(0);
        minStack1.Push(3);
        minStack1.Push(0);
        Console.WriteLine(minStack1.Min());
        minStack1.Pop();
        Console.WriteLine(minStack1.Min());
        minStack1.Pop();
        Console.WriteLine(minStack1.Min());
        minStack1.Pop();
        Console.WriteLine(minStack1.Min());
      

    }
}

结果为:

-3
0
-2
----------------
0
0
0
2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1 数据可视化简介

1.1 可视化释义 人眼是一个高带宽的巨量视觉信号输入并行处理器&#xff0c;最高带宽为每秒100MB&#xff0c;具有很强的模式识别能力&#xff0c;对可视符号的感知速度比对数字或文本快多个数量级&#xff0c;且大量的视觉信息的处理发生在潜意识阶段。其中的一个例子是视觉突…

SpringCloud2.0

一、网站架构演变过程 从传统架构(单体应用) 到 分布式架构(以项目进行拆分) 到 SOA架构(面向服务架构) 到 微服务架构 传统架构&#xff1a; 其实就是SSH或者SSM&#xff0c;属于单点应用&#xff0c;把整个业务模块都会在一个项目中进行开发&#xff0c;分为MVC架构&#…

pip install下载报网络错误、pip报错,以及module ‘serial‘ has no attribute ‘Serial‘报错

pip install下载报网络错误 下载pip install serial时报错如图&#xff1a;这是由于下载的pip官网是国外网站&#xff0c;下载速度会比较慢。 解决办法&#xff1a;从国内镜像去下载 ​ pip install serial -i https://pypi.tuna.tsinghua.edu.cn/simple或&#xff1a;sudo p…

虚拟化与云计算的区别

虚拟化和云计算之间的区别对于业务来说是至关重要和必要的。对于许多公司和专业人士来说&#xff0c;两者都是一样的。虽然云计算使用了虚拟化&#xff0c;但是虚拟化和云计算不是一回事。他们处理各种规模的 IT 挑战&#xff0c;并在对业务产生不同程度影响的不同范围内运作。…

工作很迷茫,是继续留在大城市打拼,还是回老家躺平呢?

你有没有面对这样的选择&#xff1a;是回到老家过一眼望到头的舒服简单的日子&#xff0c;还是趁年轻留在大城市拼一把&#xff0c;突破自己的舒适圈&#xff0c;挑战更多的可能性。你做了怎样的选择&#xff1f;你后悔吗&#xff1f; 什么样的人适合去大城市呢&#xff1f; 1、…

人脸表情识别 实战项目

一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2022.12.12 Last edited: 2022.12.12 目录 ​编辑 人脸表情识别 实战项目 简介 环境部署 数据准备 项目说明 传统方法 深度方法 网络设…

LeetCode 剑指 Offer 二叉树的最近公共祖先 | 解题思路分享

剑指 Offer 618 - II. 二叉树的最近公共祖先 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且…

基于Android的车位共享系统的设计

一、课题任务与目的 1. 课题背景 随着车辆越来越多&#xff0c;车位紧缺成为当前生活中最严重并且着急去解决的问题之一。本项目制作一款基于Android的车位共享系统用于缓解车位紧缺造成的压力。本次所开发的停车App是基于北京当前的交通状况为出发点的&#xff0c;让用…

Unity人工智能初学者指南

Unity人工智能初学者指南 使用 C# 在 Unity 游戏引擎中为游戏编写非玩家角色的实用指南 课程英文名&#xff1a;The Beginners Guide to Artificial Intelligence Unity 2022 此视频教程共13.5小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码附件全…

Qt实现全局键盘事件监听器-Windows

Qt实现全局键盘事件监听器-Windows版&#x1f347; 文章目录Qt实现全局键盘事件监听器-Windows版&#x1f347;1、概述&#x1f348;2、实现效果&#x1f349;3、实现方式&#x1f34a;4、关键代码&#x1f34b;5、源代码&#x1f34c;更多精彩内容&#x1f449;个人内容分类汇…

分布式文件存储-FastDFS环境搭建

FastDFS简介 FastDFS是什么&#xff1f;我们这里可以看一下度娘的解释。FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文件访问&#xff08;文件上传、文件下载&#xff09;等&#xff0c;解决了…

grid布局 笔记

这次给大家带来的是grid布局&#xff0c;之前听说过但没接触过&#xff0c;一起来学一下吧&#xff0c;提升一下css认知。 1、开启方式 给父级盒子开启grid布局 display: grid2、gap 间隙 所有盒子的行列间隙为10px gap: 10px行/列 colomn-gap: 20px;row-gap: 15px注意&#…

java计算机毕业设计ssm迎新系统pv83c(附源码、数据库)

java计算机毕业设计ssm迎新系统pv83c&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

[MySQL]-压力测试之性能监测指标

[MySQL]-压力测试之性能监测指标 森格 | 2022年12月 本文主要是介绍在数据库的压测过程中&#xff0c;要时刻的一些指标&#xff0c;尤其是当数据库的性能达到瓶颈时&#xff0c;要注意哪个指标已经打满。 一、前文回顾 在前面量两篇文章中&#xff0c;分别介绍了两款压测数据…

数据标注过程中会遇到哪些难题 | 景联文科技

“近年来&#xff0c;⼈⼯智能发展迅速&#xff0c;影响着我们⽣活中的方方面面。随着⼈⼯智能应⽤场景不断增加&#xff0c;作为⼈⼯智能的上游基础⾏业&#xff0c;数据标注行业也快速发展&#xff0c;但许多不成熟的标注团队组织由于管理水平有限&#xff0c;且没有系统的标…

【C++笔试强训】第五天

文章目录选择题编程题选择题 在上下文和头文件均正常情况下&#xff0c;以下程序的输出结果是&#xff08;&#xff09; int x 1; do{printf("%2d\n",x) }while(x--);A 1 B 无任何输出 C 2 D 陷入死循环 x1&#xff0c;x是后置&#xff0c;先使用&#xff0c;在加…

Python之路200个小例子网页版,真诚奉献,从一而终!

前言 历史两个月&#xff0c;利用所有业余时间&#xff0c;与朋友一起搜集、创作Python小例子&#xff0c;截止目前已超过200个例子&#xff1a; Python之路 1 简洁之美 2 Python绘图 3 Python动画 4 Python数据分析 5 Python机器学习 6 Python-GUI 一、Python基础 1…

Acrel-EIOT免调试抄表系统

安科瑞 华楠 一、远程抄表系统应用场景-互联网用户&#xff08;能源参与者&#xff09; 二、远程抄表系统互联网用户的痛点 2.1 数据系统价格偏高 一套系统需要前期勘察、画图、出方案、报价&#xff0c;建设投入服务器、网络布线、交换机&#xff0c;网关、人工施工及调试&…

Vue中使用vxe-table组件分页查询,多页选择数据回显,分页记录保存选中的数据

官方示例&#xff1a;vxe-table v3https://vxetable.cn/v3/#/table/advanced/page 当表格中需要渲染的数据量比较大&#xff0c;有几万几十万条数据时&#xff0c;在前端分页将会非常慢&#xff0c;建议将当前页码和每页数量传递个后端&#xff0c;后端分好后给前端渲染。 后端…

电脑重装小白系统没内存怎该如何解决

很多网友想要重装系统&#xff0c;但是在用小白系统安装的时候提示没内存怎么办呢?我们可以卸载自己的电脑软件&#xff0c;或者是扩充一下自己电脑内存。不知道如何处理相关问题的小伙伴可以直接看看下面小编分享的文章小白系统没内存怎么办。 工具/原料&#xff1a; 系统版…