Mysticbinary

堆、队列数据结构 Primary

What is Stack、Queue?

  • 栈(Stack)又名堆栈;
  • 队列(Queue);

堆栈的特点:

由于堆栈的栈和蘸碟的蘸同音,可以想象去火锅店吃饭,调味台上有一摞蘸碟,你是不是只能从顶上的蘸碟拿起,这就是堆栈的特点:后进先出

队列的特点:

队列就是类似排队的数据结构,比如排队打饭,先排队的先打到饭(非常的直观)。所以队列的特点:先进先出

两者的一些相同点

  • 都是抽象的数据结构,它只是规定了需要的操作,底层使用什么基础结构实现,它不管。使用数组、集合...去实现都无所谓,只要实现它的特点就行;
  • 通常用来存储一些临时数据,这些临时的数据进了这个结构后,就必须要按照这个“先进先出”or“后进先出”的特点去读取;

应用场景

栈:

  • 撤回操作
  • 语法检查器

队列

  • 一些类似排队的场景
  • 处理异步请求

栈的实践

使用java 语言实现一个简单的栈,可以存储Int类型的数据,

public class IntegerStack {
    private int maxSize;
    private int top;
    private int[] stackArray;

    public IntegerStack(int size) {
        maxSize = size;
        stackArray = new int[maxSize];
        top = -1;
    }

    // 向栈中添加一个整数
    public void push(int value) {
        if (top < maxSize - 1) {
            top++;
            stackArray[top] = value;
        } else {
            System.out.println("栈已满。无法添加" + value);
        }
    }

    // 从栈中删除并返回顶部整数
    public int pop() {
        if (!isEmpty()) {
            int poppedValue = stackArray[top];
            top--;
            return poppedValue;
        } else {
            System.out.println("栈为空。");
            return -1;
        }
    }

    // 从栈中获取但不删除顶部整数
    public int peek() {
        if (!isEmpty()) {
            return stackArray[top];
        } else {
            System.out.println("栈为空。");
            return -1;
        }
    }

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

test

public class IntegerStackTest extends TestCase {

    public void testPush() {
        IntegerStack myStack = new IntegerStack(5);

        myStack.push(10);
        myStack.push(20);
        myStack.push(30);
        myStack.push(40);
        myStack.push(50);

        System.out.println("在栈顶处打印: " + myStack.peek()); // 输出:在栈顶处打印: 50

        while (!myStack.isEmpty()) {
            System.out.print(myStack.pop() + " "); // 输出:50 40 30 20 10
        }

        System.out.println(" ");

        myStack.push(60);
        myStack.push(70);

        while (!myStack.isEmpty()) {
            System.out.print(myStack.pop() + " "); // 输出:70 60
        }
    }
}

out

在栈顶处打印: 50
50 40 30 20 10  
70 60 

posted on 2023-10-31 14:16  Mysticbinary  阅读(35)  评论(0编辑  收藏  举报

导航