`
MoonMonster
  • 浏览: 36698 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java - - 数组实现栈基本功能

    博客分类:
  • Java
阅读更多
package com.ct.stack;

/**
 * @author Chalmers
 * @version 创建时间:2015年10月24日 下午10:10:13
 */
public class StackDemo {

	// 初始容量
	private int capacity = 10;
	// 增量
	private double increment = 1.5;
	// 栈中数据数量
	private int length = 0;
	// 用来实现栈功能的数组
	private Object[] src = new Object[capacity];

	//默认大小
	public StackDemo() {

	}

	// 自定义初始栈的大小
	public StackDemo(int initCapacity) {
		this.capacity = initCapacity;
	}

	// 判断栈是否为空
	public boolean isEmpty() {

		return length == 0 ? true : false;
	}
	
	//扩充栈的容量
	public Object[] extend(){
		Object[] dest = new Object[(int)(src.length * increment)];
		
		System.arraycopy(src, 0, dest, 0, src.length);
		
		return dest;
	}
	
	//压栈
	public void push(Object obj){
		if(length >= src.length){
			src = extend();
		}
		
		src[length] = obj;
		length ++;
	}
	
	//取栈顶元素
	public Object peek(){
		
		if(isEmpty()){
			throw new NullPointerException();
		}
		
		return src[length-1];
	}
	
	//取出栈顶元素并删除
	public Object pop(){
		if(isEmpty()){
			throw new NullPointerException();
		}
		
		length --;
		return src[length];
	}
	
	//获得栈的元素个数
	public int size(){
		
		return length;
	}
}


测试类
package com.ct.stack;
/** 
 * @author Chalmers
 * @version 创建时间:2015年10月24日 下午10:30:51 
 */
public class StackTest {

	public static void main(String[] args) {
		StackDemo sd = new StackDemo();
		
		for(int i=0; i<20; i++){
			sd.push(new Integer(i));
		}
		
		while(!sd.isEmpty()){
			System.out.print("栈的大小: "+sd.size()+" ");
			System.out.println("栈顶元素为: "+sd.pop());
		}
		//sd.pop();
	}
}



输出结果为:
栈的大小: 20 栈顶元素为: 19
栈的大小: 19 栈顶元素为: 18
栈的大小: 18 栈顶元素为: 17
栈的大小: 17 栈顶元素为: 16
栈的大小: 16 栈顶元素为: 15
栈的大小: 15 栈顶元素为: 14
栈的大小: 14 栈顶元素为: 13
栈的大小: 13 栈顶元素为: 12
栈的大小: 12 栈顶元素为: 11
栈的大小: 11 栈顶元素为: 10
栈的大小: 10 栈顶元素为: 9
栈的大小: 9 栈顶元素为: 8
栈的大小: 8 栈顶元素为: 7
栈的大小: 7 栈顶元素为: 6
栈的大小: 6 栈顶元素为: 5
栈的大小: 5 栈顶元素为: 4
栈的大小: 4 栈顶元素为: 3
栈的大小: 3 栈顶元素为: 2
栈的大小: 2 栈顶元素为: 1
栈的大小: 1 栈顶元素为: 0
1
2
分享到:
评论

相关推荐

    03-Java基础(数组-内存空间的划分

    5. **动态扩展**:Java中没有直接的动态扩展数组的操作,但可以通过创建新数组并复制旧数组内容实现类似功能。 五、数组与内存效率 数组在内存中是连续分配的,因此访问速度快。然而,如果数组过大,可能会导致内存...

    java作业 类设计 实现栈的基本结构 小型计算器

    在这个作业中,学生们被要求设计一个类来实现栈的基本结构,并基于此构建一个小型计算器。栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则,常用于各种计算和内存管理操作。下面我们将详细探讨这个作业...

    将数组元素按照从小到大的顺序排列

    通过以上实验,我们不仅学习了数组排序和折半查找算法的基础知识,还掌握了如何使用一维数组实现栈,并利用栈来解决实际问题——将十进制数转换为二进制数。这些技能对于深入理解数据结构和算法非常有帮助,并且能够...

    Java语言编写的数据结构-栈实现

    在这个主题中,我们将深入探讨如何在Java中实现栈这一基本数据结构,具体包括顺序栈(stack_SqStack)和链栈(stack_SLinkList)。 栈是一种后进先出(Last In First Out, LIFO)的数据结构,常用于临时存储和快速...

    array-abuse:数组很有趣

    "array-abuse:数组很有趣"可能涵盖了这些主题的创新应用,例如使用数组实现一些创意数据结构、优化算法,或者通过不寻常的方式操作数组以解决特定问题。无论是在面试中展示编程技巧,还是在实际项目中解决问题,理解...

    java中LinkedList集合类实现栈和队列.doc

    在Java中,除了LinkedList,还可以使用ArrayDeque类来实现栈和队列,ArrayDeque提供了更高效的操作,因为它基于数组而不是链表。 在实际应用中,LinkedList适合于频繁插入和删除的场景,因为这些操作的时间复杂度为...

    java代码-数组 40 李启强

    在这个"java代码-数组 40 李启强"的学习资源中,我们可以深入探讨40个关于Java数组的关键知识点,这些知识点涵盖了数组的基本操作、高级用法以及在实际编程中的应用。 1. **数组定义与初始化**: - 声明数组时,...

    algorithm-essentials-java

    - 描述:仅使用栈实现队列的所有功能。 - 关键技术:使用两个栈,一个用于入队操作,另一个用于出队操作。 ### 二叉树 二叉树是非线性的数据结构,广泛应用于算法设计中。 - **BinaryTreePreorderTraversal** -...

    day04-IDEA工具&数组1

    Java会为数组分配默认值,例如对于基本类型,int 类型的数组元素默认值为0,boolean 类型的默认值为false,对象类型的默认值为null。 动态初始化格式如下: ```java 数据类型[] 数组名 = new 数据类型[数组长度]; ...

    【03-流程控制与数组】

    •Java的数组既可以存储基本类型的数据,也可以存储引用类型的数据。 •值得指出的是:数组也是一种数据类型,它本身是一种引用类型。 定义数组 •Java语言支持两种语法格式来定义数组: –type[ ] ...

    数组.rar

    - **Java**:`int[] arr = new int[10]`创建数组,`ArrayList`提供动态数组功能。 - **Python**:`arr = [1, 2, 3]`创建列表,相当于动态数组。 - **JavaScript**:`let arr = [1, 2, 3]`创建数组,支持多种方法如`...

    Java-2048游戏.zip

    本项目提供了一个完整的Java实现,可以帮助学习者深入理解Java编程以及游戏开发的基本原理。 首先,Java语言是这个项目的基础。它是一种面向对象的、跨平台的编程语言,以其丰富的类库和强大的性能而闻名。学习Java...

    data-structures-java-源码.rar

    Java的`PriorityQueue`类实现了这一功能,源码会展示其内部基于堆的实现机制。 通过对这些源码的学习,开发者不仅能掌握数据结构的基本概念,还能深入了解Java语言在实现这些数据结构时的优化策略,从而提升编程...

    算法-理论基础- 栈- 双端栈(包含源程序).rar

    源程序中可能包含了用不同编程语言(如C++、Java、Python等)实现的双端栈示例,这有助于读者深入理解双端栈的内部工作原理和使用方式。通过阅读和分析这些源代码,你可以学习如何创建和维护双端栈的数据结构,以及...

    java--games--.rar_games

    数组、链表、栈、队列、集合(ArrayList, HashSet等)等数据结构在存储游戏对象和状态时起到关键作用。同时,算法如排序、查找、动态规划也可能在游戏中有所应用。 6. **多线程**:为了实现游戏的并发性,比如让...

    java基本知识整理

    数组是Java中最基本的数据结构之一,用于存储固定大小的同类型元素集合。 - **获取数组长度**:数组的长度可以通过`数组.length`获取,这个属性提供数组元素的数量。 - **数组复制** - 使用`System.arraycopy()`...

    Java-J2EE Job Interview

    - 数据类型:基本数据类型(如int、double)与引用数据类型(如类、数组)的区别。 - 变量作用域:局部变量、实例变量、静态变量的作用范围及初始化。 - 类与对象:类的概念、对象的创建过程、封装、继承、多态的...

    栈:如何实现浏览器的前进和后退功能?.pdf

    以下是一个简单的基于数组实现的顺序栈的Java代码示例: ```java public class ArrayStack { private String[] items; // 数组 private int count; // 栈中元素个数 private int n; // 栈的大小 // 初始化数组...

    java递归的排序和查找,数组栈.....

    Java作为一种广泛使用的编程语言,提供了丰富的工具和技术来实现这些算法。本篇将深入探讨递归、栈以及它们在排序和查找中的应用。 首先,递归是一种解决问题的方法,它通过调用自身来解决更小规模的相同问题。在...

    java基础数据结构-栈

    栈可以通过数组实现,这种方式称为顺序栈。《Java基础复习笔记05数据结构-栈》中给出的代码示例即为一种顺序栈的实现。关键点如下: 1. **初始化**:定义一个固定大小的数组 `objects` 和一个整型变量 `elementSize...

Global site tag (gtag.js) - Google Analytics