A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不二晨 金牌黑马   /  2019-3-22 09:09  /  1032 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在数组中,若知道数据项的下标,便可立即访问该数据项,或者通过顺序搜索数据项,访问到数组中的各个数据项。但是栈和队列不同,它们的访问是受限制的,即在特定时刻只有一个数据项可以被读取或者被删除。众所周知,栈是先进后出,只能访问栈顶的数据,队列是先进先出,只能访问头部数据。这里不再赘述。

栈的主要机制可以用数组来实现,也可以用链表来实现,下面用数组来实现栈的基本操作:

package com.cn.test.Stack;


public class ArrayStack {

        private long[] a;//定义一个数组

    private int size;//栈数组的大小

    private int top;//栈顶

    //带参构造函数
    public ArrayStack(int maxSize){
            this.size=maxSize;
            this.a=new long[size];
            this.top=-1; //表示空栈
    }

    //判断栈是否为空
    public boolean isEmpty(){
            return (top == -1);
    }

    //判断栈是否已满
    public boolean isFull(){
            return (top== size-1);
    }

    //入栈
    public void push(long value){
            if(isFull()){
                    System.out.println("栈已满!");
                    return;
            }
            a[++top] =value;
    }

    //出栈 删除
    public long pop(){
            if(isEmpty()){
                    System.out.println("栈中没有数据!");
                    return 0;
            }
            return a[top--];
    }

    //返回栈顶内容,但不删除
    public long peek(){
            if(isEmpty()){
                    System.out.println("栈中没有数据!");
                    return 0;
            }
            return a[top];
    }

    //打印(从栈顶到栈底)
    public void display(){
            for(int i=top; i>=0;i--){
                    System.out.println(a +" ");
            }
            System.out.println(" ");
    }

    //测试
    public static void main(String[] args) throws Exception
    {
            ArrayStack arrayStack=new ArrayStack(30);
            arrayStack.push(3);
            arrayStack.push(6);
            arrayStack.push(9);

        System.out.println("入栈打印输出: ");
        arrayStack.display();

        int top=(int)arrayStack.peek();
        System.out.println("栈顶: "+top);

        arrayStack.pop();
        System.out.println("弹出栈顶,打印输出: ");
        arrayStack.display();

    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
输出结果:

数据项入栈和出栈的时间复杂度均为O(1)。这也就是说,栈操作所消耗的时间不依赖于栈中数据项的个数,因此操作时间很短。栈不需要比较和移动操作。
---------------------
【转载,仅作分享,侵删】
作者:小志的博客
原文:https://blog.csdn.net/li1325169021/article/details/87081289
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马