Stack栈的基础实现

 1 public class Stack {
 2     private final int INIT_SIZE = 10;
 3     private int size = 0;
 4     private int[] array;
 5
 6     public Stack() {
 7         array = new int[INIT_SIZE];
 8     }
 9
10     public Stack(int init) {
11         if (init <= 10) {
12             init = 10;
13         }
14         array = new int[init];
15     }
16
17     /**
18      * 入栈
19      *
20      * @param value
21      *            入栈的元素
22      */
23     public void push(int value) {
24         /* 判断是否要扩容 */
25         if (size == array.length) {
26             array = Arrays.copyOf(array, array.length * 2);
27         }
28         array[size++] = value;
29     }
30
31     /**
32      * 取栈顶元素
33      *
34      * @return 返回栈顶元素
35      */
36     public int top() {
37         if (size == 0) {
38             throw new IndexOutOfBoundsException("栈空了");
39         }
40         return array[size - 1];
41     }
42
43     /**
44      * 出栈
45      *
46      * @return 出栈元素
47      */
48     public int pop() {
49         int item = top();
50         size--;
51         return item;
52     }
53
54     /**
55      * 判断栈满
56      *
57      * @return 布尔值
58      */
59     public boolean isFull() {
60         return size == array.length;
61     }
62
63     /**
64      * 判断是否栈空
65      *
66      * @return
67      */
68     public boolean isEmpty() {
69         return size == 0;
70     }
71
72     /**
73      * 栈的大小
74      *
75      * @return 栈的大小
76      */
77     public int size() {
78         return size;
79     }
80
81     public static void main(String[] args) {
82         Stack stack = new Stack();
83         stack.push(0);
84         System.out.println("出栈前的长度" + stack.size);
85         stack.push(1);
86         stack.push(2);
87         System.out.println("出栈前的栈顶元素" + stack.top());
88         System.out.println("出栈" + stack.pop());
89         System.out.println("出栈后的长度" + stack.size);
90         System.out.println("出栈后的栈顶元素" + stack.top());
91     }
92 }

运行结果:

  出栈前的长度1
  出栈前的栈顶元素2
  出栈2
  出栈后的长度2
  出栈后的栈顶元素1

分析:该代码主要包括出栈、入栈、取栈顶元素、栈空、栈满以及栈的大小。其实栈的实现整体上不难,但要判断是否要扩容以及栈空等细节情况

时间: 2024-10-12 21:12:32

Stack栈的基础实现的相关文章

栈的基础

1.栈的基础概念 a.栈是限制在表的一端进行插入(进栈)和删除(出栈)运算的线性表,而进行这两个操作,需要一个头指针.b.通常称插入,删除的这一端为栈顶,另一端为栈底.c.当表中没有元素时称为空栈.假设栈S=(a1,a2,...an),a1称为栈底元素,an称为栈顶元素. 注意:栈是按后进先出的原则进行的,所以,栈称为后进先出(先进后出)表. 2.栈的实现--顺序栈 栈抽象数据结构 栈接口, 描述栈抽象数据类型,泛型参数T表示数据元素的数据类型: package com.clarck.datas

Stack栈 Heap堆

Stack(栈) 栈(stack) 又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素. 在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数

Stack(栈)的简单使用

import java.util.Stack; import org.junit.Before; import org.junit.Test; /** * Stack(栈)继承了Vector类,底层实现是数组. * 此处只介绍了Stack自己定义的方法,父类中的方法不再一一介绍. */ public class TestStack { // 定义一个栈 Stack<String> stack; @Before public void before() { // 实例化栈变量 stack = n

STL --&gt; stack栈

stack栈 c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 使用该容器时需要包含#include<stack>头文件: 定义stack对象的示例代码如下: stack<int>s1; stack<string>s2; stack的基本操作有: 1 s.empty() 如果栈为空返回true,否则返回false 2 s.size() 返回栈中元素的个数 3 s.pop() 删除栈顶元素但不返回其值 4 s.top() 返回栈顶的元素

基于数组实现Java 自定义Stack栈类及应用

栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解stack栈,自己动手自建java stack类是个很好的学习开始: 自建Java Stack 类 Stack 类: 1 package com.stack; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 6 /** 7 * St

Java 自定义Stack栈类及应用

栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解stack栈,自己动手自建java stack类是个很好的学习开始: 自建Java Stack 类 Stack 类: package com.stack; import java.util.ArrayList; import java.util.Arrays; /** * Stack Class * @a

java 中的内存分为四个部分:stack(栈),heap(堆),data segment

http://www.qdmm.com/BookReader/113167,54166719.aspx http://www.qdmm.com/BookReader/113167,54166867.aspx http://www.qdmm.com/BookReader/113167,54166868.aspx http://www.qdmm.com/BookReader/113167,54166869.aspx http://www.qdmm.com/BookReader/113167,5416

java集合类——Stack栈类

今日走读代码时,遇到stack栈类,特查看java的API文档,总结如下: Stack继承Vector类. 栈的特点是后进先出. API中Stack自身的方法不多,基本跟栈的特点有关. 现附上例子,后续继续总结 /** * @作者 whs * @创建日期 2015年2月4日 * @版本 V 1.0 */ package thread.pool; import java.util.Stack; public class StackExam { public static void main(Str

Stack栈的三种含义

理解stack栈对于理解程序的执行至关重要.easy混淆的是,这个词事实上有三种含义,适用于不同的场合,必须加以区分. 含义一:数据结构 stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in,first out). 在这样的数据结构中,数据像积木那样一层层堆起来,后面添?的数据就放在最上层.使用的时候,最上层的数据第一个被用掉,这就叫做"后进先出". 与这样的结构配套的是以下几种特定的方法: (1)push:在最顶层添?数据 (2)pop:返回并移除最