IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python自定义:队列和栈 -> 正文阅读

[Python知识库]Python自定义:队列和栈

“ 队列”

特殊的线性表,只允许在队列尾部插入元素,在队列头部删除元素。

特点:“先进先出(FIFO)”,“后入后出(LILO)”

class CustomQueue:
    '''自定义(双端)队列'''
    '''构造方法'''
    def __init__(self,iterable=None,Maxlen=10):
        if iterable == None:
            self._content = []
            self._current = 0
        else:
            self._content = list(iterable)
            self._current = len(iterable)
        self._size = Maxlen
        if self._size < self._current:
            self._size = self._current
            
    '''析构方法'''
    def __del__(self):
        del self._content
        
    '''测试队列是否已满'''
    def isFull(self):
        return self._current == self._size
    
    '''测试队列是否为空'''
    def isEmpty(self):
        return not self._content
    
    '''print打印显示'''
    def __str__(self):
        return '队列内含有元素:'+str(self._content)+'队列目前长度:'+str(len(self._content))+',队列规模:'+str(self._size)
    
    '''复制__str__,直接对象名当表达式,遍历显示元素'''
    __repr__ = __str__
    
    '''队列置空'''
    def clearqueue(self):
        self._current = 0
        self._content = 0
    
    '''显示当前队列元素个数'''
    def __len__(self):
        return self._current
    
    '''修改队列大小'''
    def setqueuesize(self,size):
        if size < self._current:
            for i in range(size,self._current):
                del self._content[i]
        self._size = size
    '''右侧方入队'''
    def rightappend(self,x):
        if self._current < self._size:
            self._content.append(x)
            self._current = self._current + 1
        else :
            print('队列已满,无法入队')
        
    '''左侧方入队'''
    def leftappend(self,x):
        if self._current < self._size:
            self,_content.insert(0,x)
            self._current = self._current + 1
        else :
            print('队列已满,无法入队')
            
    '''右侧方出队'''
    def rightpop(self):
        if self._content:
            self._content.pop()
            self._current = self._current - 1
        else :
            print('队列为空,无法出队')
    
    '''左侧出队'''
    def leftpop(self):
        if self._content:
            self._content.pop(0)
            self._current = self._current - 1
        else :
            print('队列为空,无法出队')
            
    '''全部元素翻转'''
    def reverse(self):
        return self._content.reverse()
    
    '''队列循环移位'''
    def rotate(self,x):
        if abs(x) > self._current:
            print('移位失败,移位数应小于当前队列长度')
        else :
            self._content = self._content[-x:] + self._content[:-x]
        
        

自定义队列测试:?

>>> %Run 'Custom queue.py'
>>> queue1 = CustomQueue([5,2,6,7,9,4,1])
>>> queue1.rightappend(8)
>>> queue1
队列内含有元素:[5, 2, 6, 7, 9, 4, 1, 8]队列目前长度:8,队列规模:10
>>> queue1.rotate(3)
>>> queue1.leftpop()
>>> queue1.setqueuesize(20)
>>> print(queue1)
队列内含有元素:[1, 8, 5, 2, 6, 7, 9]队列目前长度:7,队列规模:20
>>> queue1.isFull()
False
>>> queue1.clearqueue()
>>> queue1
<repr error: object of type 'int' has no len()>

“栈”

?运算受限的线性表,仅允许在一段进行元素的插入删除操作,最后入栈的最先出,最先入栈的最后出。

特点:“先入后出(FILO)”,“后入先出(LIFO)”

class Customstack:
    '''自定义栈'''
    '''构造方法'''
    def __init__(self,Maxlen=10):
        self._content = []
        self._current = 0
        self._size = Maxlen
    
    '''析构方法'''
    def __del__(self):
        del self._content
    
    '''print()打印显示全部元素'''
    def __str__(self):
        return 'Customstack全部元素:'+str(self._content)+',全栈规模:'+str(self._size)
        
    '''复制__str__,直接对象名当表达式,遍历显示元素'''
    __repr__ = __str__
    
    '''置空全栈'''
    def clearstock(self):
        self._content = []
        self._current = 0
    
    '''测试栈是否为空'''
    def isempty(self):
        return not self._content
    
    '''测试栈是否已满'''
    def isFull(self):
        return self._current == self._size
    
    '''修改栈容量'''
    def setstocksize(self,size):
        if self._current >size:
            print('修改栈容量失败,请选大于{0}数值。'.format(self._size))
            return 
        self._size = size
        
    '''入栈'''
    def pushstock(self,x):
        if self._current < self._size:
            self._current = self._current + 1
            self._content.append(x)
        else :
            print('入栈失败,全栈已满。')
            
    '''出栈'''
    def popstock(self):
        if self._content:
            self._current = self._current - 1
            return self._content.pop()
        else :
            print('入栈失败,全栈为空。')
    

?自定义栈调试:

>>> %Run Customstack.py
>>> stock1 = Customstack(3)
>>> stock1.pushstock(78)
>>> stock1.pushstock(23)
>>> stock1.pushstock(15)
>>> stock1
Customstack全部元素:[78, 23, 15],全栈规模:3
>>> stock1.isFull()
True
>>> stock1.popstock()
15
>>> print(stock1)
Customstack全部元素:[78, 23],全栈规模:3
>>> stock1.setstocksize(2)
修改栈容量失败,请选大于5数值。
>>> stock1.setstocksize(5)
>>> stock1.clearstock()
>>> stock1.isempty()
True
>>> stock1
Customstack全部元素:[],全栈规模:5
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:33:48  更:2022-02-01 20:33:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:58:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码