数据结构介绍

存储一组有关系的数据

数据结构的分类:

树结构

图结构:

列表

列表存储与基本操作

数组:
开辟一定长度的内存,用来存储数据,里面是真实的值。32位机器上,一个整数占4字节。假设第一个数的地址是100,那么后面的数的地址也就确定了。

要查找数组中的第三个元素。a[2],直接查找地址为108的即可。

数组与列表有两点不同:

  • 数组元素类型要相同
  • 数组长度固定

存储问题:
pytohn列表内存的是地址,具体的值存在另外的内存上。一个地址占4个字节。这样解决了类型不同的数据可以存在一起的问题。python的列表自动开辟多一些的空间。

如何查找:
同上。

查找,增加的时间复杂度:O(1)
插入,删除所有元素都要串位,时间复杂度为O(n)。pop()不用,直接删除最后一个O(1)。

python里a=1,a的位置指向200号内存;b=1,b的位置指向200号内存;b=2,b的位置指向305号内存.


比如,只能在上面放一本书,或是抽走一本书。不能再中间进行操作。

取栈顶:看一下栈顶元素是什么,但不取走。

class Stack:def __init__(self):self.stack = []def push(self,element):self.stack.append(element)def pop(self):return self.stack.pop()def get_top(self):if len(self.stack) > 0:return self.stack[-1]else:return None
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.pop())
3

栈的应用:括号匹配问题

# 如果字符串s为如下格式:
s=()[]{()[]}
利用栈的进栈出栈来看是否匹配。
(:进栈
遇到),二者匹配,则出栈,此时列表内无元素。
按照这个规则,遍历所有元素后,若为空列表(空栈),则说明该字符串匹配。
class Stack:def __init__(self):self.stack = []def push(self,element):self.stack.append(element)def pop(self):return self.stack.pop()def get_top(self):if len(self.stack) > 0:return self.stack[-1]else:return Nonedef is_empty(self):return len(self.stack) == 0def brace_match(s):match = {'}':'{',']':'[',')':'('}stack = Stack()for ch in s:if ch in {'(','[','{'}:stack.push(ch)else:  # ch in  {')',']','{'}if stack.is_empty():return Falseelif stack.get_top() == match[ch]:stack.pop()else: # stack.get_top() != match[ch]return Falseif stack.is_empty():return Trueelse:return False
print(brace_match('[{())}](([]))'))
False
print(brace_match('[({([[({})]])})]'))
True

Python数据结构与算法笔记(六):数据结构——列表和栈相关推荐

  1. python 栈实现 加减乘除_数据结构与算法(六):基于栈实现简单的四则运算

    栈,是一种操作受限的线性表,其操作规则为:后进者先出,先进者后出. 目录 题目需求: 给定一个字符串,形如"1+6*5/3-8",根据其内容,计算结果,此例结果为3. 解题思路: ...

  2. 数据结构与算法(六)-背包、栈和队列

    前言:许多基础数据类型都和对象的集合有关.具体来说,数据类型的值就是一组对象的集合,所有操作都是关于添加.删除或是访问集合中的对象.而且有很多高级数据结构都是以这样的结构为基石创造出来的,在本文中,我 ...

  3. 【数据结构和算法笔记】:数据结构概述

    数据结构包括数据的逻辑结构,数据的存储结构和数据的运算 逻辑结构包括线性结构和非线性结构(集合,线性结构,树形结构,图形结构) 线性结构:元素关系一对一,第一个节点没有前驱节点,其余每一个节点只有一个 ...

  4. 数据结构与算法笔记(十六)—— 二叉搜索树

    一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...

  5. 数据结构与算法笔记(十五)—— 散列(哈希表)

    一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...

  6. python的基本数据结构_Python学习笔记——基本数据结构

    列表list List是python的一个内置动态数组对象,它的基本使用方式如下: shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I ...

  7. 数据结构与算法笔记(青岛大学王卓老师视频)

    写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...

  8. 06_JavaScript数据结构与算法(六)单向链表

    JavaScript 数据结构与算法(六)单向链表 认识链表 链表和数组 链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同. 数组 存储多个元素,数组(或列表)可能是最常用的 ...

  9. 数据结构与算法笔记 - 绪论

    数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...

  10. 数据结构与算法(六)- 单向链表的反转

    数据结构与算法(六)- 单向链表的反转 一.头节点插入法 /*** 反转单向链表(头插法)** 1.先定义一个节点reverseHead = new HeroNode()* 2.从头到尾遍历原来的链表 ...

最新文章

  1. Datawhale浙大分享(附投票结果)
  2. golang切片传参
  3. mysql sail_MySQL使用小记
  4. 《当程序员的那些狗日日子》(三十四)人事变动
  5. android ble 连续读写,Android BLE实现对蓝牙的读写
  6. airplay2协议是什么_什么是AirPlay?
  7. Oracle数据库常用undo查询思路
  8. Redmi K40 Pro将首批搭载骁龙888:或刷新骁龙888最低售价
  9. ajax写删除程序,ajax处理程序删除标记
  10. 蓝桥杯 ADV-135 算法提高 三角形面积
  11. java两个和三个_H2DB和Java,大约两个小时的差异
  12. The application could not be installed: INSTALL_FAILED_INSUFFICIENT_STORAGE
  13. 使用CrossFTP跨越不同站点复制/移动数据
  14. FGSM实例:利用fgsm攻击RMB识别模型
  15. C++模板编程(18)---模板实例化instantiation
  16. ShaRF: Shape-conditioned Radiance Fields from a Single View
  17. 我们为什么需要 DAO 操作系统?
  18. iPhone8 和 iPhoneX 买哪个?听我的
  19. CLOSE_WAIT和TIME_WAIT
  20. P2504 [HAOI2006]聪明的猴子 题解

热门文章

  1. linux命令行 正则,Linux shell基础(四)正则表达式与grep命令 beta
  2. docker 进入容器
  3. linux内核镜像的分层,Docker镜像分层的原理详解
  4. VMware Sphere 虚拟磁盘创建选项
  5. CentOS8设置桥接网络模式,并配置静态IP及外网访问
  6. 基于jQuery的窗口插件:jMessageBox
  7. java 异常总结_Java异常的十大问题总结
  8. Go语言中使用panic和recover简化错误处理
  9. PhoneGap跨平台移动应用开发框架体验
  10. 使用iframe实现在pc端预览移动端页面的效果