python数据结构:栈,队列,二叉树

#### 栈
class Stack(object):
    def __init__(self):
        self.__list = []
    def push(self, item):
        self.__list.append(item)
    def pop(self):
        self.__list.pop()
    def peek(self):
        if self.__list:
            return self.__list[-1]
        else:
            return None
    def is_empty(self):
        return self.__list == []
        # return not self.__list
    def size(self):
        return len(self.__list)
if __name__ == "__main__":
    s = Stack()


#### 队列
class Queue(object):
    def __init__(self):
        self.__list = []
    def enqueue(self, item):
        self.__list.append(item)
    def dequeue(self):
        return self.__list.pop(0)
    def is_empty(self):
        return self.__list == []
    def size(self):
        return len(self.__list)

if __name__ == "__main__":
    s = Queue()
    s.enqueue(1)
    s.enqueue(2)
    print(s.dequeue())
    print(s.dequeue())



"""链表
单向链表"""
class Node(object):
    # 构造节点
    # 两个元素,节点,指向的节点
    def __init__(self, element):
        self.element = element
        self.next =  None


class SingleLinkList(object):
    # 定义单链表
    def __init__(self):
        self.head = None

    def is_empty(self):
        return self.head == None

    def length(self):
        # 长度
        # cur游标用来移动遍历节点
        cur = self.head
        count = 0
        while cur != None:
            count += 1
            cur = cur.next
        return count

    def travel(self):
        # 遍历整个链表
        cur = self.head
        while cur:
            print(cur.element)
            cur = cur.next

    def add(self, item):
        # 头部添加元素
        node = Node(item)
        node.next = self.head
        self.head = node

    def append(self, item):
        # 尾部添加元素
        node = Node(item)
        if self.is_empty():
            self.head = node
        else:
            cur = self.head
            while cur.next:
                cur = cur.next
            cur.next = node

    def insert(self, pos, item):
        # 任意位置添加元素
        if pos < 0:
            self.add(item)
        elif pos >= self.length()-1:
            self.append(item)
        else:
            pre = self.head
            count = 0
            while count < (pos-1):
                count += 1
                pre = pre.next
            # 当循环退出后,pre指向pos-1位置
            node = Node(item)
            node.next = pre.next
            pre.next = node

    def remove(self, item):
        # 删除节点
        cur = self.head
        pre = None
        while cur:
            if cur.element == item:
                if cur == self.head:
                    self.head = cur.next
                else:
                    pre.next = cur.next
            break
            else:
                pre = cur
                cur = cur.next

    def search(self, item):
        # 查找节点是否存在
        cur = self.head
        while cur:
            if cur.element == item:
                return True
            else:
                cur = cur.next
        return False


if __name__ == "__main__":
    ls = SingleLinkList()
    print(ls.is_empty())
    print(ls.length())

    ls.append(1)
    ls.append(2)
    ls.append(3)
    ls.append(4)
    ls.append(5)
    ls.append(6)
    ls.insert(2, 100)
    ls.travel()
    print(ls.search(1))

猜你喜欢

转载自blog.csdn.net/tyz_tyz/article/details/80009709
今日推荐