美文网首页
Java数据结构之栈

Java数据结构之栈

作者: 砌月东谷 | 来源:发表于2021-07-09 07:07 被阅读0次

栈只允许访问一个数据项:即最后插入的数据项。移除这个数据项后才能访问倒数第二个插入的数据项,依次类推。所以栈是一个先进后出的数据结构

栈的代码实现:

public class stack {
    private long[] stackArray;
    private int maxSize;
    private int top;

    public stack(int s){
        maxSize=s;
        stackArray=new long[maxSize];
        top=-1;

    }
    //入栈
    public void push(long value){
        stackArray[++top]=value;
    }
    //出栈
    public long pop(){
        return stackArray[top--];
    }
    //查看栈顶元素
    public long peek(){
        return stackArray[top];
    }
    public boolean isEmpty(){
        return (top==-1);
    }
    public boolean isFull(){
        return (top==maxSize-1);
    }

    public static void main(String[] args) {
        stack s=new stack(10);
        s.push(22);
        s.push(1);
        s.push(88);
        s.push(66);

        while (!s.isEmpty()){
            long val=s.pop();
            System.out.println(val);
        }
    }
}

出错处理

有不同的方法来处理栈的错误。当向已经满了的栈用再添加一个数据项,或要从空栈中弹出一个数据项时会发生错误,可以把处理这些错误的工作推给类用户,用户在插入数据项前要确定栈不满:

if(!stack.isFull()){
    insert(item);
}

栈实例1:单词逆序

上面提供了long的栈,读者可以自行改造成char类型的栈

class Reverser{
    private String input;
    private String output;

    public Reverser(String in){
        input=in;
    }

    public String doRev(){
        int stackSize=input.length();
        stack s=new stack(stackSize);

        for(int j=0;j<input.length();j++){
            char ch=input.charAt(j);
            s.push(ch);
        }
        output=" ";
        while(!s.isEmpty()){
            char ch=s.pop();
            output=output+ch;
        }
        return output;
    }

    public static void main(String[] args) throws IOException {
        String input,output;

        while(true){
            System.out.println("请输入字符串");
            System.out.flush();
            input=getString();
            if(input.equals("")){
                break;
            }
            Reverser reverser=new Reverser(input);
            output= reverser.doRev();
            System.out.println(output);
        }
    }

    public static String getString() throws IOException {
        InputStreamReader isr=new InputStreamReader(System.in);
        BufferedReader br=new BufferedReader(isr);
        String s=br.readLine();
        return s;
    }
}

栈是一个概念上的辅助工具,栈通过提供限定性访问方法push和pop,使程序易读而且不容易出错

栈的效率

数据项入栈和出栈的时间复杂度都为常数O(1),这也就是说,栈操作所耗时间不依赖与栈中数据项的个数,因此操作时间很短,栈不需要比较和移动操作。

相关文章

  • Android面试题总结(题目+复习链接)

    数据结构 1.栈实现原理 java数据结构与算法之栈(Stack)设计与实现 - CSDN博客 2.链表实现原理 ...

  • 2019-07-11—栈

    栈:Java数据结构和算法(四)——栈 string和char一般这么转化: 21、定义栈的数据结构,请在该类型中...

  • Java数据结构算法(三)树

    本文旨作于收集整理使用!! 导航 Java数据结构算法(一)链表 Java数据结构算法(二)栈和队列 Java数据...

  • Java数据结构算法(四)图

    本文旨作于收集整理使用!! 导航 Java数据结构算法(一)链表 Java数据结构算法(二)栈和队列 Java数据...

  • Java数据结构算法(五)排序

    算法这点粗略整理一下,后面完善 Java数据结构算法(一)链表 Java数据结构算法(二)栈和队列 Java数据结...

  • 《数据结构与算法之美》- 栈

    栈,在这里说的是一种数据结构。 你还可能知道的栈 提到“栈”,做Java的同学还会想起Java内存模型中的“栈”,...

  • Java数据结构之栈

    栈 介绍 1)栈的英文(stack) 2)栈是一个先入后出的有序列表 3)栈是限制线性表中元素插入和删除只能在线性...

  • Java数据结构之栈

    栈只允许访问一个数据项:即最后插入的数据项。移除这个数据项后才能访问倒数第二个插入的数据项,依次类推。所以栈是一个...

  • Java核心类库—— 数据结构

    Java核心类库-------数据结构体系图 1.数据结构 2.栈 3.哈希表

  • 复习

    数据结构 数据结构 集合常见数据结构:集合,链表,队列,数组,栈,映射java中:List列表,Set集合,Map...

网友评论

      本文标题:Java数据结构之栈

      本文链接:https://www.haomeiwen.com/subject/xaixpltx.html