数据结构-2

栈是链表的约束版本

新节点只能在栈顶插入和删除
后进先出的数据结构
最后一个节点设为None,表面是栈底
push和pop方法分别向栈添加和删除一个节点

实现分2个文件,测试采用1个文件

ListModule.py实现链表

  1 # ListModule.py
  2 # Classes List and Node definitions.
  3
  4 class Node:
  5    """Single node in a data structure"""
  6
  7    def __init__( self, data ):
  8       """Node constructor"""
  9
 10       self._data = data
 11       self._nextNode = None
 12
 13    def __str__( self ):
 14       """Node data representation"""
 15
 16       return str( self._data )
 17
 18 class List:
 19    """Linked list"""
 20
 21    def __init__( self ):
 22       """List constructor"""
 23
 24       self._firstNode = None
 25       self._lastNode = None
 26
 27    def __str__( self ):
 28       """List string representation"""
 29
 30       if self.isEmpty():
 31          return "empty"
 32
 33       currentNode = self._firstNode
 34       output = []
 35
 36       while currentNode is not None:
 37          output.append( str( currentNode._data ) )
 38          currentNode = currentNode._nextNode
 39
 40       return " ".join( output )
 41
 42    def insertAtFront( self, value ):
 43       """Insert node at front of list"""
 44
 45       newNode = Node( value )
 46
 47       if self.isEmpty():  # List is empty
 48          self._firstNode = self._lastNode = newNode
 49       else:   # List is not empty
 50          newNode._nextNode = self._firstNode
 51          self._firstNode = newNode
 52
 53    def insertAtBack( self, value ):
 54       """Insert node at back of list"""
 55
 56       newNode = Node( value )
 57
 58       if self.isEmpty():  # List is empty
 59          self._firstNode = self._lastNode = newNode
 60       else:  # List is not empty
 61          self._lastNode._nextNode =  newNode
 62          self._lastNode = newNode
 63
 64    def removeFromFront( self ):
 65       """Delete node from front of list"""
 66
 67       if self.isEmpty():  # raise exception on empty list
 68          raise IndexError, "remove from empty list"
 69
 70       tempNode = self._firstNode
 71
 72       if self._firstNode is self._lastNode:  # one node in list
 73          self._firstNode = self._lastNode = None
 74       else:
 75          self._firstNode = self._firstNode._nextNode
 76
 77       return tempNode
 78
 79    def removeFromBack( self ):
 80       """Delete node from back of list"""
 81
 82       if self.isEmpty():  # raise exception on empty list
 83          raise IndexError, "remove from empty list"
 84
 85       tempNode = self._lastNode
 86
 87       if self._firstNode is self._lastNode:  # one node in list
 88          self._firstNode = self._lastNode = None
 89       else:
 90          currentNode = self._firstNode
 91
 92          # locate second-to-last node
 93          while currentNode._nextNode is not self._lastNode:
 94                currentNode = currentNode._nextNode
 95
 96          currentNode._nextNode = None
 97          self._lastNode = currentNode
 98
 99       return tempNode
100
101    def isEmpty( self ):
102       """Returns true if List is empty"""
103
104       return self._firstNode is None

StackModule.py 为栈的实现

 1 # StackModule.py
 2 # Class Stack definition
 3
 4 from ListModule import List
 5
 6 class Stack( List ):
 7     """ Stack composed from linked list """
 8
 9     def __init__( self ):
10         """ Stack constructor """
11
12         self._stackList = List()
13
14     def __str__(self):
15         """
16          Stack string representation
17         """
18
19         return str( self._stackList )
20
21     def push( self,element ):
22         """
23          push data onto stack
24         """
25         self._stackList.insertAtFront( element )
26
27     def pop( self ):
28         """
29         pop data from stack
30         """
31
32         return self._stackList.removeFromFront()
33
34     def isEmpty( self ):
35         """
36         Return 1 if Stack is empty
37         """
38
39         return self._stackList.isEmpty()

测试文件testStack.py

 1 # testStack.py
 2 # Driver to test class Stack
 3
 4 from StackModule import Stack
 5
 6 stack = Stack()
 7
 8 print "Processing a stack"
 9
10 for i in range( 4 ):
11     stack.push( i )
12     print "The stack is ",stack
13
14 while not stack.isEmpty():
15     pop = stack.pop()
16     print pop,"popped from stack"
17     print "The stack is: ", stack

数据结构-2,布布扣,bubuko.com

时间: 2024-10-10 21:11:29

数据结构-2的相关文章

【数据结构】之散列链表(Java语言描述)

散列链表,在JDK中的API实现是 HashMap 类. 为什么HashMap被称为"散列链表"?这与HashMap的内部存储结构有关.下面将根据源码进行分析. 首先要说的是,HashMap中维护着的是一个数组: transient Node<K,V>[] table; ,数组中的每个元素都是一个 Node 对象.这里的Node是HashMap的一个内部类,代码如下: static class Node<K,V> implements Map.Entry<

旧题新做:从idy的视角看数据结构

“今天你不写总结……!!!” 额…… 还是讲我的吧.这些考试都是idy出的题. 20170121:DFS序. ST表.线段树练习 这是第一次考数据结构. Problem 1. setsum 1 second 给你一个长度为N 的整数序列,支持两种操作: • modity l r val 将区间[l,r] 中的所有数修改为val • query l r 询问区间[l,r] 所有数的和 分析:最简单的线段树,区间更改区间求和.但注意是更改,不是添改,sum与flag需同时覆盖. Problem 2.

数据结构Set和Map

一.数据结构 Set 集合的基本概念:集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,应用在计算机的数据结构中.  特点:key 和 value 相同,没有重复的 value.ES6 提供了数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. 1. 如何创建一个 Set const s = new Set([1, 2, 3]); 2.属性 console.log(s.size); // 3 3.Set 类的方法 --set.add(v

数据结构基本概念

什么是数据结构 "数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系.这些联系可以通过定义相关的函数来给出"--Sartaj Sahni,<数据结构.算法与应用> "数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现."--Clifford A.Shaffer,<数据结构与算法分析> "数据结构(data structture)是计算机中存储.组织数据的方式.通常情况下,经i想你

分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令

Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sorted Set. Redis数据类型内存结构分析 Redis内部使用一个redisObject对象来表示所有的key和value.redisObject主要的信息包括数据类型(type).编码方式(encoding).数据指针(ptr).虚拟内存(vm)等.type代表一个value对象具体是何种数

【Python&amp;数据结构】 抽象数据类型 Python类机制和异常

这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Python编程,借着本次机会仔细学习一下. 抽象数据类型 最开始的计算机语言,关注的都是如何更加有效率地计算,可以说其目的是计算层面的抽象.然而随着这个行业的不断发展,计算机不仅仅用于计算,开发也不仅只关注计算过程了,数据层面的抽象也变得同样重要.虽然计算机语言一开始就有对数据的抽象,但是那些都只是对一些最基本的

深入浅出分析MySQL索引设计背后的数据结构

在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从而可以帮你释疑如下问题: 1.为什么innodb表需要主键? 2.为什么建议innodb表主键是单调递增? 3.为什么不建议innodb表主键设置过长? B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.B通常

数据类型和常用数据结构

1.数据类型 几乎是所有的程序设计语言都会讲到数据类型的概念.简单的说,数据类型就是一个值的集合及在这些值上定义的一系列操作的总称.例如:对于C语言的整数类型,其有一定的取值范围,对于整数类型还定义了加法.减法.乘法.除法和取模运算等操作. 按照数据类型的值是否可以分解,数据类型可以分为基本数据类型和聚合数据类型. *基本数据类型:其值不能进一步分解,一般是程序设计语言自身定义的一些数据类型,例如C语言中.字符型.浮点型等. *聚合数据类型:其值可以进一步分解为若干分量,一般是用户自定义的数据类

第3章 文件I/O(3)_内核数据结构、原子操作

3. 文件I/O的内核数据结构 (1) 内核数据结构表 数据结构 主要成员 文件描述符表 ①文件描述符标志 ②文件表项指针 文件表项 ①文件状态标志(读.写.追加.同步和非阻塞等状态标志) ②当前文件偏移量 ③i节点表项指针 ④引用计数器 i节点 ①文件类型和对该文件的操作函数指针 ②当前文件长度 ③文件所有者 ④文件所在设备.文件访问权限 ⑤指向文件数据在磁盘块上所在位置的指针等. (2)3张表的关系 4. 文件的原子操作 (1)文件追加 ①打开文件时使用O_APPEND标志,进程对文件偏移量

数据结构与算法C++描述学习笔记1、辗转相除——欧几里得算法

前面学了一个星期的C++,以前阅读C++代码有些困难,现在好一些了.做了一些NOI的题目,这也是一个长期的目标中的一环.做到动态规划的相关题目时发现很多问题思考不通透,所以开始系统学习.学习的第一本是<数据结构与算法C++描述>第三版,边学边做一些笔记.所以这些笔记中的代码有很多将会非常简单,甚至可能只有一个记录或者结论. 辗转相除法用来求两个整数的最大公约数,即能同时整除两个数的最大整数.程序如下: int gdc(int m,int n){ int rem; while(n!=0){ //