用一维数组模拟堆栈

public class Stack{
 //堆栈可以存储多种类型的数据元素
     Object[] elements;
     int index;//指向栈顶元素上方的一个帧。
     public Stack(){
         this(5);
     }
     public Stack(int max){
         elements=new Object[max];
     }
     public void push()throws StackOperationStack//压栈
     { 
             if(index==elements.length){
                 throw New StackOperationStack("栈满!");
             }
         elements[index++];
         
     }
     public Object pop()throws StackOperationStack//弹栈
     {      if(index==0){
                 throw New StackOperationStack("栈空!");
             }else{
             return elements[--index];
         }
     }
}

异常机制:(压栈栈满,弹栈栈空)

//定义异常类
public class StackOperationStack{
    public StackOperationStack();
    public StackOperationStack(String msg){
        super(msg);
    }
}
//定义测试类
public class TestStack{
    public static void main(String [] agrs)
    {
        Stack s=new Stack();
        Person p1=new Person();
        Person p2=new Person();
        Person p3=new Person();
        Animal a1=new Animal();
        Animal a2=new Animal();
    }
    try {
        s.push(p1);
        s.push(p2);
        s.push(p3);
        s.push(a1);
        s.push(a2);
    }catch(StackOperationException e){
        System.out.println("栈已满");
    }
        try {
        s.pop();
        s.pop();
        s.pop();
        s.pop();
        s.pop();
    }catch(StackOperationException e){
        System.out.println("栈已空");
    }
}
class person{}
class Animal{}
时间: 2024-10-10 14:40:49

用一维数组模拟堆栈的相关文章

数组模拟堆栈的存储方式代码实践

堆栈的模式是先进后出,取出后堆栈中就没有取出的元素了,所以在模拟时候要注意这些问题. 1 import java.util.Arrays; 2 3 /* 4 5 需求:编写一个类使用数组模拟堆栈的存储方式. 6 7 堆栈存储特点: 先进后出,后进先出. 8 9 注意: 不再使用的对象,应该不要让变量指向该对象,要让该对象尽快的被垃圾回收期回收. 10 11 12 */ 13 class StackList{ 14 15 Object[] elements; 16 17 int index = 0

C数组模拟堆栈

#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSIZE 8 typedef int dataType; typedef struct Stack {     dataType date[MAXSIZE];     int top; }Stack; void initStack(Stack *s)//初始化堆栈函数 {     s->top=-1;  //初始化top指向堆

07-JAVA一维数组及多维数组(2)

1. Java数组的定义: 1) 和其它编程语言的数组定义基本相同,具有2要素,分别是类型一致(数组中的数据都是一种类型的)和定长(初始化时就已经确定长度,这也意味着数组的内存空间也确定了,即大小不变了): 2) 在Java中数组类型也是一种引用类型,底层是用面向对象的类实现的: 3) 定义数组:支持两种格式 i. Java格式:type[] arrayName; ii. 传统的C语言格式:type arrayName[];  // 为了满足C程序员的编程习惯 !!更加推荐Java风格的,因为其

[C++]二维数组还是一维数组?

记得刚学习C++那会这个问题曾困扰过我,后来慢慢形成了不管什么时候都用一维数组的习惯,再后来知道了在一维数组中提出首列元素地址进行二维调用的办法.可从来没有细想过这个问题,最近自己写了点代码测试下,虽然还是有些不明就里,不过结果挺有意思. 为了避免编译器优化过度,用的是写操作,int,测试分为不同大小的空间,同样大小空间不同的行和列数.分别记录逐行写入,逐列写入,按间隔写入,空间申请和释放的时间. 测试代码 一维数组的申请和释放 1 // Create 2 int *m = new int[n_

算法学习(二) 全排列问题的非递归算法——模拟堆栈

前一段时间总结了全排列问题的几种递归解法,今天再总结一下如何通过对系统栈行为的模拟来非递归的实现全排列问题. 我们用一个数组stack[]来表示一个栈,用一个top指针来表示栈顶,用一个flags[]数组来标示每一个数字的可用性:用i来表示当前的状态. 初始状态top=0:i=-1:flags数组全为1: i递增,如果i没有越界并且flags[i]==1,那么就将i写入栈中,栈顶往前移动一位:最后把flags[i]赋值为0,i回溯到初始状态-1: 当栈顶越界,就将整个栈的信息打印出来,然后top

java数组实现买彩票(二个一维数组的比较思想)

1 /** 2 设计一个程序,模拟从彩球池里随机抽取5个彩球(彩球池里一共有11个彩球,编号为1~11), 3 要求在控制台打印出这5个被取出来的彩球的编号(注意编号不能重复). 4 思路: 5 1.创建一个int类型的一维数组balls,用来保存11个彩球的编号 6 2.创建一个boolean类型的一维数组flags,用来保存11个彩球的状态,默认全部为false 7 (比如:flags[0]=true,意味着编号等于balls[0]的这个彩球已经被取出来了) 8 3.去彩球池里取钱之前,先生

JAVA一维数组

import java.applet.Applet; import java.awt.*; //用*表示包含awt这个源包下的所有方法成员,awt为图形界面设计包 public class Applet_Example extends Applet{ int a[]; //定义一个一维数组 public void init(){ a=new int[5]; //定义一个一维数组,该数组包含5个元素 a[0]=100; //分别对数组元素赋值 a[1]=101; a[2]=102; a[3]=10

一维数组的三种写法

/** *一维 数组的几种写法 * 记住:①数组的左边不能有数字 *   ②数组的右边既然初始化了数组,那么就要赋值 */ //一维数组的标准格式 String[] arr1 = new String[]{"bo","li","jian"}; //上面的简写格式 String[] arr2 = {"bo","li","jian"}; //初始化容量 String[] arr3 = new

输出 一维数组中最大的数+数组遍历

1 //将数组中最大的数输出 2 //数组遍历 3 int[] arr = new int[]{2,4,1,6,10,11}; 4 System.out.println("输出一维数组 :"); 5 for(int i=0; i<arr.length;i++) 6 { 7 System.out.print(arr[i]+" "); 8 } 9 10 System.out.println(); 11 12 int max = arr[0]; 13 for(int