首页 > 其他分享 >两栈共享

两栈共享

时间:2024-10-09 22:11:10浏览次数:1  
标签:两栈 int stacks top2 top1 public 共享 array

两栈共享是一种数据结构的使用方式。
一、概念
两栈共享是指在一个连续的存储区域中同时存放两个栈。这两个栈分别从存储区域的两端开始向中间生长,通过合理的设计和管理,可以有效地利用存储空间,避免了为两个独立的栈分别分配空间可能导致的空间浪费。
二、实现方式
空间分配
通常将一个连续的存储区域划分为两部分,一部分用于第一个栈,从存储区域的一端开始;另一部分用于第二个栈,从存储区域的另一端开始。
例如,可以使用一个数组来实现两栈共享,数组的一端作为一个栈的栈底,另一端作为另一个栈的栈底。
入栈操作
对于第一个栈,入栈操作是在存储区域的一端进行,将新元素放在当前栈顶位置,并将栈顶指针向上移动一位。
对于第二个栈,入栈操作是在存储区域的另一端进行,将新元素放在当前栈顶位置,并将栈顶指针向下移动一位。
出栈操作
三、优点
空间利用率高
由于两个栈共享同一个存储区域,可以根据实际需求动态地分配空间,避免了为每个栈单独分配固定大小的空间可能导致的空间浪费。
特别是在栈的大小不确定或者两个栈的使用情况不均衡时,两栈共享可以更好地利用存储空间。
操作简单
示例代码如下:
class TwoStacksInOneArray {
private int[] array;
private int top1;
private int top2;

public TwoStacksInOneArray(int size) {
    array = new int[size];
    top1 = -1;
    top2 = size;
}

public void push1(int value) {
    if (top1 + 1 == top2) {
        System.out.println("Stack overflow");
    } else {
        array[++top1] = value;
    }
}

public void push2(int value) {
    if (top2 - 1 == top1) {
        System.out.println("Stack overflow");
    } else {
        array[--top2] = value;
    }
}

public int pop1() {
    if (top1 == -1) {
        System.out.println("Stack 1 is empty");
        return -1;
    } else {
        return array[top1--];
    }
}

public int pop2() {
    if (top2 == array.length) {
        System.out.println("Stack 2 is empty");
        return -1;
    } else {
        return array[top2++];
    }
}

}

public class TwoStacksSharedExample {
public static void main(String[] args) {
TwoStacksInOneArray stacks = new TwoStacksInOneArray(5);
stacks.push1(1);
stacks.push1(2);
stacks.push2(3);
stacks.push2(4);

    System.out.println("Popped from stack 1: " + stacks.pop1());
    System.out.println("Popped from stack 2: " + stacks.pop2());
}

}

标签:两栈,int,stacks,top2,top1,public,共享,array
From: https://www.cnblogs.com/zyh-828/p/18455289/2024-10-9

相关文章

  • HarmonyOS NEXT公测:今天众人拾柴,明天共享春色
    「10月8日,HarmonyOSNEXT向前迈进一大步——开启公测。」 这款面向万物互联时代的通用操作系统可谓万众瞩目,每一次重大迭代都牵动着整个产业的神经。9月25日的鸿蒙千帆会战誓师大会,合作伙伴沸腾了。百度、腾讯、B站、京东等一众互联网巨头齐聚,开发者正在以积极的姿态参与进......
  • 未发表的原创模型!三类典型需求响应负荷的标准化建模+共享储能提升灵活性(Matlab代码实
      ......
  • java计算机毕业设计共享自习室管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,随着教育资源的日益紧张和终身学习理念的深入人心,共享自习室作为一种新兴的学习空间形式,受到了越来越多学生的青睐。共享自习室不仅为学生......
  • 计算机毕业设计 基于Hadoop的智慧校园数据共享平台的设计与实现 Python毕业设计 Pytho
    博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌......
  • 使用LPD协议来共享打印机
    平台:WIN7、WIN10问题:win10上共享了打印机,WIN7电脑无法访问,连接时提示0x0000011B错误,我记得这是WIN10里安装了某个补丁造成的BUG,无法卸载补丁,改用LPR协议访问共享打印机。方法:一、启动LPD服务。win7和win10上均打开“控制面板”,“程序和功能”,“启动或关闭Windows功能”,下拉找到......
  • [Http] 跨源资源共享(CORS)
    基本概念CORS指的是跨源资源共享(Cross-OriginResourceSharing),默认情况下不允许从一个源(即一个域名、协议、端口号组合)加载页面执行跨源HTTP请求。也就是说,不允许A.com请求B.com的资源,通常发生在前后端分离项目,前端项目部署的服务器和后端部署的服务器不同源。举个例......
  • 多智能体协作强化学习中的知识共享
    本文提出了一种名为谨慎乐观知识共享(CONS)的新方法,用于解决合作多智能体强化学习(MARL)中的知识共享问题。针对传统的行动建议方法可能导致团队探索受阻的情况,即经验丰富的智能体会分享其知识而较不成熟的智能体则遵循这些建议,导致可能依赖于次优或不良建议的问题,本文的方法允许智能体......
  • Endnote导入共享数据
    Endnote导入共享数据Endnote是我们经常使用的参考文献管理工具。但是,在云计算还不是很普及的今天,往往每台电脑上都有自己的endnote数据库。这样,换了电脑,要使用同样的参考文献数据时,需要重新导入一遍。尽管现在从网上导入参考文献数据是一件很简单的事情,面对多条甚至成千上万条数......
  • [20240930]关于共享池-表对象在库缓存探究2.txt
    [20240930]关于共享池-表对象在库缓存探究2.txt--//以前探究过sql语句在共享池存在父子游标,父游标存在堆0,子游标堆0,堆6,通过各种指针链接起来,--//父游标的堆0上保存了所有子游标的列表和各个子游标的句柄指针,子游标的堆6中保存了解析过的执行计划等解析信息。--//前几天测试表对象......
  • StarTowerChain:数字共享生态的引领者,共创美好未来
    在数字时代,共享经济已经成为一种趋势。StarTowerChain以其强大的共享经济模式,打造了一个全新的数字共享生态。在StarTowerChain的平台上,用户可以轻松地共享自己的资源,包括计算资源、存储空间、数据等。这种共享不仅可以提高资源的利用率,还可以为用户带来额外的收益。共享经......