手动实现数据结构-栈结构

1.栈结构

  • 是一种受限的线性结构。

  • 特点:先进后出

2.使用TS实现

 1 //封装一个栈  使用泛型类
 2 class ArrayStack<T=any>{//给一个默认值为any类型
 3 //定义一个数组,用于存储元素
 4 private data:T[]=[]
 5 //push:将元素压入栈中
 6 push(e:T):void{
 7   this.data.push(e)
 8 }
 9 //pop方法:将栈顶的元素弹出栈(返回出去并从栈顶移除)   
10 pop():T|undefined{
11   return this.data.pop()//pop返回的是删除的元素
12 }
13 //peek方法:看一眼栈顶元素
14 peek():T|undefined{
15   return this.data[this.data.length-1]
16 }
17 //isEmpty
18 isEmpty():boolean{
19   return this.data.length===0
20 }
21 size():number{
22   return this.data.length
23 }
24 }

 

3.使用JS实现

 1 // 栈类
 2     function Stack() {
 3         // 栈中的属性
 4         var items = []
 5 
 6         // 栈相关的方法
 7         // 压栈操作
 8         this.push = function (element) {
 9             items.push(element)
10         }
11         // 出栈操作
12         this.pop = function () {
13             return items.pop()
14         }
15         // peek操作
16         this.peek = function () {
17             return items[items.length - 1]
18         }
19         // 判断栈中的元素是否为空
20         this.isEmpty = function () {
21             return items.length == 0
22         }
23         // 获取栈中元素的个数
24         this.size = function () {
25             return items.length
26         }
27     }

 

4.相关题目

4.1 十进制转二进制

 1 function decToBinary(decimal:number):string{
 2   let stack=new ArrayStack<number>()
 3   
 4   //while:不知道循环次数,知道循环终止条件。for:知道循环次数
 5   while(decimal>0){
 6     let result=decimal%2
 7     stack.push(result)
 8     decimal=Math.floor(decimal/2)
 9   }
10   let str=''
11   while(!stack.isEmpty()){
12     str+=stack.pop()
13   }
14   return str
15 }

 

4.2有效的括号

 1 function isVaild(str:string):boolean{
 2   //创建一个栈结构 用于把存放右括号
 3   let stack=new ArrayStack()
 4   //遍历字符串中每一个字符,当遇到一个左括号就往栈里面添加对应的右括号。当遇到右括号时,就能让它与栈弹出的元素(刚添加进去的)比较,如果不相等,就说明没有成对出现。重要的就是一一对应(相应的左括号对应相应的右括号)。
 5   for(let i=0;i<str.length;i++){
 6     let item=str[i]
 7     switch(item){
 8       case '(':
 9         stack.push(')')
10         break;
11       case '{':
12         stack.push('}')
13         break;
14       case '[':
15         stack.push(']')
16         break;
17       default:
18         if(item!==stack.pop())return false
19         break;
20     }
21   }
22   //只有栈为空的时候,表明括号既一一对应又是双数
23   return stack.isEmpty()
24 
25 }

 

原文链接:https://www.cnblogs.com/mmya/p/17323313.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手动实现数据结构-栈结构 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • c语言实现单链表算法示例分享

    下面是详细的攻略。 C语言实现单链表算法示例分享 什么是单链表 单链表是一种数据结构,它由一个个节点组成,每个节点包含两个部分:一个是数据部分,另一个是指针部分,指针部分指向下一个节点的位置。单链表的节点是动态分配的,可以随时插入、删除,是一种非常灵活的数据结构。 为什么要使用单链表 在进行一些操作时,数组或者普通的指针会遇到很多麻烦。比如在删除数组元素时,…

    数据结构 2023年5月17日
    00
  • 详解弗洛伊德算法原理与使用方法

    弗洛伊德算法 弗洛伊德算法,也称为Floyd-Warshall算法,是一种用于解决有权图中所有顶点之间最短路径问题的动态规划算法。该算法时间复杂度为O(n^3),其中n为图中顶点数。 算法作用 弗洛伊德算法可以用于计算有向图或无向图中的所有节点对之间的最短路径,同时还能够处理负权边的情况。 算法实现 该算法使用一个n * n的矩阵dist来保存任意两个顶点之…

    算法 2023年3月27日
    00
  • Redis数据结构之链表与字典的使用

    Redis是一个开源、基于内存的数据结构存储系统。Redis支持多种数据类型,包括字符串、整数、浮点数、列表、哈希表、集合、有序集合等。本文将详细介绍Redis数据结构之链表与字典的使用。 链表 链表是Redis中常用的数据结构之一,主要用于存储有序的元素列表。链表中的每个元素都包含了一个指向前驱元素和后继元素的指针,这种结构可以方便地实现链表的插入、删除和…

    数据结构 2023年5月17日
    00
  • python数据结构之图深度优先和广度优先实例详解

    下面是详细讲解“Python数据结构之图深度优先和广度优先实例详解”的完整攻略。 1. 什么是图? 图是由节点和边组成的一种数据结构。节点表示图中的元素,边表示节点之间的关系。图可以用来解决各种实际问题,如社交网络、地图等。 2. Python实现图的深度优先和广度优先遍历 2.1 深度优先遍历 下面是Python实现图的深度优先遍历的示例: def dfs…

    python 2023年5月14日
    00
  • C语言超详细讲解数据结构中的线性表

    C语言超详细讲解数据结构中的线性表完整攻略 线性表的概念和基本操作 线性表是指由同类型的数据元素构成的有限序列。即每个数据元素只有一个前驱和一个后继。线性表通常用于表示一维数组、列表、队列等数据结构。 线性表的基本操作包括: 初始化操作:创建一个空的线性表。 插入操作:在线性表中插入一个元素。 删除操作:删除线性表中的一个元素。 查找操作:查找线性表中是否存…

    数据结构 2023年5月17日
    00
  • 详解Python编程中基本的数学计算使用

    下面是详细讲解“详解Python编程中基本的数学计算使用”的完整攻略。 Python编程中基本的数学计算使用 Python是一种强大的编程语言,提供了丰富数学算操作。下面介绍Python编中基本的数学计算使用。 加法、减法、乘法和除法 加法、减法乘法和除法是Python中最基本的数学计算操作,可以使用加号、减号、乘号和除号来实现。 下面是一个Python实现…

    python 2023年5月14日
    00
  • python实现随机梯度下降法

    下面是详细讲解“Python实现随机梯度下降法”的完整攻略。 随机梯度下降法 随机梯度下降法(Stochastic Gradient Descent,SGD)是一种常用的优化算法,用于训练机器学习模型。该算法的核心思想是通过迭代更新模型,使得损失函数最小化。 下面是一个Python实现随机梯度下降法的示例: import numpy as np def sg…

    python 2023年5月14日
    00
  • python人工智能算法之人工神经网络

    Python人工智能算法之人工神经网络 人工神经网络是一种常用的机器学习算法,它可以用于分类、回归和聚类等问题。本文将细介绍Python中人工神经网络的流,包括数据预处理、模型构建和模型训练等步骤。 1.预处理 在使用人工神经网络算法之前,需要对数据进行预处理。具体来说,需要进行以下步骤: 1. 数据清洗 数据清洗是指对数据去重、缺失值处理、异常值处理等操作…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部