思考:

有几个关键的地方,

第一,数组的话,如果我们一直push,需要扩容.

第二,因为产生了扩容所以当前数组的大小,不代表存放的数据多少,所以我们需要一个count 表示当前的容量。

第三,扩容之后,要把之前的数据copy 到新的数组里面,并且要把数据放到新的数组里面。

实现:

package com.xinyu.test;public class Test27 {/*** 数组实现栈,实现push,pop,size方法*/public static void main(String[] args) {Stack stack = new Stack();stack.push(1);stack.push(2);stack.push(3);stack.push(4);stack.push(5);stack.push(6);System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println("----");System.out.println("size " + stack.size());System.out.println("----");System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());}public static class Stack{private int[] arr;private int count;public Stack(){arr = new int[2];}public void push(int num){//容量需要扩容if(count >= arr.length){int[] arrNew = new int[count*2];
//                System.arrayCopy(arrNew,arr,0,count,0,count);System.arraycopy(arr,0,arrNew,0,count);arr = arrNew;//arr[count++] = num;}else{arr[count++] = num;}}public int pop(){//这里应该是先--
//            return arr[count--];   //--countif (count <= 0) {return -1;}return arr[--count];   //--count}public int size(){return count;}}}

注意:

     * @param      src      the source array.* @param      srcPos   starting position in the source array.* @param      dest     the destination array.* @param      destPos  starting position in the destination data.* @param      length   the number of array elements to be copied.* @exception  IndexOutOfBoundsException  if copying would cause*               access of data outside array bounds.* @exception  ArrayStoreException  if an element in the <code>src</code>*               array could not be stored into the <code>dest</code> array*               because of a type mismatch.* @exception  NullPointerException if either <code>src</code> or*               <code>dest</code> is <code>null</code>.*/public static native void arraycopy(Object src,  int  srcPos,Object dest, int destPos,int length);

arraycopy 的几个参数,我们需要熟悉一下。
src 表示源数组,srcPos 表示我从源数组的第几个位置copy
dest 表示目标数组,destPos 表示我要从dest数组的第几个位置开始粘贴
length 表示copy 的长度

数组实现栈,实现push,pop,size方法 -- 面试算法相关推荐

  1. 每天一算法(二)实现栈的push pop 操作,并可以输出栈的最小值

    实现栈的push pop 操作,并可以输出栈的最小值 // SatckMin.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include ...

  2. [WPS笔试题]实现栈的push,pop,max且时间复杂度为O(1)

    今天做了一下WPS的笔试题,遇到了一道关于栈的题,觉得挺有意思的,就写篇博客分享一下吧~~ 题目要求:要求实现栈的数据结构,在该类型中实现一个能够得到栈的最大元素的max函数,在该栈中,调用max,p ...

  3. 29. 栈的push,pop序列

    题目:给定2个整数序列,其中1个是栈的push顺序,判断另一个有没有可能是对应的pop顺序 解:其实这题主要是判断进栈次数和出栈次数誓不是相等.我是用栈作的,效率不高,每一个元素最多出栈1次,进栈1此 ...

  4. python判断数组中是否有重复元素_python经典面试算法题4.1:如何找出数组中唯一的重复元素...

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. [百度面试题] 难度系数:⭐⭐⭐ 考察频率:⭐⭐⭐⭐ 题目描述 ...

  5. javascript学习之数组的使用一 push pop shift unshift 方法

    push() 向数组的末尾添加一个或多个元素,返回数组的当前长度 pop() 从数组的末尾删除一个元素,返回删除的元素的值 unshift() 向数组的前端添加一个或多个元素,返回数组的当前长度 sh ...

  6. 汇编自动出栈_汇编自学 (12) 重温进出栈指令PUSH POP 和双循环

    微软的masm5.0是8位平台的,6.0是16位平台的,还有其他32位平台的.现在编程一般用32位平台,8位和16位都可以在保护模式运行. 最简单的一个程序 assume cs: codesg cod ...

  7. Perl 数组应用详解(push, pop, shift, unshift)

    Perl的数组操作有四大常用函数: push:从数组的末尾加入元素. pop :从数组的末尾取出元素 shift: 从数组的开头取出元素 unshift:从数组的开头加入元素 1.push #!/us ...

  8. c++中怎么数组内有用元素的个数_前端面试(算法篇) - 数组乱序

    一.面试题 问:有一个长度为 100 的数组,如何从中随机挑选 50 个元素,组成一个新的数组? 答:这个...那个...emmmmmm 问:那先不挑 50 个,就挑一个数,知道怎么做吗? 答:这个我 ...

  9. 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )

    文章目录 一.push / pop 入栈 / 出栈 指令 二.ret / retn 函数调用返回指令 三.set 设置目标值指令 总结 一.push / pop 入栈 / 出栈 指令 push / p ...

最新文章

  1. WinAPI: 输入光标相关的函数[3]
  2. 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授
  3. vscode插件:REST Client发送http请求
  4. 【Android】 Android adb常见问题整理
  5. mysql金额数字转成中文_数字转换成汉字金额(转)
  6. jzoj3832-在哪里建酿酒厂【指针】
  7. 面试题整理(答案从网上找到后整理的)
  8. apache2 php mysql_二、Linux服务器apache2+PHP7+mysql环境配置
  9. 快来被子里 看看我的夜光收钱码!
  10. 2019年应届生平均起薪5610元 一线城市吸引力首次跌破30%
  11. free store VS heap(自由存储区VS堆)
  12. Java SPI机制简介
  13. Hive里的分区、分桶、视图和索引再谈
  14. ssm整合(crm案例)
  15. 自动驾驶3-3 自动驾驶的安全框架 Safety Frameworks for Self-Driving
  16. java jdom 设置第1行_使用JDOM操作XML
  17. 2020-12-24《重学操作系统——上》林䭽 前阿里巴巴高级技术专家(P8)
  18. win7网络适配器_win7网络重置
  19. PySpark——开启大数据分析师之路
  20. Win10环境下安装TensorFlow 2.0简明教程

热门文章

  1. java 毫秒转为日期_java将毫秒转化为日期
  2. cd命令无法切换路径(Windows下)
  3. css 识别变量中的换行符_跟我一起全面了解一下CSS变量
  4. cytoscape使用方法_信号通路分析工具教程——Cytoscape及OmniPath插件
  5. 关于如何用100行如何实现docker
  6. 如何正确处理Android6.0+的运行时权限申请
  7. 移动端手势操作--两点同时点击的实现方案
  8. Selenium Web 自动化 - 如何找到元素
  9. sencha touch list(列表)、 store(数据源)、model(模型)详解
  10. 华章IT图书书讯(2012年第9期)