精华内容
下载资源
问答
  • 数据对象:和线性表一样,包含n个数据元素,这n个数据元素是同样性质的,元素的个数可以等于0,此时为空栈。 数据关系:还是前驱和后继的关系,ai-1是ai的前驱,ai是ai-1的后继。他们是一对序偶 an是表尾,叫做...

    栈Stack:

     

    数据对象:栈和线性表一样,包含n个数据元素,这n个数据元素是同样性质的,元素的个数可以等于0,此时栈为空栈。

    数据关系:还是前驱和后继的关系,ai-1是ai的前驱,ai是ai-1的后继。他们是一对序偶

    an是表尾,叫做栈顶,插入和删除都在栈顶完成

     

     

     

    展开全文
  • 数据结构与算法(3)–栈抽象数据类型及Python实现 1. 什么是栈? 是一种有次序的数据项集合,在栈中数据项的加入和移除都发生在同一端。一端叫做栈顶,另一端叫做栈底。 1.1. 特点 距离在栈底比较近的数据项,待的...
  • 的思维导图 代码实现 class Stack: ... @name: 数据结构: @param {type} @return: ''' def __init__(self): self.items=[] def push(self,item): ''' @name: 向里添加一个元...

    栈的思维导图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AOIWcw7D-1583305647532)(https://leanote.com/api/file/getImage?fileId=5e5f4f3dab64416298006104)]

    代码实现

    class Stack:
        '''
        @name: 数据结构:栈
        @param {type} 
        @return: 
        '''
        def __init__(self):
            self
    展开全文
  • (stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做的顶(top)。对的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者则是删除最后插入的元素。最后插入的元素可以通过...

    栈(stack)

      栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者则是删除最后插入的元素。最后插入的元素可以通过使用top例程在执行pop之前进行考察。对空栈进行的pop或top操作一般被认为是栈ADT中的一个错误。另一方面,当运行push时空间用尽是一个实现限制,但不是ADT错误。

      栈有时又叫做LIFO(后进先出)表。一般的模型是,存在某个元素位于栈顶,而该元素是唯一的可见元素。



    栈模型:只有栈顶元素是可访问的。


    栈的实现

      由于栈是一个表,因此任何实现表的方法都可以实现栈。栈操作是常数时间操作。


    栈的链表实现

      栈的第一种实现方法是使用单链表。通过在表的顶端插入来实现push,通过删除表顶端元素来实现pop。top操作只是考察表顶端元素并返回它的值。有时pop操作和top操作合二为一。


    栈的数组实现

      模仿ArrayList的add操作。与每个栈相关联的操作是theArray和topOfStack,对于空栈它是-1(这就是空栈初始化的做法)。为将某个元素x推入栈中,我们使topOfStack增1然后置theArray[topOfStack]=x。为了弹出栈元素,我们置返回值为theArray[topOfStack]然后使topOfStack减-1。

      注意,这些操作不仅以常数时间运行,而且是以非常快的常数时间运行。


    应用

    平衡符号

      例如:{}、[]符号等,有一个“{”符号就需要一个“}”符号与之对应。这个简单的算法用到一个栈,叙述如下:

      做一个空栈。读入字符直到文件结尾。如果字符是一个开放符号,则将其推入栈中。如果字符是一个封闭符号,则当栈空时报错。否则,将栈元素弹出。如果弹出的符号不是对应的开放符号,则报错。在文件结尾,如果栈非空则报错。很清楚,它是线性的,事实上它只需对输入进行一趟检验。因此,它是联机(on-line)的,是相当快的。当报错时决定如何处理需要做一些附加的工作--例如判断可能的原因。


    后缀表达式

      后缀(postfix)记法或逆波兰(reverse Polish)记法。计算一个后缀表达式花费的时间是o(N)。注意,当一个表达式以后缀记号给出时,没有必要知道任何优先的规则,这是一个明显的优点。


    中缀到后缀的转换

      标准形式的表达式(或叫做中缀表达式(infix))转换成后缀表达式。

      当读到一个操作数的时候,立即把它放到输出中。操作符不立即输出,从而必须先存放某个地方。正确的做法是将已经见到过但尚未放到输出中的操作符推入栈中。当遇到左圆括号时我们也要将其推入栈中。计算从一个空栈开始。

      如果见到一个一个右括号,那么就将栈元素弹出,将弹出的符号写出直到遇到一个(对应的)左括号,但是这个左括号只被弹出并不输出。

      如果我们见到任何其它的符号(+,*,(),那么我们从栈中弹出栈元素直到发现优先级更低的元素为止。有一个例外:除非是在处理一个)的时候,否则我们绝不从栈中移走(。对于这种操作,+的优先级最低,而(的优先级最高。当从栈弹出元素的工作完成后,我们再将操作符压人栈中。

      最后,如果读到输入的末尾,我们将栈元素弹出直到该栈变成空栈,将符号写到输出中。

      这个算法的想法是,当看到一个操作符的时候,把它放到栈中。栈代表挂起的操作符。然而,栈中有些具有高优先级的操作符现在知道当它们不再被挂起时要完成使用,应该被弹出。这样,在把当前操作符放入栈中之前,那些在栈中并在当前操作符之前要完成使用的操作符被弹出。

      当左括号是一个输入符号时我们可以把它看成是一个高优先级的操作符(使得挂起的操作符仍是挂起的),而当它在栈中时把它看成是低优先级的操作符(从而不会被操作符意外地删除)。右括号被处理成特殊的情况。

      

    例子:中缀表达式:a + b * c + ( d * e + f ) * g 转成后缀表达式:abc * + de * f + g * +



    方法调用

      当调用一个新方法时,主调例程的所有局部变量需要由系统存储起来,否则被调用的新方法将会重写由主调例程的变量所使用的内存。不仅如此,该主调例程的当前位置也必须要存储,以便在新方法运行完后知道向哪里转移。这些变量一般由编译器指派给机器的寄存器,但存在某些冲突(通常所有的方法都是获取指定给1号寄存器的某些变量),特别是涉及到递归的时候。该问题类似于平衡符号的原因在于,方法调用和方法返回基本上类似于开括号和闭括号。

     当存在方法调用的时候,需要存储的所有重要信息,诸如寄存器的值(对应变量的名字)和返回地址 (它可从程序计数器得到,一般情况是在一个寄存器中)等, 都要以抽象的方法存在“一张纸上”并被置于一个堆(pile)的顶部。然后控制转移到新方法,该方法自由地用它的一些值替代这些寄存器。如果它又进行其它的方法调用,那么它也遵循相同的过 程。当该方法要返回时,它查看堆顶部的那张“纸”并复原所有的寄存器,然后进行返回转移。

      显然,所有全部工作均可由一个栈来完成,而这正是在实现递归的每一种程序设计语言中实际发生的事实。所储存的信息或称为活动记录(activation record),或叫做帧栈(stack frame)

      在实际计算机中的栈常常是从内存分区的高端向下增长,而在许多非Java系统中是不检测溢出的。失控递归可能导致栈溢出。

      尾递归(tail recursion):涉及在最后一行的递归调用。尾递归可以通过将代码放到一个while循环中并用每个方法参数的一次赋值代替递归调用而被手工清除。

      递归总是能够被彻底去除(编译器是在转变成汇编语言时完成递归去除的),但是这么做是相当乏味冗长的。一般方法是要求使用一个栈,而且仅当你能够把最低限度的最小值放到栈上时这个方法才值得一用。

      


     

      

    展开全文
  • 抽象数据类型ADT

    千次阅读 2016-12-29 10:46:00
    对于来讲,理论上线性表的操作特性它都具备,可由于它的特殊性,所以针对它在操作上会有些变化。特别是插入和删除操作,我们改名为push和pop,英文直译的话是压和弹,更容易...抽象数据类型ADT定义如下:ADT

    转至:http://www.nowamagic.net/librarys/veda/detail/2270

    对于来讲,理论上线性表的操作特性它都具备,可由于它的特殊性,所以针对它在操作上会有些变化。特别是插入和删除操作,我们改名为push和pop,英文直译的话是压和弹,更容易理解。你就把它当成是弹夹的子弹压入和弹出就好记忆了,我们一般叫进栈和出栈。

    栈的抽象数据类型ADT定义如下:

    ADT 栈(stack)
    	Data
    	    同线性表。元素具有相同的类型,相邻元素具有前驱和后堆关系。
    	Operation
    	    InitStack ( *S ):初始化操作.建立一个空栈S。
    	    DestroyStack ( *S ):若栈存在,則销毁它。
    	    ClearStack (*S):将栈清空。
    	    StackEmpty ( S ):若栈为空,返回true,否則返回 false。
    	    GetTop (S,*e):若栈存在且非空,用e返回S的栈顶元素。
    	    Push (*S,e):若栈S存在,插入新元素e到栈S中并成为栈頂元素。
    	    Pop (*S,*e):删除栈S中栈顶元素,并用e返回其值。
    	    StackLength (S):返回回栈S的元素个数。
    	endADT


    展开全文
  • 4.0.0 定义抽象数据类型

    千次阅读 2018-03-12 09:59:56
    我们把允许插入和删除的一端称为栈顶 (top),另一端称为底 (bottom),不含任何数据元素的称为空栈。又称为后进先出 (Last In Filrst Out) 的线性表,简称 LlFO 结构 。 首先它是一个线性表,也就是说,...
  • 如何理解数据结构中的抽象数据类型

    万次阅读 多人点赞 2018-09-04 18:49:23
    抽象数据类型的标准格式 ADT 抽象数据类型名 { Data: 数据元素之间逻辑关系的定义;...抽象数据类型定义仅仅取决于它的一组逻辑特性,而与它在计算机中的表示和实现无关。 例如,int类型的数据表示的...
  • 数据结构(15)定义抽象定义

    千次阅读 2016-03-17 23:13:56
    从数据类型角度看,是与线性表大不相同的抽象数据类型栈定义栈(stack)又名堆栈,它是一种限定在表尾进行插入或删除操作的线性表。表尾被称为栈顶,相对地,把另一端称为底。 不含元素的空表称为空栈。 向一个...
  • 第11&12章 数据结构和抽象数据类型(Data Structure & Abstract Data Type) 教学目标通过本章的学习同学们应该能够:定义数据结构了解其分类抽象数据类型定义熟练掌握和队列的原理及应用广义表的定义及操作树与...
  • 抽象数据类型ADT(与队列)

    千次阅读 2018-06-04 19:38:28
    抽象数据类型 abstract data type,ADT:指只通过接口进行访问的数据类型,我们将那些使用ADT的程序叫做客户,将那些确定数据类型的程序叫做实现。数据的表示和实现操作函数都在接口的实现里面,和客户完全分离。接口...
  • 根据和队列的抽象数据类型定义,按要求实现一个或一个队列。 要求: 1、 实现一个共享 2、 实现一个链栈 3、 实现一个循环队列 4、 实现一个链队列
  • C语言实现抽象数据类型(ADT)

    千次阅读 多人点赞 2020-12-22 20:49:02
    C语言实现抽象数据类型(ADT)什么是抽象数据类型(ADT)C语言通过怎样的方式来实现ADT举例前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结学习目标:学习内容:学习时间:学习产出: 什么是抽象数据类型...
  • 三个【抽象数据类型抽象数据类型(ADT)一、列表 ADT1. 实现列表ADT的两种数据结构:数组(array-based)和链表(linked list)2. 链表的结构3. 操作:二、 ADT1. 插入和删除都在同一个地方(在top),First In ...
  • 人们在使用计算机解决客观世界中存在的具体问题时,通常过程如下:首先通过对客观世界的认知形成印象和概念从而得到了信息,在此基础上... 数据结构主要与在上述过程中从建立概念模型到实现模型转化并为后续程序设...
  • 2. 抽象数据类型;复习上次课内容;3. 的表示和实现;顺序的表示和实现;思考?的存储表示和操作的实现 ;说明1;说明2base;说明3;顺序中基本操作的实现 1 ;完整程序;顺序中基本操作的实现 2 ;顺序中基本...
  • python语言下抽象数据类型
  • C++抽象数据类型

    千次阅读 2016-06-28 16:50:37
    本文涉及到的知识点有:抽象数据类型(ADT),(stack),类定义等, 类很适合用于描述ADT,共有成员函数提供了ADT描述服务,而类的私有部分和类方法代码提供了实现,但这些实现对客户是隐藏的。 参考文献:C++...
  • 一种有次序的数据项集合,在中,数据项的加入和移除都仅发生在同一端 这一端叫“顶top”,另一端叫“底base” 日常生活中有很多的应用 装羽毛球的盒子 距离底越近的数据项,留在中的时间就越长 而最新...
  • 面向对象系统由一组交互的对象构成,每个对象都有自己的属性与行为,这些对象通过相互之间的信息传递实现系统...对象所属的类型被称为类,类是对于一组具有相同属性和行为的对象的抽象。本文初探C++的类和对象。  ...
  • 从基本数据类型到抽象数据类型

    千次阅读 2018-07-03 14:49:40
    在冯 · 诺依曼体系结构中,程序代码和数据都是以二进制存储的,因此,对计算机系统和硬件本身而言,数据类型的概念其实是不存在的。机器指令和汇编语言中,数据对象是用二进制数表示的,内存里存的都是二进制,对于...
  • (stack)是一种特殊的线性表,其插入和删除操作只允许在线性表的一端进行。 ... * 接口,描述抽象数据类型,泛型参数T表示数据元素的数据类型 */ public interface SStack<T>...
  • ADT使用通用的方式描述数据类型,而没有引入语言或实现细节 比如: 创建空栈 从栈顶添加数据 从栈顶删除数据 是否满 是否空 stack.h //stack.h -- 堆栈的类定义实现 #ifndef STACK_H_ #define STACK_H...
  • 实现链式和顺序定义,分别创建一个
  • //数据结构基本概念 ...数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型。如:int,float,char等等 数据项:一个数据元素由若干数据项组成 数据元素:组成数据对象的基本单位 数据对...
  • 队列(queue)是表。然而,使用队列时插入在一端进行而删除则在另一端进行。  队列模型 ...队列抽象模型: 队列的数组实现  如同的情形一样,对于队列而言任何的表的实现都是合法的。像一样,对于
  • 包含JWArray和JWList,分别包含顺序结构及链式结构的线性表、和队列操作,函数使用方便简单,可以作为简单的C语言线性表、和队列操作库。
  • 从四种基本的原子数据类型:整型、浮点型、字符型、枚举型,到三种构造类型:数组、结构体、指针,再到抽象数据类型:队列、、链表等等,逐渐构成程序设计的大厦。 为什么要学习数据结构? 这种逻辑方式有其合理...
  • #include<stdio.h> #include<malloc.h> #define MAXSIZE 100 typedef int DataType; typedef struct stack { DataType data[MAXSIZE];... sqstack *InitStack(sqstack *S)//顺序的初始化 { S->top=-1; r
  • 数据结构的实现数据结构的实现数据结构的实现数据结构的实现数据结构的实现
  • java中的基本数据类型和引用数据类型以及它们的存储方式堆内存和内存

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,542
精华内容 39,816
关键字:

栈的抽象数据类型定义