python实现栈、队列、链表

实现栈

class Stack(object):
    """
    栈
    """
    # 创建新栈
    def __init__(self):
        self.stack = []
        pass
    # 添加元素到栈顶
    def push(self,item):
        self.stack.append(item)
        pass
    # 弹出栈顶元素
    def pop(self):
        return self.stack.pop()
    # 返回栈顶元素
    def top(self):
        # 判断是否是空栈
        if self.stack:
            return self.stack[-1]
        return None
    # 判断栈是否为空
    def is_empty(self):
        return self.stack==[]
    # 返回栈中元素的个数
    def length(self):
        return len(self.stack)
    pass

实现队列

class Queue():
    # 创建一个新的队列
    def __init__(self):
        self.queue = []
    # 向队列中添加一个新元素
    def put(self,item):
        self.queue.insert(0,item)
        pass
    # 从队列中删除一个元素
    def get(self):
        return self.queue.pop()
    # 判断队列是否为空
    def is_empty(self):
        return self.queue == []
    # 返回队列大小
    def size(self):
        return len(self.queue)

实现链表

# 定义节点类
class Node():

    def __init__(self,elem):
        self.elem = elem
        # 一开始不知道节点的链接去指向谁,所以,让其值为None
        self.next = None

# 定义链表类
class LinkList():

    # 为了能够让第一个节点挂到链表上,需要使用一个头结点指向第一个节点
    def __init__(self,node=None):
        self.head = node

    # 1. 链表是否为空
    def is_empty(self):
        return self.head == None

    # 2. 计算链表的长度
    def length(self):
        # 判断特殊情况:空链表情况
        # 定义游标,用于遍历整个链表中的节点
        cur = self.head
        # 定义计数器
        count = 0
        # 开始移动,一直移动
        while cur != None:
            count += 1
            # 移动游标
            cur = cur.next
        return count

    # 3. 遍历链表
    def travel(self):
        # 和计算长度差类似
        # 创建游标
        cur = self.head
        while cur != None:
            print(cur.elem,end=' ')
            # 进行移动
            cur = cur.next
        print()

    # 4. 链表头部添加元素(头插法)
    def add(self,item):
        # 创建一个新节点
        node = Node(item)
        # 改变指向
        node.next = self.head
        self.head = node
        # 考虑空链表情况
        pass

    # 5. 链表尾部添加元素(尾插法)
    def append(self,item):
        # 构造一个节点
        node = Node(item)
        # 判断空链表
        if self.is_empty():
            self.head = node
            pass
        else:
            # 定义游标
            cur = self.head
            while cur.next != None:
                cur = cur.next
            cur.next = node

    # 6. 链表指定位置添加元素
    def insert(self,index,item):
        # 判断添加位置
        if index <= 0:
            #  头部添加
            self.add(item)
            pass
        elif index > (self.length()-1):
            # 尾插法
            self.append(item)
        else:
            # 创建游标
            cur = self.head
            count = 0
            while count < (index-1):
                count += 1
                # 移动游标
                cur = cur.next
            # 创建一个节点
            node = Node(item)
            # 改变指向
            node.next = cur.next
            cur.next = node
        pass

    # 7. 链表删除指定节点
    def remove(self,item):
        # 考虑特殊情况:
        # 1. 空链表
        # 2. 删除的元素是第一个节点
        # 3. 删除的元素是尾结点
        # 创建两个游标
        cur = self.head
        por = None
        while cur != None:
            if cur.elem == item:
                # 判断是否是第一个节点
                if cur == self.head:
                    self.head = cur.next
                    pass
                else:
                    por.next = cur.next
                break
            else:
                # 移动
                por = cur
                cur = cur.next

    # 8. 查找节点是否存在
    def search(self,item):
        # 创建游标
        cur = self.head
        while cur != None:
            # 判断是否相等
            if cur.elem == item:
                return True
            else:
                cur = cur.next
        # 循环退出以后
        return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值