Python--数据结构

一、数据结构

相互之间具有一定联系的数据元素的集合

二、数据结构的存储方式

顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构。
链式存储结构:在每一个数据元素中增加一个存放另一个元素地址的指针,用该指针来表示数据元素之间的逻辑结构。

三、栈

(一)栈的基本概念

栈:是限制在表的一端进行插入和删除操作的线性表。又称为先进后出(FILO)或后进先出(LIFO)线性表
栈顶:允许进行插入、删除操作的一端,又称表尾。用栈顶指针来指向栈顶元素
栈底:是固定端,又称为表头
空栈:表中没有元素

(二)栈的应用

括号匹配
方式一:(比较麻烦)

class Stack():
    def __init__(self):
        self.top = -1
        self.sList = []
    def inStack(self, d):
        for x in d:
            if x == '(' or x == '[' or x == '{':
                self.sList.append(x)
                self.top += 1
            elif x == ')':
                z = self.sList[self.top]
                if z == '(':
                    print(z)
                    self.top -= 1
                else:
                    print('匹配失败')
                    break
            elif x == ']':
                z = self.sList[self.top]
                if z == '[':
                    print(z)
                    self.top -= 1
                else:
                    print('匹配失败')
                    break
            elif x == '}':
                z = self.sList[self.top]
                if z == '{':
                    print(z)
                    self.top -= 1
                else:
                    print('匹配失败')
                    break
        if self.top == -1:
            print('匹配成功')
            exit(0)
s = Stack()
while True:
    d = input('请输入:')
    s.inStack(d)

方式二:(大佬教的)

dict={'(':')','{':'}','[':']'}
class Stack():
    def __init__(self):
        self.top = -1
        self.sList = []
    def inStack(self, z):
        self.top += 1
        self.sList.append(z)
    def outStack(self, y):
        if dict[self.sList[self.top]] == y:
            del self.sList[self.top]
            self.top -= 1
        elif dict[self.sList[self.top]] != y:
            print('括号不匹配')
            exit()
    def pd(self, kh):
        if len(kh) % 2 == 1:
            print('匹配失败')
            exit()
        for i in range(len(kh)):
            if kh[i] in dict.keys():
                self.inStack(kh[i])
            else:
                self.outStack(kh[i])
        if self.top == -1:
            print('匹配成功')
kh = (input('请输入:'))
s = Stack()
s.pd(kh)

进制转换:

class Stack():
    def __init__(self):
        self.top = -1
        self.sList = []
    def inStack(self, data):
        self.top += 1
        self.sList.append(data)
    def outStack(self):
        if self.top == -1:
            return -1
        else:
            d = self.sList[self.top]
            del self.sList[self.top]
            self.top -= 1
            return d
    def length(self):
        return self.top+1
s = Stack()
d = int(input('请输入一个数:'))
while d > 0:
    ys = d % 2
    s.inStack(ys)
    d = d // 2
while s.length() > 0:
    print(s.outStack(), end='')

四、树

(一)树的定义

树是n(n>=0)个结点的有限集合T,若n=0,称为空树。
有且只有一个结点称为树的根结点。

(二)树的基本术语

1、结点:一个数据元素及其若干指向其子树的分支。
2、结点的度、树的度:结点锁拥有的子树的棵数称为结点的度。树中结点度的最大值称为树的度。
3、叶子结点:树中度为0的结点称为叶子结点。
4、孩子结点、双亲结点、兄弟结点:一个结点的子树的根称为该结点的孩子结点或子结点;相应的,该结点是其孩子结点的双亲结点或父结点。

(三)二叉树

先序遍历:根左右
中序遍历:左根右
后序遍历:左右根

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值