python 数据结构

堆栈

其实pyhton的list数据类型就带有堆栈属性,那么我们直接封装成类

class Stack(object):

    __data = []

    def __init__(self):
        pass

    def push(self, data):
        self.__data.append(data)

    def pop(self):
        if self.__data:
            return self.__data.pop()
>>> from data_structure import Stack
>>> a=Stack()
>>> a.push(1)
>>> a.push(2)
>>> a.push(3)
>>> a.pop()
3
>>> a.pop()
2
>>> a.pop()
1
>>> a.pop()

链表

单链表

class SingleLink(object):
   
   def __init__(self, data, next=None):
       self.data = data
       self.next = next

if __name__ == "__main__":
   print("python 数据链表结构基本实现")
   print("构造一个链")
   head = None
   for i in range(5):
       link = SingleLink(i, head)
       head = link

   print("遍历一个链")

   while link:
       print(link.data)
       link = link.next
~/Desktop/desktop » python3 data_structure.py                                                                                tme@localhost
python 数据链表结构基本实现
构造一个链
遍历一个链
4
3
2
1
0
# 根据nums生成一个顺序链表
def make_link(nums):
    head = None
    last_link = None
    for num in nums:
        this_link = SingleLink(num)
        if last_link == None:
            head = this_link
        else:
            last_link.next = this_link
        last_link = this_link
    return head
link = make_link([1,2,4,5,6])
# 遍历链表
while link:
  print(link.data):
  link = link.next

# 删除数据为4的节点
last_link = None
while link:
  if link.data == 4:
    if last_link:
      last_link.next = link.next
  link = link.next
# 在数据2后面插入值为3的节点

满二叉树

除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。

完全二叉树

去除最后最后一层之后是满二叉树,且叶子节点如果只有一个靠左挂载的树称为完全二叉树。

二叉搜索树

每个节点的左子节点比自己小,右节点不小于自己的树称为二叉搜索树。
二叉搜索树中序遍历出来的结果即是所有数据排序结果

class Tree:
    """搜索二叉树"""
    data = None
    left = None
    right = None

    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
      
    def add(self, data):
        if self.data > data:
            if self.left is None:
                self.left = Tree(data)
            else:
                self.left.add(data)
        if self.data <= data:
            if self.right is None:
                self.right = Tree(data)
            else:
                self.right.add(data)
                
    def find(self, data):
        if self.data == data:
            return True
        elif self.data > data:
            if self.left:
                return self.left.find(data)
            else:
                return False
        else:
            if self.right:
                return self.right.find(data)
            else:
                return False
def preorder(tree):
    # 前序遍历
    list_data = []
    def fun(t):
        if t:
            list_data.append(t.data)
            fun(t.left)
            fun(t.right)
    fun(tree)
    return list_data

def inorder(tree):
    # 中序遍历
    list_data = []
    def fun(t):
        if t:
            fun(t.left)
            list_data.append(t.data)
            fun(t.right)
    fun(tree)
    return list_data

def postorder(tree):
    # 后续遍历
    list_data = []
    def fun(t):
        if t:
            fun(t.left)
            fun(t.right)
            list_data.append(t.data)
    fun(tree)
    return list_data

红黑树

在二叉搜索树的情况下,满足一下几点
1、根节点为黑色
2、红色节点不相邻
3、所有路径上的黑色节点都一样多

跳表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,037评论 1 32
  • 2018.09.18日 星期二 天气多云转雨 秋天的温度,让人很舒服,略微有些凉,精神更清爽。 晚饭后,女儿在看书...
    如烟_f580阅读 691评论 3 7
  • 三木是个安静的女生,她从小到大都是文静的乖乖女,直到工作也是那么默默不做声的对着电脑干着活。那时是热阳高照的8月,...
    云端雾里sasa阅读 446评论 2 2