算法:数据结构
Posted neozheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法:数据结构相关的知识,希望对你有一定的参考价值。
数据结构:
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成
简单来说, 数据结构就是设计数据以何种方式组织度存储在计算机中
比如:列表、集合和字典等都是一种数据结构
“程序=数据结构+算法”
数据结构的分类:
数据结构按照逻辑结构可分为线性结构、树结构和图结构
线性结构:数据结构中的元素存在一对一的相互关系
树结构:数据结构中的元素存在一对多的相互关系
图结构:数据结构中的元素存在多对多的相互关系
另外,32位机器上,一个整数占4个字节(4*8bit=32),一个地址也占4个字节
栈:
栈(Stack)是一个数据集合,可以理解为只能在一端进行插入或删除操作的列表
栈的特点:后进先出(last-in,first-out) 栈的概念:栈顶(表尾;最后一个元素),栈底(表头;0号元素) 栈的基本操作: 进栈(压栈):push 出栈:pop 取栈顶(只查看栈顶的值,但不把栈顶删除): gettop 使用一般的列表结构即可实现栈
栈的应用 -- 括号匹配问题:
括号匹配问题:给一个字符串,其中包含小括号、中括号、大括号,求该字符串中的括号是否匹配 如: ()[]{} # 匹配 ([{()}]) # 匹配 []( # 不匹配 [(]) # 不匹配
示例代码:
class BracketError(BaseException): def __init__(self,msg): super(BracketError,self).__init__() self.msg = msg def __str__(self): return "<%s>" %self.msg class Stack(object): """实现栈的类""" def __init__(self): self.stack = [] def push(self,ele): self.stack.append(ele) def pop(self): if len(self.stack) == 0: return None return self.stack.pop() def get_top(self): if len(self.stack) == 0: return None return self.stack[-1] def is_empty(self): return len(self.stack) == 0 # 返回的是一个Bool值 # 栈的应用:括号匹配问题 def bracket_match(s): stack = Stack() match_dict = { ")":"(", "]":"[", "}":"{" } for char in s: if char in ["(","[","{"]: # char 为左括号 stack.push(char) # 左括号放到 栈 里面 else: # char 为右括号 if stack.is_empty(): raise BracketError("%s expected"%match_dict[char]) left_bracket = stack.get_top() if match_dict[char] != left_bracket: raise BracketError("%s not match"%char) else: stack.pop() if not stack.is_empty(): raise BracketError("lacking corresponding right brackets") s = "}[]()" bracket_match(s)
以上是关于算法:数据结构的主要内容,如果未能解决你的问题,请参考以下文章