首页

文章

如何用数组实现队列和栈

发布网友 发布时间:2022-04-20 04:51

我来回答

1个回答

热心网友 时间:2022-04-22 20:01

1.实现栈结构:栈结构是先进后出的,只需要一个数组和一个记录位置的变量size,当进来一个元素,size就++,出去一个元素size就–。
2.实现队列结构:相对栈结构要难搞一些,队列的先进先出的,需要一个数组和三个变量,size记录已经进来了多少个元素,in记录刚进来的元素应该放在哪个位置,out表示用户要求弹出的元素所在的位置。size的作用不止于此,它还是in与out 的操作的关键信息,使得in与out解耦,避免的很多的麻烦,好像书本讲的是没有size这个变量的。当in或者out达到底部的时候就跳回0处。

/**
     * 固定数组实现一个队列
     * 队列先进先出,方法有push,pull,peek
     */
    public class CArrayToQueue {
       public static class MyQueue{
           private int out;//新进来的数 放这
           private int in;//用户要求弹出的数
           private int size;//已经进队列的个数
           
            private int arr[];
            public MyQueue(int iniSize){
                arr = new int[iniSize];
             size = 0;
              in = 0;
                out = 0;
           }
           public void push(int num){
                if(size==arr.length){
                 throw new RuntimeException(“the queue is full!”);
              }
               size++;//大小扩展一个
               arr[in] = num;//赋值
                in = in==arr.length-1 ? 0 : in+1;//如果已经到达数组末尾就重新等于0
            }
           public int pull(){
              if(size==0){
                 throw new RuntimeException(“the queue is empty!”);
             }
               size–;
             int t = out;//记录
            out = out==arr.length-1 ? 0 : out+1;//如果已经到达数组末尾就重新等于0
             return arr[t];
            }
           public int peek(){
              if(size==0){
                 throw new RuntimeException(“the queue is empty!”);
             }
               return arr[out];
          }
       }
       public static void main(String[] args) {
          int iniSize = 3;
         MyQueue myQueue = new MyQueue(iniSize);
           myQueue.push(;
          myQueue.push(;
          myQueue.push(;
          System.out.println(myQueue.pull());
         System.out.println(myQueue.pull());
         System.out.println(myQueue.pull());
         myQueue.push(;
          myQueue.push(;
          System.out.println(myQueue.pull());
         System.out.println(myQueue.peek());
     }
    }


•    1


 /**
     * 固定数组实现栈结构
     * 实现方法push,pop,peek
     * 当越界的时候抛出一个运行时异常
     * 简单面试题
     */
    public class CArrayToStack {
       public static class MyStack{
           private int size;//指针位置,也表示栈已经压了多少
            private int[]arr;
           MyStack(int iniSize){//构造方法初始化数组
                arr = new int[iniSize];
             size = 0;
          }
           public void push(int num){
                if(size == arr.length){
                   throw new RuntimeException("栈下标越界!");
              }
               arr[size++] = num;
          }
           public int pop(){
               if(size == 0){
                   throw new RuntimeException("栈中已经没有元素可以弹出!");
               }
               return arr[--size];
           }
           public int peek(){
              if(size == 0){
                   throw new RuntimeException("栈中已经没有元素可以弹出!");
               }
               return arr[size];
         }
       }
       public static void main(String[] args) {
          int len = 
            MyStack myStack = new MyStack(len);
           for (int i = 0; i < len; i++) {
             myStack.push(i);
            }
           for (int i = 0; i < len; i++) {
             System.out.println(myStack.pop());
          }
       }
    }

八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 c语言实现队列和栈的方法 如何用一个栈实现队列,如何用一个队列实现栈 Java:如何用两个队列实现栈 如何用队列实现栈 打印机的连接线插在电脑哪里? 行迹软件真能查对方手机位置吗 有没有什么软件可以定位朋友在哪里 给微信朋友发链接他点开就能知道他位置的软件? 有没有一款可以看到对方安卓手机地理位置的软件 苹果手机有什么软件可以知道朋友的大概位置 有没有什么软件可以知道别人在哪里啊? 有哪种地图软件是能看到好友所在位置的?只要好友... 什么手机软件有 好友位置实时更新? 百度地图有吗... 苹果手机可以看到对方位置的软件叫什么 哪个导航软件可以添加好友,知道好友位置 什么手机地图软件可以两个人互相在手机上显示双方... 那个软件可以找到对方所在的位置 什么手机软件能知道好友所在的地理位置? 手机下载什么软件可以实时知道双方位置? 给对方手机下载什么软件可以给他定位。安卓系统的。 怎样用两个队列实现一个栈的功能 利用队列的基本操作,实现栈的逆置,写一算法 用队列和栈实现元素的逆值 手机桌面的时间怎么设置 从时间复杂度和空间复杂度的两个方面同时分析一下... 时间日期怎么设置显示在手机桌面? 求助高手 关于数据结构栈与队列的实现 手机桌面怎么设置什么什么时间 1.利用队列的基本操作实现栈的逆置 2.利用队列的基... 栈与队列的实现(java) 2.(1)用两个栈实现一个队列.用两个队列实现一个栈。 四则运算用队列代替栈是否可行?怎么实现?如果不行,... 数据结构问题栈与队列的基本操作 C++数据结构 栈和队列的实现和应用 栈和队列的应用 怎样用2个栈实现队列(java) 栈和队列数据结构的特点,什么情况下用到栈,什么情... 小米9手机黑屏,按键无反应,充电无反应,放两天,... 线切割是干什么的? 怎么学线切割?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com