专栏首页翻译scikit-learn Cookbook数据结构学习-python实现02--0402
原创

数据结构学习-python实现02--0402

今日继续进行了队列及单链表的学习。

一、队列,先进先出的有序结构。基础代码如下:

# 基本队列的代码
class Queue:
    def __init__(self):
        self.items = []
        
    def isEmpty(self):
        return self.items == []
    
    def enqueue(self, item):
        self.items.insert(0, item)
        
    def dequeue(self):
        return self.items.pop()
    
    def size(self):
        return len(self.items)
        

# 双端队列
class Deque:
    def __init__(self):
        self.items = []
        
    def isEmpty(self):
        return self.items == []
    
    def addFront(self, item):
        self.items.append(item)
        
    def addRear(self, item):
        self.items.insert(0, item)
        
    def removeFront(self):
        return self.items.pop()
    
    def removeRear(self):
        return self.items.pop(0)
    
    def size(self):
        return len(self.items)

# 回文词判断的代码
def palchecker(astring):
    chardeque = Deque()
    for ch in astring:
        chardeque.addRear(ch)
        
    stillEqual = True
    
    while chardeque.size()>1 and stillEqual:
        first = chardeque.removeFront()
        last = chardeque.removeRear()
        if first != last:
            stillEqual = False
            
    return stillEqual

今天这部分,没有遇到太多困难。但是到了单链表,真是让我头大了一番:

二、单链表

#  单链表,记住一点,Node就是那个节点,不要去想其他,节点有它自己的方法,都可以各自加入。
class Node:
    def __init__(self, data):  # 代表每个节点
        self.data = data  # 可以取值
        self.next = None  # 可以调用

                
class SLList:
    def __init__(self):
        self.head = Node(None)  # 链表头还是有点搞不明白
        
    def is_empty(self):
        return not self.head.next  # 此处判断有疑惑
    
    def size(self):  # 计算长度
        temp = self.head
        count = 0
        while temp is not None:
            count += 1
            temp = temp.next
        return count
    
    def add(self, item):  # 在head后添加
        temp = Node(item)
        temp.next = self.head.next
        self.head.next = temp
            

    def print_list(self):
        print('linked_list:')  # 暂且可用
        temp = self.head
        new_list = []
        while temp is not None:
            new_list.append(temp.data)
            temp = temp.next
        print(new_list)
        
    def search(self, item):
        temp = self.head
        found = False
        while temp is not None and not found:
            if  temp.data == item:
                found = True
            else:
                temp = temp.next
                
        return found

今天在学写链表的过程中,出现了以下问题:

  • 1.分不清Node与链表的关系,最后终于明白,链表类就是给与节点与节点之间方法,Node就是操作节点的方法。
  • 2.分清楚前后顺序,记住不能让链表找不到链接处了

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据结构学习-python实现-优先队列--0417

    到不了的都叫做远方
  • 数据结构学习-python实现-图--0418

    到不了的都叫做远方
  • 数据结构学习-python实现-树--0414

    到不了的都叫做远方
  • 适配器模式

    上面的例子中,Fish的并不具有running_speed()方法,所以添加适配器类RunningFish,输出结果为:

    用户2936342
  • python写一个日志查询工具(登录ftp服务器得到日志并分析)

    这两天比较闲,于是又捡起之前学了一点的python。也不知道用python做一个什么东西,但是如果不做个小工具,那python学了也是会很快就忘掉的。这时,突然...

    zhangheng
  • python高级编程第二讲:类与对象深度问题与解决技巧

    将上面的代码我们进行改造,引入内存跟踪的类,并且将2个类分别实例化100000次,并打印相应的内存大小

    小海怪的互联网
  • 数据结构之——Python实现循环队列

    栈是先入后出,与之相反的是队列,队列是先进先出的线性结构。队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的一端称为队尾,允许删除的一端...

    py3study
  • python模块:win32com用法详解

    import win32com from win32com.client import Dispatch, constants

    菲宇
  • 强化学习第-1步

    function self = one_dimensional_env(len,fresh_time)

    万木逢春
  • Python 面向对象设计 - 腾讯即时通信以及微信示例

    Devops海洋的渔夫

扫码关注云+社区

领取腾讯云代金券