Java栈的实例-数组和链表两种方法(转)
一、栈
栈的定义
栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。
(1)通常称插入、删除的这一端为栈顶 (Top),另一端称为栈底 (Bottom)。
(2)当表中没有元素时称为空栈。
(3)栈为后进先出(Last In First Out)的线性表,简称为 LIFO 表。
栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"
最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,
要到最后才能删除。
2、栈的基本运算
(1) 判断栈是否为空
boolean isEmpty();
(2)清空栈
void clear();
(3)栈的长度
int length();
(4)数据入栈
boolean push(T data);
(5)数据出栈 ,栈中删除
T pop();
(6)数据出栈 ,栈中不删除
T peek();
二、代码编写
1、接口类
- package com.lin.stack;
- /**
- * 功能概要:栈的接口类
- *
- * @author linbingwen
- * @since 2015年8月29日
- */
- public interface MyStack<T> {
- /**
- * 判断栈是否为空
- * @author linbingwen
- * @since 2015年8月29日
- * @return
- */
- boolean isEmpty();
- /**
- * 清空栈
- * @author linbingwen
- * @since 2015年8月29日
- */
- void clear();
- /**
- * 栈的长度
- * @author linbingwen
- * @since 2015年8月29日
- * @return
- */
- int length();
- /**
- * 数据入栈
- * @author linbingwen
- * @since 2015年8月29日
- * @param data
- * @return
- */
- boolean push(T data);
- /**
- * 数据出栈 ,栈中删除
- * @author linbingwen
- * @since 2015年8月29日
- * @return
- */
- T pop();
- /**
- * 数据出栈 ,栈中不删除
- * @author linbingwen
- * @since 2015年8月29日
- * @return
- */
- T peek();
- }
2、数组实现栈
- package com.lin.stack;
- /**
- * 功能概要:数组实现栈
- *
- * @author linbingwen
- * @since 2015年8月29日
- */
- public class MyArrayStack<T> implements MyStack<T> {
- private Object[] objs = new Object[16];
- private int size;
- @Override
- public boolean isEmpty() {
- return size == 0;
- }
- @Override
- public void clear() {
- for (int i = 0; i < objs.length; i++) {
- objs[i] = null;
- size--;
- }
- }
- @Override
- public int length() {
- return size;
- }
- @Override
- public boolean push(T data) {
- if(size == (objs.length-1)){
- Object[] temp = new Object[objs.length*2];
- for (int i = 0; i < objs.length; i++) {
- temp[i]=objs[i];
- }
- objs= temp;
- }
- objs[size++]=data;
- return true;
- }
- @Override
- @SuppressWarnings("unchecked")
- public T pop() {
- return size == 0?null:(T) objs[(size--)-1];
- }
- @Override
- @SuppressWarnings("unchecked")
- public T peek() {
- return size == 0?null:(T) objs[size];
- }
- }
3、链表实现栈
- package com.lin.stack;
- /**
- * 功能概要:
- *
- * @author linbingwen
- * @since 2015年8月29日
- */
- public class MyListStack<T> implements MyStack<T>{
- private int size;
- private Node top;
- class Node{
- T data;
- Node pre;
- }
- @Override
- public boolean isEmpty() {
- return size == 0;
- }
- @Override
- public void clear() {
- top = null;
- }
- @Override
- public int length() {
- return size;
- }
- @Override
- public boolean push(T data) {
- Node node = new Node();
- node.data=data;
- if( null == top){
- top = node;
- }else {
- node.pre = top;
- top =node;
- }
- size++;
- return true;
- }
- @Override
- public T pop() {
- if(size == 0){
- return null;
- }
- T data = top.data;
- top = top.pre;
- size--;
- return data;
- }
- @Override
- public T peek() {
- if(size == 0){
- return null;
- }
- T data = top.data;
- return data;
- }
- }
4、测试
- package com.lin.stack;
- /**
- * 功能概要:
- *
- * @author linbingwen
- * @since 2015年8月29日
- */
- public class StackTest {
- /**
- * @author linbingwen
- * @since 2015年8月29日
- * @param args
- */
- public static void main(String[] args) {
- MyStack<Integer> myStack1 = new MyArrayStack<Integer>();
- MyStack<Integer> myStack2 = new MyListStack<Integer>();
- for(int i =0;i<30;i++){
- myStack1.push(i);
- myStack2.push(i);
- }
- System.out.println("数组实现的栈输出如下 ");
- for(int j =0;j<30;j++){
- System.out.print(myStack1.pop()+" ");
- }
- System.out.println();
- System.out.println("链表实现的栈输出如下 ");
- for(int k =0;k<30;k++){
- System.out.print(myStack2.pop()+" ");
- }
- }
- }
输出结果如下:
或者 看这里:
数组实现的栈输出如下
29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
链表实现的栈输出如下
29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
http://blog.csdn.net/evankaka/article/details/48088983
Java栈的实例-数组和链表两种方法(转)的更多相关文章
- Java构造和解析Json数据的两种方法详解一——json-lib
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...
- Java构造和解析Json数据的两种方法详解二
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- Java构造和解析Json数据的两种方法详解二——org.json
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...
- Java执行shell脚本并返回结果两种方法的完整代码
Java执行shell脚本并返回结果两种方法的完整代码 简单的是直接传入String字符串,这种不能执行echo 或者需要调用其他进程的命令(比如调用postfix发送邮件命令就不起作用) 执行复杂的 ...
- DES加密 java与.net可以相互加密解密两种方法
DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...
- PHP中数组合并的两种方法及区别介绍
PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = ...
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...
- 将引用了第三方jar包的Java项目打包成jar文件的两种方法
方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...
- 使用 Eclipse 可视化插件 windowbuilder 进行Java GUI开发(插件安装的两种方法)
对于Java GUI开发 其实最方便的方法是用插件制作,当然先了解完代码原理是最好的. eclispe安装windowbuilder有两种方式,一种是离线安装,一种是在线安装. 一.第一种在线安装: ...
随机推荐
- 24位和8位BMP图片保存纯C代码
BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片.非常方便使用. 具体BMP结构可以参考:wingdi.h头文件.今天主要在进行删减代码,需要把多余的代码删除, ...
- POJ 3076 Sudoku (dancing links)
题目大意: 16*16的数独. 思路分析: 多说无益. 想说的就是dancing links 的行是依照 第一行第一列填 1 第一行第二列填 2 -- 第一行第十五列填15 第一行第二列填 1 -- ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 站点设置
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 站点设置 你应该熟悉(假设还咩有)的SharePo ...
- hadoop集群空间使用情况报告脚本
近期集群空间有点紧张,总是操心空间不足而崩溃,近期扩容又不太现实,经与集群用户沟通发现:集群上存储了非常多没用的历史数据,能够删除,这样就能够通过一个crontab脚本每天生成集群空间使用报告,当使用 ...
- Linux实现字符设备驱动的基础步骤
Linux应用层想要操作kernel层的API,比方想操作相关GPIO或寄存器,能够通过写一个字符设备驱动来实现. 1.先在rootfs中的 /dev/ 下生成一个字符设备.注意主设备号 和 从设备号 ...
- Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click
Click绑定可以把由ViewModel定义的方法不绑定到目标DOM的click事件.当点击目标DOM元素时触发ViewModel的对应方法.例如: 使用Click绑定 1 <div id=&q ...
- MVC数组模型绑定
ASP.NET MVC数组模型绑定 在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type=& ...
- poj3281(最大流)
传送门:Dining 题意:一些牛,一些食物,一些饮料,每头牛都有其喜欢的几种食物和几种饮料,求最多能给多少头牛即找到食物又找到饮料~也就是有多少个 牛---食物---饮料 的匹配,而且满足一一匹配, ...
- hdu1824(two-sat)
传送门:Let's go home 题意:有n个队伍要回家,但是每队必须留下一人,而且m个限制,a留下,b必须回家,问能否在限制条件下每队留下一人. 分析:将每个队的队长和两个队员当成i和i':然后对 ...
- sd nfrmtl
http://www.zhihu.com/collection/24337307 http://www.zhihu.com/collection/24337259 http://www.zhihu.c ...