返回

队列和栈的简单导论

后端

栈和队列的定义

栈和队列都是一种线性数据结构,这意味着它们的元素是按顺序排列的。栈是一种后进先出(LIFO)的数据结构,这意味着最后加入栈的元素总是第一个被删除。队列是一种先进先出(FIFO)的数据结构,这意味着第一个加入队列的元素总是第一个被删除。

栈和队列的实现

栈和队列可以通过数组或链表来实现。使用数组实现栈和队列比较简单,但是当栈或队列中元素较多时,插入和删除元素的效率会比较低。使用链表实现栈和队列可以避免这个问题,但是链表的实现比数组要复杂一些。

栈和队列的应用

栈和队列在计算机科学中有着广泛的应用。栈可以用来实现函数调用、递归算法、括号匹配等。队列可以用来实现消息队列、任务队列、广度优先搜索等。

栈和队列的使用示例

以下是如何使用栈和队列的示例代码:

// 使用数组实现栈
int stack[] = new int[10];
int top = -1;

void push(int data) {
  if (top == 9) {
    System.out.println("Stack is full");
  } else {
    stack[++top] = data;
  }
}

int pop() {
  if (top == -1) {
    System.out.println("Stack is empty");
    return -1;
  } else {
    return stack[top--];
  }
}

// 使用链表实现队列
class Queue {
  Node head;
  Node tail;

  public void enqueue(int data) {
    Node newNode = new Node(data);
    if (head == null) {
      head = newNode;
      tail = newNode;
    } else {
      tail.next = newNode;
      tail = newNode;
    }
  }

  public int dequeue() {
    if (head == null) {
      System.out.println("Queue is empty");
      return -1;
    } else {
      int data = head.data;
      head = head.next;
      if (head == null) {
        tail = null;
      }
      return data;
    }
  }
}

class Node {
  int data;
  Node next;

  public Node(int data) {
    this.data = data;
    this.next = null;
  }
}

public class Main {
  public static void main(String[] args) {
    Stack stack = new Stack();
    stack.push(1);
    stack.push(2);
    stack.push(3);

    System.out.println(stack.pop());
    System.out.println(stack.pop());
    System.out.println(stack.pop());

    Queue queue = new Queue();
    queue.enqueue(1);
    queue.enqueue(2);
    queue.enqueue(3);

    System.out.println(queue.dequeue());
    System.out.println(queue.dequeue());
    System.out.println(queue.dequeue());
  }
}