如何在 Dart 中实现带有 push 和 pop 的堆栈

Sur*_*gch 5 queue stack dart flutter

我想在 Dart 中实现一个堆栈数据结构(不要与 Flutter Stack 小部件混淆),以便我可以处理用于 Flutter 文本渲染的自定义 TextStyle 堆栈。

我知道使用堆栈您可以推送和弹出值。这听起来与 Queue 相似,但我不确定其中的区别。

这不起作用:

final myStack = Queue<int>();
myStack.push(1);
final top = myStack.pop();
Run Code Online (Sandbox Code Playgroud)

Sur*_*gch 7

代码堆叠封装是有益的。这是一个简化版本:

class Stack<T> {
  final _stack = Queue<T>();

  void push(T element) {
    _stack.addLast(element);
  }

  T pop() {
    final T lastElement = _stack.last;
    _stack.removeLast();
    return lastElement;
  }

  void clear() {
    _stack.clear();
  }

  bool get isEmpty => _stack.isEmpty;
}
Run Code Online (Sandbox Code Playgroud)

笔记:

  • AQueue允许您修改两端,默认情况下是 a ListQueue。有关更多信息,请参阅此问题

  • 推送是添加到队列中,弹出是删除最后一个元素,然后返回该元素。

  • 您还可以添加一个topgetter 来查看最后一个元素是什么而不弹出它。

用法

你现在可以这样使用它:

final myStack = Stack<int>();
myStack.push(1);
final top = myStack.pop();
Run Code Online (Sandbox Code Playgroud)


A.e*_*deh 7

这是我使用的课程

import 'dart:collection';

class Stack<T> {
  final _stack = Queue<T>();

  int get length => _stack.length;

  bool canPop() => _stack.isNotEmpty;
  
  void clearStack(){
    while(_stack.isNotEmpty){
      _stack.removeLast();
    }
  }

  void push(T element) {
    _stack.addLast(element);
  }

  T pop() {
    T lastElement = _stack.last;
    _stack.removeLast();
    return lastElement;
  }

  T peak() => _stack.last;

}
Run Code Online (Sandbox Code Playgroud)