python_3_队栈实现

1 数组实现循环队

class Queue:
    def __init__(self):
        self.list = []
        self.limit = 0
        self.head = 0
        self.trail = 0

    def MyQueue(self,limit):
        self.list = [0] * limit
        self.limit = limit

    def EnQueue(self,val):
        if (self.trail + 1) % self.limit == self.head:
            print("队列满了")
        else:
            self.list[self.trail] = val
            self.trail = (self.trail + 1) % self.limit

    def DeQueue(self):
        if self.trail == self.head:
            print("队列为空")
        else:
            val = self.list[self.head]
            self.head = (self.head + 1) % self.limit
            return val

    def is_empty(self):
        if self.trail == self.head:
            return True
        else:
            return False

    def is_full(self):
        if (self.trail + 1) % self.limit == self.head:
            return True
        else:
            return False

    def length(self):
        return (self.trail - self.head + self.limit) % self.limit
    

2 数组实现顺序栈

顺序栈的实现:https://zhuanlan.zhihu.com/p/97881563
https://blog.youkuaiyun.com/qq_42730750/article/details/107870002
链栈的实现:https://blog.youkuaiyun.com/dangfulin/article/details/110098134
https://blog.youkuaiyun.com/qq_42730750/article/details/107870084

class Stack:
    def __init__(self):
        self.arr = [] * limit
        self.size = 0
        self.limit = 0

    def MyStack(self,limit):
        self.arr = [0] * limit
        self.limit = limit

    def pushstack(self,val):
        if self.size == self.limit:
            print("栈满")
        else:
            self.arr[self.size] = val
            self.size = self.size + 1

    def popstack(self):
        if self.size == 0:
            print("没有元素")
        else:
            val = self.arr[self.size-1]
            self.size = self.size - 1
            print(val)

S1 = Stack()
S1.MyStack(5)
S1.pushstack(1)
S1.pushstack(2)
S1.pushstack(3)
S1.pushstack(4)
S1.pushstack(5)
S1.popstack()
S1.pushstack(10)
S1.popstack()

3 关于栈题目

在这里插入图片描述

3.1 (1)第一问

在这里插入图片描述

class Stack:                       # 普通栈操作
    def __init__(self):            # 初始化栈参数
        self.arr = [0]
        self.size = 0
        self.limit = 0

    def Mystack(self, limit):
        self.arr = [0] * limit
        self.limit = limit

    def push(self,val):
        if self.size == self.limit:
            print("栈满")
        else:
            self.arr[self.size] = val
            self.size += 1

    def pop(self):
        if self.size == 0:
            print("栈为空")
        else:
            self.size = self.size - 1
            val = self.arr[self.size]
            print("已出栈的数为" + str(val))

    def travl(self):                         # 遍历栈
        if self.size == 0:
            print("栈为空")
        else:
            for i in range(self.size):
                print(self.arr[i])

    def is_empty(self):                     # 栈判空
        if self.size == 0:
            return True

    def getTopval(self):                   # 得到栈顶元素
        val = self.arr[self.size-1]
        return val


class Stack2:                       # 特殊栈类
    def __init__(self):             # 初始化两个栈
        self.S = Stack()            # 普通栈
        self.S_min = Stack()        # 最小值栈

    def mystack(self,limit):        # 设定参数
        self.S.Mystack(limit)
        self.S_min.Mystack(limit)

    def Push(self,val):             # 给两个栈入栈
        self.S.push(val)
        if self.S_min.is_empty():
            self.S_min.push(val)
        elif self.S_min.getTopval() > val:     # 如果栈顶的数大于输入的数,则入栈,此时最小栈栈顶是最小值
            self.S_min.push(val)
        else:
            val = self.S_min.getTopval()       # 如果栈顶的数小于输入的数,则复制栈顶数再次入栈,此时最小栈栈顶也是最小值
            self.S_min.push(val)

    def Pop(self):
        self.S.pop()
        self.S_min.pop()

    def travl(self):         # 同名函数应该不会混掉把
        self.S.travl()
        self.S_min.travl()

    def getTopval(self):
        val = self.S_min.getTopval()
        return val

St = Stack2()
St.mystack(10)
St.Push(3)
St.Push(4)
St.Push(2)
St.Push(2)
St.Push(7)
St.travl()
St.Pop()
St.Pop()
St.Pop()
print()
print(St.getTopval())


4 双队列实现栈

class Queue:
    def __init__(self):
        self.list = []
        self.limit = 0
        self.head = 0
        self.trail = 0

    def MyQueue(self,limit):
        self.limit = limit + 1
        self.list = [0] * self.limit      # self.limit是用自己的值,不是外面传来的

    def EnQueue(self,val):
        if (self.trail + 1) % self.limit == self.head:
            print("队列满了")
        else:
            self.list[self.trail] = val
            self.trail = (self.trail + 1) % self.limit

    def DeQueue(self):
        if self.trail == self.head:
            print("队列为空")
        else:
            val = self.list[self.head]
            self.head = (self.head + 1) % self.limit
            return val

    def is_empty(self):
        if self.trail == self.head:
            return True

    def is_full(self):
        if (self.trail + 1) % self.limit == self.head:
            return True

    def length(self):
        return (self.trail - self.head + self.limit) % self.limit


class Stack:
    def __init__(self):
        self.Q1 = Queue()
        self.Q2 = Queue()

    def MyStack(self,limit):
        self.Q1.MyQueue(limit)
        self.Q2.MyQueue(limit)

    def is_full(self):
        if self.Q1.is_full():
            return True

    def Push(self,val):                  # 一个队列满,就算栈满
        if self.Q2.is_empty():          # 如果Q1和Q2都为空,加入Q1
            self.Q1.EnQueue(val)


    def Pop(self):
        if self.Q1.is_empty() and self.Q2.is_empty():  # 如果Q1和Q2都为空
            print("栈为空")
        elif self.Q1.is_empty() is not True and self.Q2.is_empty():
            while self.Q1.length() > 1:                # 当Q1只剩下一个元素时输出
                val = self.Q1.DeQueue()                # 输出后,Q1此时必须没有元素
                self.Q2.EnQueue(val)
            val = self.Q1.DeQueue()
            return val
        elif self.Q2.is_empty() is not True and self.Q1.is_empty():  # 如果Q1是空,Q2不为空
            while self.Q2.length() > 1:                 # 当Q2只剩下一个元素时输出
                val = self.Q2.DeQueue()                 # 输出后,Q2此时必须没有元素
                self.Q1.EnQueue(val)
            val = self.Q2.DeQueue()
            return val

s = Stack()
s.MyStack(5)
s.Push(1)
s.Push(2)
s.Push(3)
print(s.Pop())
print(s.Pop())
s.Push(4)
s.Push(5)
print(s.Pop())
print(s.Pop())

5 双栈实现队列

class Stack:                       # 普通栈操作
    def __init__(self):            # 初始化栈参数
        self.arr = [0]
        self.size = 0
        self.limit = 0

    def Mystack(self, limit):
        self.arr = [0] * limit
        self.limit = limit

    def push(self,val):
        if self.size == self.limit:
            print("栈满")
        else:
            self.arr[self.size] = val
            self.size += 1

    def pop(self):
        if self.size == 0:
            print("栈为空")
        else:
            self.size = self.size - 1
            val = self.arr[self.size]
            return val

    def travl(self):                         # 遍历栈
        if self.size == 0:
            print("栈为空")
        else:
            for i in range(self.size):
                print(self.arr[i])

    def is_empty(self):                     # 栈判空
        if self.size == 0:
            return True

    def getTopval(self):                   # 得到栈顶元素
        val = self.arr[self.size-1]
        return val

    def is_man(self):
        if self.size == self.limit:
            return True

class Queue:
    def __init__(self):
        self.S1 = Stack()                  # 这里一定要加括号啊,也不至于浪费30分钟
        self.S2 = Stack()

    def myQueue(self,limit):
        self.S1.Mystack(limit)
        self.S2.Mystack(limit)

    def push(self,val):             # 入栈
        if self.S1.is_man() is not True:
            self.S1.push(val)
        elif self.S1.is_man() and self.S2.is_empty():
            while self.S1.is_empty() is not True:          # 只要s1中有元素,就将s1种元素全部放入s2中
                num = self.S1.pop()
                self.S2.push(num)
            self.S1.push(val)                             # 排空s1后,继续入栈s1
        else:
            print("栈满")

    def pop(self):
        if self.S2.is_empty():                           # 如果s2是空的,说明数据都在s1那边,导过来
            while self.S1.is_empty() is not True:        # 如果s1有数字
                num = self.S1.pop()
                self.S2.push(num)
            val = self.S2.pop()
            return val
        elif self.S2.is_empty() is not True:           # 如果s2不空,将s2输出出去
            val = self.S2.pop()
            return val

q1 = Queue()
q1.myQueue(10)
q1.push(1)
q1.push(2)
q1.push(3)
q1.push(4)
q1.push(5)
q1.push(6)
print(q1.pop())
print(q1.pop())
print(q1.pop())
print(q1.pop())
print(q1.pop())
print(q1.pop())
03-28
### MCP API 的文档与使用教程 MCP 是一种用于增强大型语言模型 (LLM) 功能的技术框架,它通过提示(Prompts)、资源(Resources)以及工具(Tools)这三种核心原语来扩展 LLM 能力[^2]。Apifox 平台也认识到 MCP 技术在 API 开发领域的重要作用,并将其应用于实际场景中[^1]。 为了实现将 `/Users/syw/project/wechatAr` 文件夹下的所有文件上传至远程服务器 `47.93.xx.xx` 用户名 `root` 下的 `/opt/ll` 目录的操作,可以基于 MCP 工具功能构建一个自定义的服务逻辑。以下是具体实现方法: #### 实现方案 利用 SCP 命令完成文件传输任务,并结合 MCP 的 Tool 功能封装此操作以便于后续调用。当关键词为“上传微信目录”时,触发该工具执行相应动作。 ```python import subprocess def upload_wechat_directory(): source_dir = "/Users/syw/project/wechatAr/*" target_server = "root@47.93.xx.xx:/opt/ll/" try: result = subprocess.run(["scp", "-r", source_dir, target_server], check=True) return {"status": "success", "message": f"All files from {source_dir} have been uploaded to {target_server}"} except Exception as e: return {"status": "error", "message": str(e)} # 将上述函数注册为 MCP 中的一个 tool tools = { "upload_wechat_directory_tool": upload_wechat_directory, } # 定义 prompt 和 resource 配置部分省略... ``` 以上代码片段展示了如何创建一个名为 `upload_wechat_directory_tool` 的工具并将其集成到 MCP 系统里去[^3]。每当接收到匹配条件的消息比如含有特定关键字的时候就会激活对应的行为即启动SCP进程从而达成目标需求。 #### 进一步学习资料推荐 对于希望深入研究或者实践更多关于 MCP 应用案例的人士来说,《MCP 教程进阶篇》提供了丰富的实例分析和技术细节值得参考阅读;另外《MCP 极简入门:超快速上手运行简单的 MCP 服务和 MCP 客户端》同样是非常好的起点材料之一可以帮助初学者迅速掌握基础概念及其运作机制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值