数据结构-简单栈的实现

原创 2017年01月03日 19:42:00
简单的栈的实现,栈元素为类型为int,利用一个数组实现,使用时,构造栈有两种方式,一种为不指定栈的大小,
默认原始大小为4,当元素超过当前大小时,则栈大小增长一倍,另一种为指定栈的大小,超过指定大小时抛出异常。
栈的操作有:
push(int value)  压栈
int pop()  弹栈
int peek()  查看栈顶
boolean isEmpty()  判断栈是否为空
boolean isFull()  判断是否已满,若为自动增长模式,即判断是否已达到当前栈的大小的值
public int getSize()  获取栈的大小

/**
 * Created by logaxy on 2017/1/3.
 */
public class MyStack {

    private boolean actoIncrement = true;//栈是否自增长,当指定大小时为否
    private static int INITIALSIZE = 4;//不指定栈大小时的初始化大小
    private int array[];//栈以一个数组实现
    private int top;

    MyStack() {
        array = new int[INITIALSIZE];
        top = -1;
    }

    MyStack(int maxSize) {
        actoIncrement=false;
        if (maxSize < 0 || maxSize == 0)
            throw new IllegalArgumentException();
        array = new int[maxSize];
        top = -1;
    }

    void push(int value) {
        if (isFull()) {
            if (actoIncrement) {
                int[] temp = array;
                array = new int[2 * array.length];
                System.arraycopy(temp, 0, array, 0, temp.length);

            } else {
                throw new IndexOutOfBoundsException();
            }
        }

        array[++top] = value;
    }

    int pop() {
        if (isEmpty())
            throw new IndexOutOfBoundsException();

        return array[top--];
    }

    int peek() {
        if (isEmpty())
            throw new IndexOutOfBoundsException();

        return array[top];
    }

    boolean isEmpty() {
        return (top == -1);
    }

    boolean isFull() {
        return !(top < array.length - 1);
    }

    public int getSize() {
        return array.length;
    }

}


 
测试程序:
public class Main {

    public static void main(String[] args) {
        testStack();
    }

    public static void testStack(){
        MyStack myStack=new MyStack();
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(4);
        System.out.println("Top Is: "+myStack.peek());
        System.out.println("Size IS:"+myStack.getSize());
        System.out.println("Is Full: "+myStack.isFull());
        myStack.push(5);
        myStack.push(6);
        System.out.println("Top Is: "+myStack.peek());
        System.out.println("Size IS:"+myStack.getSize());
        System.out.println("Is Full: "+myStack.isFull());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println("Is Empty:"+myStack.isEmpty());
        System.out.println("Size IS:"+myStack.getSize());
    }
}

测试结果:
Top Is: 4
Size IS:4
Is Full: true
Top Is: 6
Size IS:8
Is Full: false
6
5
4
3
2
1
Is Empty:true
Size IS:8
版权声明:本文为博主原创文章,未经博主允许不得转载。

简单的文本行编辑程序——基于栈

一个简单的行编辑程序的功能是:接受从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上进行输入是,不能保障不出差错,因此,若在编辑程序中,“每接收一个字符立即存入用户数据区”的做法显然不是最恰...
  • Dakuan_chen
  • Dakuan_chen
  • 2017年04月17日 21:28
  • 406

数据结构基础(4)C语言实现栈--链式存储(动态栈)

数据结构基础---栈 概念,应用以及C语言实现代码。
  • Davidluo001
  • Davidluo001
  • 2015年06月19日 14:14
  • 2255

java数据结构与算法之栈(Stack)设计与实现

【版权申明】转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53362993 出自【zejia...
  • javazejian
  • javazejian
  • 2016年11月28日 12:27
  • 9564

数据结构(java语言描述)-- 栈的两种简单实现

package com.cly.sjjg; import java.util.Iterator; import java.util.LinkedList; import java.util.List...
  • u011726984
  • u011726984
  • 2014年10月01日 13:01
  • 2557

数据结构 — 3.模式匹配

【问题描述】试编写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如"序列1&序列2"模式的字符序 列. 其中序列1和序列2中都不含字符'&',且序列2是序列1的逆序.例如,"a+b&b+a...
  • PeersLee
  • PeersLee
  • 2015年10月27日 17:36
  • 2930

数据结构之 栈(C语言实现)

数据结构之 栈(C语言实现)1.栈的模型栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插...
  • men_wen
  • men_wen
  • 2017年03月14日 23:23
  • 372

Java数据结构----栈(Stack)源码分析和个人简单实现

栈单链表实现:没有长度限制,并且出栈和入栈速度都很快 public class LinkedListStack { private LinkedList linkedList = new L...
  • oChangWen
  • oChangWen
  • 2016年02月17日 23:29
  • 2935

自定义实现的一个简单的栈结构

package testJava; import java.util.Arrays; public class MyStack { //设置栈的默认大小 private static int ...
  • baidu_25820069
  • baidu_25820069
  • 2016年10月15日 00:35
  • 724

数据结构(严蔚敏)之三——顺序栈之c语言实现

实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍历顺序栈 (6...
  • GreenHandCGL
  • GreenHandCGL
  • 2015年04月03日 00:07
  • 2191

数据结构(5)--栈的定义以及相关操作的实现

 参考书籍:数据结构(C语言版) 严蔚敏 吴伟民编著 清华大学出版社 1.栈的定义     栈(stack)是限定在表尾一端进行插入或删除操作的线性表。在栈中,允许插入和删除操作的一端称为栈...
  • u010366748
  • u010366748
  • 2016年02月05日 22:26
  • 1689
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构-简单栈的实现
举报原因:
原因补充:

(最多只允许输入30个字)