数据结构之栈

最近又看到了一本书中讲了数据结构中很简单的栈的实现,上次看到该内容时就想自己动手实现一番,无奈各种情况导致无法实现,此次看到,决定简单实现以下以加深个人理解!   本人菜鸡一枚,如有大神看到,请多指导,勿喷勿喷,哈哈!

书归正传:

首先我们编写一个代表栈的类:

 /**

 * @ClassName: StackDemo 

 * @Description: 数据结构之栈(Stack)

 * @author: zhangjiaqi

 * @date: 2018年6月20日 下午7:39:11 

 */

public class StackDemo {

private static int[] stack = new int[10];//使用一个数组代表栈,即模仿将一块连续内存当做栈空间

private static int top = 0;//栈顶指针,随时记录栈顶的位置

private static int extension = 2; //当栈满后需要扩充空间的倍数

/**

* @Title: get 

* @Description: 从栈中取数据

* @return int

* @author zhangjiaqi

* @date 2018年6月20日下午7:59:24

*/

public static int get() {

    if(top > 0) {//防止下标越出,如果取到了栈底,就一直返回栈底的值

        top--;

    }else {

        top = 0;

    }

    return stack[top];

}

/**

* @Title: set 

* @Description: 向栈中存数据

* @param i

* @return int

* @author zhangjiaqi

* @date 2018年6月20日下午7:59:47

*/

public static int set(int i) {

    if(top > (stack.length-1)) {//如果栈顶指针超出最大下标,则为栈分配更大的空间(这里设置为2倍),

                                            //应该也有一个值作为上限,此处暂时不做处理

        stack = Arrays.copyOf(stack, stack.length*extension);

        stack[top] = i;

        top++;

    }else {

        stack[top] = i;

        top++;

    }

    //set成功,返回set的值

    return i;

}

}


然后就可以编写一个main来测试一下:

    public static void main(String[] args) {

                //简单粗暴,哈哈哈哈

                System.out.println("0次get:"+StackDemo.get());

                System.out.println("0次set:"+StackDemo.set(100));

                System.out.println("1次set:"+StackDemo.set(200));

                System.out.println("2次set:"+StackDemo.set(300));

                System.out.println("3次set:"+StackDemo.set(400));

                System.out.println("4次set:"+StackDemo.set(500));

                System.out.println("5次set:"+StackDemo.set(600));

                System.out.println("6次set:"+StackDemo.set(700));

                System.out.println("7次set:"+StackDemo.set(800));

                System.out.println("8次set:"+StackDemo.set(900));

                System.out.println("9次set:"+StackDemo.set(1000));

                System.out.println("10次set:"+StackDemo.set(1100));

                System.out.println("1次get:"+StackDemo.get());

                System.out.println("2次get:"+StackDemo.get());

                System.out.println("3次get:"+StackDemo.get());

                System.out.println("4次get:"+StackDemo.get());

                System.out.println("5次get:"+StackDemo.get());

                System.out.println("6次get:"+StackDemo.get());

                System.out.println("7次get:"+StackDemo.get());

                System.out.println("8次get:"+StackDemo.get());

                System.out.println("9次get:"+StackDemo.get());

                System.out.println("10次get:"+StackDemo.get());

                System.out.println("11次get:"+StackDemo.get());

                System.out.println("12次get:"+StackDemo.get());

    }


控制台打印结果:

    0次get:0
    0次set:100
    1次set:200
    2次set:300
    3次set:400
    4次set:500
    5次set:600
    6次set:700
    7次set:800
    8次set:900
    9次set:1000
    10次set:1100
    1次get:1100
    2次get:1000
    3次get:900
    4次get:800
    5次get:700
    6次get:600
    7次get:500
    8次get:400
    9次get:300
    10次get:200
    11次get:100

    12次get:100


总结:

    其实,这段代码简单的代码也让我写了将近半个小时的时间,很值得!   只有自己动手后才会有一种明显得映像,不显得那么得模糊不清,虽然简单,但是也是很有收获的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值