数组实现栈,实现push,pop,size方法 -- 面试算法
思考:
有几个关键的地方,
第一,数组的话,如果我们一直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方法 -- 面试算法相关推荐
- 每天一算法(二)实现栈的push pop 操作,并可以输出栈的最小值
实现栈的push pop 操作,并可以输出栈的最小值 // SatckMin.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include ...
- [WPS笔试题]实现栈的push,pop,max且时间复杂度为O(1)
今天做了一下WPS的笔试题,遇到了一道关于栈的题,觉得挺有意思的,就写篇博客分享一下吧~~ 题目要求:要求实现栈的数据结构,在该类型中实现一个能够得到栈的最大元素的max函数,在该栈中,调用max,p ...
- 29. 栈的push,pop序列
题目:给定2个整数序列,其中1个是栈的push顺序,判断另一个有没有可能是对应的pop顺序 解:其实这题主要是判断进栈次数和出栈次数誓不是相等.我是用栈作的,效率不高,每一个元素最多出栈1次,进栈1此 ...
- python判断数组中是否有重复元素_python经典面试算法题4.1:如何找出数组中唯一的重复元素...
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. [百度面试题] 难度系数:⭐⭐⭐ 考察频率:⭐⭐⭐⭐ 题目描述 ...
- javascript学习之数组的使用一 push pop shift unshift 方法
push() 向数组的末尾添加一个或多个元素,返回数组的当前长度 pop() 从数组的末尾删除一个元素,返回删除的元素的值 unshift() 向数组的前端添加一个或多个元素,返回数组的当前长度 sh ...
- 汇编自动出栈_汇编自学 (12) 重温进出栈指令PUSH POP 和双循环
微软的masm5.0是8位平台的,6.0是16位平台的,还有其他32位平台的.现在编程一般用32位平台,8位和16位都可以在保护模式运行. 最简单的一个程序 assume cs: codesg cod ...
- Perl 数组应用详解(push, pop, shift, unshift)
Perl的数组操作有四大常用函数: push:从数组的末尾加入元素. pop :从数组的末尾取出元素 shift: 从数组的开头取出元素 unshift:从数组的开头加入元素 1.push #!/us ...
- c++中怎么数组内有用元素的个数_前端面试(算法篇) - 数组乱序
一.面试题 问:有一个长度为 100 的数组,如何从中随机挑选 50 个元素,组成一个新的数组? 答:这个...那个...emmmmmm 问:那先不挑 50 个,就挑一个数,知道怎么做吗? 答:这个我 ...
- 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
文章目录 一.push / pop 入栈 / 出栈 指令 二.ret / retn 函数调用返回指令 三.set 设置目标值指令 总结 一.push / pop 入栈 / 出栈 指令 push / p ...
最新文章
- WinAPI: 输入光标相关的函数[3]
- 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授
- vscode插件:REST Client发送http请求
- 【Android】 Android adb常见问题整理
- mysql金额数字转成中文_数字转换成汉字金额(转)
- jzoj3832-在哪里建酿酒厂【指针】
- 面试题整理(答案从网上找到后整理的)
- apache2 php mysql_二、Linux服务器apache2+PHP7+mysql环境配置
- 快来被子里 看看我的夜光收钱码!
- 2019年应届生平均起薪5610元 一线城市吸引力首次跌破30%
- free store VS heap(自由存储区VS堆)
- Java SPI机制简介
- Hive里的分区、分桶、视图和索引再谈
- ssm整合(crm案例)
- 自动驾驶3-3 自动驾驶的安全框架 Safety Frameworks for Self-Driving
- java jdom 设置第1行_使用JDOM操作XML
- 2020-12-24《重学操作系统——上》林䭽 前阿里巴巴高级技术专家(P8)
- win7网络适配器_win7网络重置
- PySpark——开启大数据分析师之路
- Win10环境下安装TensorFlow 2.0简明教程
热门文章
- java 毫秒转为日期_java将毫秒转化为日期
- cd命令无法切换路径(Windows下)
- css 识别变量中的换行符_跟我一起全面了解一下CSS变量
- cytoscape使用方法_信号通路分析工具教程——Cytoscape及OmniPath插件
- 关于如何用100行如何实现docker
- 如何正确处理Android6.0+的运行时权限申请
- 移动端手势操作--两点同时点击的实现方案
- Selenium Web 自动化 - 如何找到元素
- sencha touch list(列表)、 store(数据源)、model(模型)详解
- 华章IT图书书讯(2012年第9期)