手撕数据结构---栈和队列的概念以及实现

当前位置: 电视猫 > 正则表达式>
电视猫时间: 2024-08-19 12:07:42

  手撕数据结构---栈和队列的概念以及实现

手撕数据结构:栈和队列的概念与实现

栈(Stack)

概念:

  • 栈是一种线性数据结构,遵循后进先出(LIFO)的原则。
  • 可以想象成一叠盘子,新放的盘子总是在最上面,取盘子时也总是取最上面的。
  • 常用操作:
    • push:入栈,将元素添加到栈顶。
    • pop:出栈,删除栈顶元素并返回。
    • peek:获取栈顶元素,但不删除。
    • isEmpty:判断栈是否为空。

实现:

  • 数组实现:
    • 使用数组存储元素。
    • top指针指向栈顶元素。
    • 入栈时,将元素添加到top指针的下一个位置。
    • 出栈时,将top指针减一。
  • 链表实现:
    • 使用链表存储元素。
    • top指针指向栈顶节点。
    • 入栈时,在链表头部插入新节点。
    • 出栈时,删除链表头部节点。

Java代码示例(数组实现):

Java
public class ArrayStack {
    private int[] data;
    private int top = -1;

    public ArrayStack(int capacity) {
        data = new int[capacity];
    }

    public void push(int element) {
        if (isFull()) {
            throw new RuntimeException("Stack overflow");
        }
        data[++top] = element;
    }

    public int pop() {
        if (isEmpty()) {
            throw new RuntimeException("Stack underflow");
        }
        return data[top--];
    }

    public int peek() {
        if (isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        return data[top];
    }

    public boolean isEmpty() {
        return top == -1;
    }

    public boolean isF   ull() {
        return top    == data.length - 1;
    }
}

队列(Queue)

概念:

  • 队列是一种线性数据结构,遵循先进先出(FIFO)的原则。
  • 可以想象成一条队伍,先排队的人先出队。
  • 常用操作:
    • enqueue:入队,将元素添加到队尾。
    • dequeue:出队,删除队头元素并返回。
    • peek:获取队头元素,但不删除。
    • isEmpty:判断队列是否为空。

实现:

  • 数组实现:
    • 使用数组存储元素。
    • front指针指向队头,rear指针指向队尾。
    • 入队时,将元素添加到rear指针的下一个位置。
    • 出队时,将front指针加一。
  • 链表实现:
    • 使用链表存储元素。
    • front指针指向队头节点,rear指针指向队尾节点。
    • 入队时,在链表尾部插入新节点。
    • 出队时,删除链表头部节点。

Java代码示例(数组实现):

Java
public class ArrayQueue {
    private int[] data;
    private int front, rear;
    private int capacity;

    public ArrayQueue(int capacity) {
        this.data = new int[capacity];
        this.front = 0;
        this.rear = -1;
        this.capacity = capacity;
    }

    // ... 其他方法
}

栈和队列的应用

  • 栈: 函数调用、表达式求值、浏览器历史记录、回溯算法
  • 队列: 广度优先搜索、生产者消费者模型、任务调度

总结

栈和队列是两种基础的数据结构,在编程中应用广泛。掌握它们的实现原理和应用场景,对于深入理解算法和数据结构有很大的帮助。

建议:

  • 动手实现: 尝试自己动手实现栈和队列,加深对它们的理解。
  • 对比分析: 比较数组实现和链表实现的优缺点。
  • 扩展练习: 尝试实现循环队列、双端队列等变种。

希望这个回答对你有帮助!

如果你还有其他问题,欢迎随时提问。

想深入了解哪些方面呢? 比如:

  • 栈和队列的应用场景
  • 栈和队列的优化
  • 栈和队列与其他数据结构的关系

请告诉我你的需求,我将为你提供更详细的解答。

    最新电视剧
    热门电视剧
    影视资讯
    最新剧情排行榜
    最新电视剧剧情