数据结构与算法之Stack(栈)——in dart

用dart 语言实现一个简单的stack(栈)。

 1 class Stack<E> {
 2   final List<E> _stack;
 3   final int capacity;
 4   int _top;
 5
 6   Stack(this.capacity)
 7       : _top = -1,
 8         _stack = List<E>(capacity);
 9
10   bool get isEmpty => _top == -1;
11   bool get isFull => _top == capacity - 1;
12   int get size => _top + 1;
13
14   void push(E e) {
15     if (isFull) throw StackOverFlowException;
16     _stack[++_top] = e;
17   }
18
19   E pop() {
20     if (isEmpty) throw StackEmptyException;
21     return _stack[_top--];
22   }
23
24   E get top {
25     if (isEmpty) throw StackEmptyException;
26     return _stack[_top];
27   }
28 }
29
30 class StackOverFlowException implements Exception {
31   const StackOverFlowException();
32   String toString() => ‘StackOverFlowException‘;
33 }
34
35 class StackEmptyException implements Exception {
36   const StackEmptyException();
37   String toString() => ‘StackEmptyException‘;
38 }
39
40 void main() {
41   var stack = Stack<int>(10);
42   for (var i = 0; i < stack.capacity; i++) stack.push(i * i);
43   print(stack.top);
44
45   var sbuff = StringBuffer();
46   while (!stack.isEmpty) sbuff.write(‘${stack.pop()} ‘);
47   print(sbuff.toString());
48 }

原文地址:https://www.cnblogs.com/outerspace/p/10256667.html

时间: 2024-10-08 17:20:42

数据结构与算法之Stack(栈)——in dart的相关文章

JavaScript 数据结构与算法之美 - 栈内存与堆内存 、浅拷贝与深拷贝

前言 想写好前端,先练好内功. 栈内存与堆内存 .浅拷贝与深拷贝,可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 栈 定义 后进者先出,先进者后出,简称 后进先出(LIFO),这就是典型的栈结构. 新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底. 在栈里,新元素都靠近栈顶,旧元素都接近栈底. 从栈的操作特性来看,是一种 操作受限的线性表,只允许在

数据结构与算法JavaScript描述——栈

栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题. 栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现. 栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用. 1.对栈的操作: 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶. 栈被称为一种后入先出的数据结构. 由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问. 为了得到栈底的元素,必须先拿掉上面的元素. 对栈的两种主要操作是将一个元素压入栈和将一个

数据结构与算法JavaScript描述——栈的使用

有一些问题特别适合用栈来解决.本节就介绍几个这样的例子. 1) 数制间的相互转换 可以利用栈将一个数字从一种数制转换成另一种数制.假设想将数字n 转换为以b 为基数的数字,实现转换的算法如下. 使用栈,在JavaScript 中实现该算法就是小菜一碟.下面就是该函数的定义,可以将数字转化为二至九进制的数字: //============================使用Stack类==================================== /** * 1.数制间的相互转换 */

数据结构与算法的学习-栈

栈的学习 栈存储数据是先进后出的形式 用java语言来实现的话如下 package com.example;   import java.util.Stack;   /**  * @author ChenLang 模拟栈的先进后出等  */ public class StackDemo {          int[] stack;          int top;//表示栈顶            public StackDemo() {                    stack =

数据结构与算法之美——栈

如何理解栈? 我们平时放盘子的时候,都是从下往上一个一个放,取的时候是从上往下一个一个取,不能从中间抽出.后进者先出,这就是典型的“栈”结构.从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许从一端插入和删除. 事实上,从功能上看,数组或链表确实可以替代栈,并且操作上更加灵活,但是,在使用时就比较不可控,更容易出错. 当一个数据集合只涉及在一端的插入和删除操作,并且满足后进先出的特性,应该首选“栈”这种数据结构. 实现一个栈 栈主要包含两个操作:出栈和入栈.栈既可以用数组来实现(顺序栈)

前端数据结构与算法系列

数据结构与算法JavaScript版目录 数据结构与算法JavaScript (一) 栈 数据结构与算法JavaScript (二) 队列 数据结构与算法JavaScript (三) 链表

java数据结构与算法之栈(Stack)设计与实现

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53362993 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈设计与实现 ??本篇是jav

Java数据结构和算法之栈与队列

二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表. 栈的修改是按后进先出的原则进行. 每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除. 图1 [示例]元素是以a1,a2,-,a

Java数据结构与算法(第四章栈和队列)

本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构(链表.树等等)一样,都适用于数据应用中作数据记录. 然而,本章要讲解的是数据结构和算法更多的是作为程序员的工具来运用.它们组要作为构思算法的辅助工具,而不是完全的数据存储工具.这些数据结构的生命周期比那些数据库类型的结构要短的多.在程序操作执行期间它们才被创建,通常它们去执行某项特殊的任务,当完成之后,它们就被销毁. 受限访问 在数组中,只要知道下标就可以访问数据项.或顺