Python数据结构与算法笔记(六):数据结构——列表和栈
数据结构介绍
存储一组有关系的数据
数据结构的分类:
树结构
图结构:
列表
列表存储与基本操作
数组:
开辟一定长度的内存,用来存储数据,里面是真实的值。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数据结构与算法笔记(六):数据结构——列表和栈相关推荐
- python 栈实现 加减乘除_数据结构与算法(六):基于栈实现简单的四则运算
栈,是一种操作受限的线性表,其操作规则为:后进者先出,先进者后出. 目录 题目需求: 给定一个字符串,形如"1+6*5/3-8",根据其内容,计算结果,此例结果为3. 解题思路: ...
- 数据结构与算法(六)-背包、栈和队列
前言:许多基础数据类型都和对象的集合有关.具体来说,数据类型的值就是一组对象的集合,所有操作都是关于添加.删除或是访问集合中的对象.而且有很多高级数据结构都是以这样的结构为基石创造出来的,在本文中,我 ...
- 【数据结构和算法笔记】:数据结构概述
数据结构包括数据的逻辑结构,数据的存储结构和数据的运算 逻辑结构包括线性结构和非线性结构(集合,线性结构,树形结构,图形结构) 线性结构:元素关系一对一,第一个节点没有前驱节点,其余每一个节点只有一个 ...
- 数据结构与算法笔记(十六)—— 二叉搜索树
一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...
- 数据结构与算法笔记(十五)—— 散列(哈希表)
一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...
- python的基本数据结构_Python学习笔记——基本数据结构
列表list List是python的一个内置动态数组对象,它的基本使用方式如下: shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I ...
- 数据结构与算法笔记(青岛大学王卓老师视频)
写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...
- 06_JavaScript数据结构与算法(六)单向链表
JavaScript 数据结构与算法(六)单向链表 认识链表 链表和数组 链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同. 数组 存储多个元素,数组(或列表)可能是最常用的 ...
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
- 数据结构与算法(六)- 单向链表的反转
数据结构与算法(六)- 单向链表的反转 一.头节点插入法 /*** 反转单向链表(头插法)** 1.先定义一个节点reverseHead = new HeroNode()* 2.从头到尾遍历原来的链表 ...
最新文章
- Datawhale浙大分享(附投票结果)
- golang切片传参
- mysql sail_MySQL使用小记
- 《当程序员的那些狗日日子》(三十四)人事变动
- android ble 连续读写,Android BLE实现对蓝牙的读写
- airplay2协议是什么_什么是AirPlay?
- Oracle数据库常用undo查询思路
- Redmi K40 Pro将首批搭载骁龙888:或刷新骁龙888最低售价
- ajax写删除程序,ajax处理程序删除标记
- 蓝桥杯 ADV-135 算法提高 三角形面积
- java两个和三个_H2DB和Java,大约两个小时的差异
- The application could not be installed: INSTALL_FAILED_INSUFFICIENT_STORAGE
- 使用CrossFTP跨越不同站点复制/移动数据
- FGSM实例:利用fgsm攻击RMB识别模型
- C++模板编程(18)---模板实例化instantiation
- ShaRF: Shape-conditioned Radiance Fields from a Single View
- 我们为什么需要 DAO 操作系统?
- iPhone8 和 iPhoneX 买哪个?听我的
- CLOSE_WAIT和TIME_WAIT
- P2504 [HAOI2006]聪明的猴子 题解