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

yizhihongxing

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日

相关文章

  • 使用python实现ANN

    以下是关于“使用Python实现ANN”的完整攻略: 简介 人工神经网络(Artificial Neural Network,ANN)是一种模拟人脑神经元之间相互作用的计算模型,它可以用于分类、回归和聚类等任务。在本教程中,我们将介绍如何使用Python实现ANN,并提供两个示例说明。 实现ANN 以下是使用Python实现ANN的代码: import nu…

    python 2023年5月14日
    00
  • Python数据结构与算法中的队列详解(1)

    Python数据结构与算法中的队列详解(1) 队列是一种常见的数据结构,它遵循先进先出(FIFO)的原则。在Python中,我们可以使用列表来实现队列。本文将介绍队列的基本概念、实现方式和常见操作。 队列的基本概念 队列是一种线性数据结构,它支持两个基本操作:入队和出队。入队操作将一个元素添加到队列的末尾,出队操作将队列的第一个元素删除并返回。队列的另一个重…

    python 2023年5月14日
    00
  • Python堆排序原理与实现方法详解

    Python堆排序原理与实现方法详解 堆排序是一种高效的排序算法,它利用堆的数据结构来实现排序。在Python中,我们可以使用heap模块来实现堆排序。本文将详细讲解Python堆排序的原理和实现方法,包括堆的定义、堆排序算法和例说明等。 堆的定义 在排序中,我们需要使用堆的数据结构。堆是一种完全二叉树,它满足以下两条件: 父节点的值大于或等于子节点的值(大…

    python 2023年5月14日
    00
  • kNN算法python实现和简单数字识别的方法

    下面是详细讲解“kNN算法python实现和简单数字识别的方法”的完整攻略,包括算法原理、Python实现和两个示例说明。 算法原理 kNN算法是一种用的分类算法,其基本思想是通过计算待分类样本与训练集中各个样本的距离,选取距离最近的k个样本,根据这k个样本的类别进行投票,将待分类样本归为票数最多类别。具体步骤如下: 计算待分类样本与训练集中各个样本的距离;…

    python 2023年5月14日
    00
  • python实现感知器算法详解

    下面是关于“Python实现感知器算法详解”的完整攻略。 1. 感知器算法理论基础 感知器算法是一种二分类算法,它可以用来将数据分为两类。感知器法的基本思想是,将输入数据通过一个线性函数进行加权求和,然后通过一个阈值函数进行分类。感知器算法训练过是通过不断调整权重和阈值来实现的,以达到最优的分类效果。 2. Python实现 下是使用Python实现感知器算…

    python 2023年5月13日
    00
  • 使用Python进行数独求解详解(二)

    使用Python进行数独求解详解(二) 本文将继续介绍如何使用Python进行数独求解。我们将介绍如何使用回溯算法和剪枝技巧来提高求解效率。同时,我们提供两个示例,分别演如何使用Python求解简单和困难的数独谜题。 回溯算法和剪枝技巧 回溯算法是一种通过尝试所有可能的解来求解问题的算法。在数独求解中,回溯算法可以通过递归地尝试每个空格的可能来求解数独谜题。…

    python 2023年5月14日
    00
  • Java数据结构之队列(动力节点Java学院整理)

    Java数据结构之队列(动力节点Java学院整理) 队列是一种有序列表,在其中所有插入操作必须在后端进行,而所有的删除操作必须在前端进行的数据结构。这种结构有时被称为先进先出(FIFO)。 队列的分类 普通队列:队列和栈一样,都是只能在一端进行插入操作,在另一端进行删除操作的特殊线性表。队列的特点是:先进先出。适用于数据必须按照插入顺序处理的必要场合。 双端…

    数据结构 2023年5月17日
    00
  • java数据结构和算法中哈希表知识点详解

    Java数据结构和算法中哈希表知识点详解 什么是哈希表 哈希表是一种以键值对(key-value)形式存储数据的数据结构,通过使用哈希函数将对应的键映射为一个索引,使得数据的添加、删除、查找等操作可以在常数时间内完成。 具体来讲,哈希表主要包含以下几个部分: 哈希函数:将键转换为一个索引,通常使用散列算法实现。 数组:用于存储哈希表的元素(键值对)。 冲突解…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部