首页 > 其他分享 >day8

day8

时间:2024-06-03 15:25:41浏览次数:119  
标签:return day8 int self queue func out

今天是day8,
题目一:使用栈实现队列

//先实现一个栈,给定int数组一个别名Mystack
type Mystack []int

//使用引用传递值,将v使用append追加至形参s中
func (s *Mystack) Push(v int){
    *s = append(*s,v)
}


//使用val和切片获取*s的最后一个元素并调整*s为当前位置并将val返回出,从而实现了出栈
func (s *Mystack) Pop() int{
    //
    val := (*s)[len(*s)-1]
    *s = (*s)[:len(*s)-1]
    return val
}


//返回最后一个元素
func (s *Mystack) Peek() int{
    return (*s)[len(*s)-1]
}


func (s *Mystack) Size() int {
    return len(*s)
}

func (s *Mystack) Empty() bool {
    return s.Size() == 0
}
//如上先实现一个栈,声明两个数组一个in一个out
type MyQueue struct {
    StackIn *Mystack
    StackOut *Mystack

}

//使用结构体赋值并初始化两个数组为空
func Constructor() MyQueue {
     return MyQueue{
        StackIn: &Mystack{},
        StackOut: &Mystack{},
     }
}


//直接使用栈的push来推进元素
func (this *MyQueue) Push(x int)  {
     this.StackIn.Push(x)
}


//先填充out数组,再让out数组弹出
func (this *MyQueue) Pop() int {
    this.fillStackOut()
    return this.StackOut.Pop()

}



func (this *MyQueue) Peek() int {
      this.fillStackOut()
      return this.StackOut.Peek()
}


func (this *MyQueue) Empty() bool {
     return this.StackIn.Empty() && this.StackOut.Empty()
}

//该方法用于填充out数组
func (this *MyQueue) fillStackOut() {
    if this.StackOut.Empty() {
        for !this.StackIn.Empty() {
            val := this.StackIn.Pop()
            this.StackOut.Push(val)
        }
    }
}
class MyQueue:

    def __init__(self):
        "两个用来存放操作数值的数组"
        self.stack_in = []
        self.stack_out = []

    "将元素压入队列中"
    def push(self, x: int) -> None:
        self.stack_in.append(x)

                          
    def pop(self) -> int:
        "先判空"
        if self.empty():
            return None
        "这里一个递归"
        if self.stack_out:
            return self.stack_out.pop()
        else:
            "遍历已有的in数组并将out数组值不断压入"
            for i in range(len(self.stack_in)):
                self.stack_out.append(self.stack_in.pop())
            return self.stack_out.pop()

    "返回队列头元素,即用ans来获取pop并将其压入out数组中此时的ans就是第一个"
    def peek(self) -> int:
        ans = self.pop()
        self.stack_out.append(ans)
        return ans

    "判空即in数组和out数组都不存在"
    def empty(self) -> bool:
        return not (self.stack_in or self.stack_out)


题目二:用队列实现栈

from collections import deque
class MyStack:

    def __init__(self):
        "直接声明两个数组为deque即队列"
        self.queue_in = deque()
        self.queue_out = deque()

    
    def push(self, x: int) -> None:
        self.queue_in.append(x)

    "先判空,如果不空,遍历整个in队列并将其左弹出后再压入out队列中"
    def pop(self) -> int:
        if self.empty():
            return None
        for i in range(len(self.queue_in) - 1):
            self.queue_out.append(self.queue_in.popleft())
        "此时交换in out队列值,最终返回out队列的左弹出值"
        self.queue_in,self.queue_out = self.queue_out,self.queue_in
        return self.queue_out.popleft()

    "先判空,再遍历整个in队列,将其值左弹出后压入out队列中"
    def top(self) -> int:
        if self.empty():
            return None
        for i in range(len(self.queue_in)-1):
            self.queue_out.append(self.queue_in.popleft())
        self.queue_in,self.queue_out = self.queue_out,self.queue_in
        "用temp记录out队列的左弹出值并将其压入in队列中,最后返回temp就是要获得的值"
        temp = self.queue_out.popleft()
        self.queue_in.append(temp)
        return temp


    def empty(self) -> bool:
        return len(self.queue_in) == 0
from collections import deque
class MyStack:

    def __init__(self):
        self.que = deque()


    def push(self, x: int) -> None:
        self.que.append(x)


    def pop(self) -> int:
        if self.empty():
            return None
        for i in range(len(self.que) - 1):
            self.que.append(self.que.popleft())
        return self.que.popleft()


    def top(self) -> int:
        if self.empty:
            return None
        for i in range(len(self.que) - 1):
            self.que.append(self.que.popleft())
        temp = self.que.popleft()
        self.que.append(temp)
        return temp


    def empty(self) -> bool:
        return not self.que
type MyStack struct {
     queue1 []int
     queue2 []int
}


func Constructor() MyStack {
     return MyStack{
        queue1:make([]int,0),
        queue2:make([]int,0),
     }
}


//先将所有元素存储在queue2中再调用move来交换元素
func (this *MyStack) Push(x int)  {
     this.queue2 = append(this.queue2,x)
     this.Move()
}

//
func (this *MyStack) Move(){
    if len(this.queue1) == 0{
        //交换,queue1置为queue2,queue2置为空
        this.queue1,this.queue2 = this.queue2,this.queue1
    }else{
        //queue1元素依次从头开始追加至queue2中
        this.queue2 = append(this.queue2,this.queue1[0])
        this.queue1 = this.queue1[1:]//去除第一个元素
        this.Move()//递归
    }
}


func (this *MyStack) Pop() int {
    val:=this.queue1[0]
    this.queue1 = this.queue1[1:]
    return val
}


func (this *MyStack) Top() int {
     return this.queue1[0]
}


func (this *MyStack) Empty() bool {
    return len(this.queue1) == 0
}
type MyStack struct {
     queue []int
}


func Constructor() MyStack {
    return MyStack{
        queue:make([]int,0),
    }
}


func (this *MyStack) Push(x int)  {
    this.queue = append(this.queue,x)
}


func (this *MyStack) Pop() int {
    n:=len(this.queue) -1
    for n!=0{
        //从队列中获取第一个元素(即栈顶元素),将其保存到变量 val 中
        val:=this.queue[0]
        //移除队列中的第一个元素,即将队列的切片重新赋值为从索引 1 开始到末尾的部分,这样就移除了第一个元素。
        this.queue = this.queue[1:]
        //将刚才移除的元素重新追加到队列的末尾。这个操作相当于将元素从队列的头部移动到尾部,实现了栈的出栈操作。
        this.queue = append(this.queue,val)
        //在每次循环结束时,将 n 的值减 1,以便逐步减少队列中的元素数量。
        n--
    }
    //在循环结束后,队列中只剩下最后一个元素,因此我们直接取出这个元素。
    val:=this.queue[0]
    //将队列中的最后一个元素移除。
    this.queue = this.queue[1:]
    return val
}


func (this *MyStack) Top() int {
     val:=this.Pop()
     this.queue = append(this.queue,val)
     return val
}


func (this *MyStack) Empty() bool {
     return len(this.queue) == 0
}

标签:return,day8,int,self,queue,func,out
From: https://www.cnblogs.com/leisure535/p/18228953

相关文章

  • m1_day8
    课程内容:多态方法重载方法覆盖构造方法扫描仪多态:一个对象总有不同的类型去定义它作用一:创建对象-》父类类型=new子类对象();Personx=newTeacher();Animaly=newCat();当我们使用多态创建完一个对象之后这个对象只能调用父类和子类共......
  • day8(老男孩-Python3.5-S14期全栈开发)
    作者:赵俊           发布日期:2020/09/15三、Socket实现简单的ssh客户端1、os.system和os.popen的区别os.system   返回值是脚本的退出状态码,只有0,1,2三种状态,直接输出命令结果在控制台os.popen   返回值是一个内存地址,需要用read()方法取出返......
  • JAVA语言学习-Day8
    参考教学视频:秦疆GUI组件:窗口、弹框、面板、文本框、列表框、按钮、图片、监听事件、鼠标、键盘事件、破解工具1.简介Gui的核心:SwingAWT界面不美观需要jre环境2.AWTawt介绍:包含了很多的接口和类元素:窗口、按钮、文本框java.awt.*组件Componentbu......
  • 就业班 第二阶段 2401--3.28 day8 shell之循环控制
    七、shell编程-循环结构shell循环-for语句foriin{取值范围}  #for关键字i变量名in关键字取值范围格式12345do          #do循环体的开始循环体done         #done循环体的结束#!/usr/......
  • LeetCode刷题记录——day8
    https://leetcode.cn/problems/spiral-matrix/description/?envType=study-plan-v2&envId=2024-spring-sprint-100注意每次改变边界都有判断一次classSolution{public:vector<int>spiralOrder(vector<vector<int>>&matrix){vector<int&g......
  • Linux学习-day8
    vim的使用安装vimyuminstallvim-y验证是否有vimvim的使用基本上vi/vim共分为三种模式,分别是:命令模式(Commandmode)最长用的,按下字母,a,i,o(a在光标前开始编辑,i是在光标处,开始编辑,o是在光标下一行开始编辑)当你使用vim标记某个文件时,第一步就进入了命令模式。你此......
  • Android 开发Day8
    /*AUTO-GENERATEDFILE.DONOTMODIFY.**Thisclasswasautomaticallygeneratedbythe*gradlepluginfromtheresourcedataitfound.It*shouldnotbemodifiedbyhand.*/packageandroidx.activity;publicfinalclassR{privateR(){}......
  • GitHub使用日志(day8)
    2、配置GitHub的API令牌2.1、打开IDEA,左上角FIle->Settings,搜索github,点击+ 2.2、输入github的邮箱和密码2.3、直接使用账号密码登录可能会报错(可能是因为墙?) 2.4、我们用Token登录2.5、登录github,选择setting 2.6、点击Developersetring 2.7、点击personala......
  • Java学习日记 Day8
    本来昨天计划今天开展开源架构的,但是决定先把JavaWeb的内容速通一下,明天开始SSM吧。前端+JavaWeb知识点补充:①网络传输三大基石:URL、HTTP、HTML②HTML:超文本标记语言,在浏览器中展示一个页面③CSS:美化页面④JS:实现页面动态跳转等交互⑤Tomcat:在服务器中运行程序的一个东西......
  • JavaWebDay8
    一:多表查询 1.内连接(查询的是两张表的交集部分)2.外连接写在left或right左边的是左表数据右边的是右表数据,两个可以互相改造3.子查询a.标量子查询b.列子查询c.行子查询把括号里多余的删除,例如上述中entrydate中job是多余的则把job删除,而job中entrydate是多余的......