算法:数据结构

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)

 

以上是关于算法:数据结构的主要内容,如果未能解决你的问题,请参考以下文章

片段(Java) | 机试题+算法思路+考点+代码解析 2023

可以解密加密数据的片段吗?

如何标记从卷积神经网络的分割算法生成的图像片段?

从搜索文档中查找最小片段的算法?

C语言100个经典算法源码片段

一致性哈希算法PHP测试片段