customStack.py

 '''栈:是一种运算受限的线性表,其特点在于仅允许在一端进行元素的插入和删除操作,最后入栈的最先出栈,而最先入栈的元素最后出栈'''
s = []
s.append(3) #在尾部追加元素,模拟入栈操作
s.append(5)
s.append(7)
print(s)
s.pop() #在尾部弹出元素,模拟出栈操作
print('出栈后:',s)
s.pop() #在尾部弹出元素,模拟出栈操作
s.pop() #在尾部弹出元素,模拟出栈操作
#s.pop() #在尾部弹出元素,模拟出栈操作
# Traceback (most recent call last):
# File "/Users/c2apple/PycharmProjects/easyToPython/customStack.py", line 11, in <module>
# s.pop() #在尾部弹出元素,模拟出栈操作
# IndexError: pop from empty list #设计自定义栈,模拟入栈,出栈,判断栈是否为空,是否已满以及改变栈大小等操作
class Stack:
def __init__(self,size=10):
self._content = [] #使用列表存放栈的元素
self._size = size #初始栈大小
self._current = 0 #栈中元素个数初始化为0 #析构函数
def __del__(self):
del self._content def empty(self):
self._content = []
self._current = 0 def isEmpty(self):
return not self._content def setSize(self,size):
#如果缩小栈空间,则删除指定大小之后的已有元素
if size < self._current:
for i in range(size,self._current)[::-1]:
del self._current[i]
self._current = size
self._size = size def isFull(self):
return self._current == self._size def push(self,v):
if self._current < self._size:
self._content.append(v)
self._current = self._current + 1 #栈中元素个数加1
else:
print('Stack Full!') def pop(self):
if self._content:
self._current = self._current - 1 #栈中元素个数减1
return self._content.pop()
else:
print('Stack is empty!') def show(self):
print(self._content) def showRemainderSpace(self):
print('Stack can still PUSh',self._size-self._current,'elements.')

useCustomStack.py

 from customStack import Stack   #导入模块

 s = Stack() #实例化对象

 print('测试栈是否为空:',s.isEmpty())
print('测试栈是否已满:',s.isFull()) s.push(5) #元素入栈
s.push(8)
s.push('a') s.pop() #元素出栈 s.push('b')
s.push('c')
s.show() s.showRemainderSpace() #查看栈的剩余大小
print('查看当前current',s._content)
s.setSize(4) #修改栈的大小
print('测试栈是否已满:',s.isFull(),'栈内元素',s._content)

Python_自定义栈的更多相关文章

  1. Struts2配置拦截器自定义栈时抛异常:Unable to load configuration. - interceptor-ref - file:/D:/tomcat_install/webapps/crm/WEB-INF/classes/struts.xml

    代码如下: <interceptors>  <!-- 注册自定义拦截器 -->   <interceptor name="LoginInterceptor&qu ...

  2. LinkdList和ArrayList异同、实现自定义栈

    //.LinkdList和ArrayList异同 //ArrayList以连续的空间进行存储数据 //LinkedList以链表的结构存储数据 //栈 先进后出 最上面是栈顶元素 arrayLiat自 ...

  3. 自定义栈Stack 和 队列Queue

    自定义栈 接口 package com.test.custom; public interface IStack<E> { E pop(); void push(E e); E peek( ...

  4. JAVA堆,栈的区别,用AarrayList、LinkedList自定义栈

    大家都知道java模拟机在运行时要开辟空间所以它有特定的五个内存划分: 1.寄存器:    2.本地方法区:    3.方法区:    4.栈内存:    5.堆内存: 但是我们今天来注重讲一下栈和堆 ...

  5. 自定义栈类型,具有找到站内最小元素的min函数 ,且min(),pop(),push()函数的时间复杂度为O(1)

    基本思想: // 借助一个辅助栈,入栈时,若新元素比辅助栈栈顶元素小,则直接放入辅助站 // 反之,辅助站中放入次小元素(即辅助栈栈顶元素)====保证最小元素出栈时,次小元素被保存 static c ...

  6. Python_自定义递归的最大深度

    自定义递归的最大深度 python默认的最大递归深度为998,在有些情况下是不够用,需要我们自行设置.设置方式如下: import sys sys.setrecursionlimit(num) # n ...

  7. Python_自定义模块

    自定义模块例子(web简单框架): 专门处理逻辑的包:处理各种访问需求 数据库的交互:面临各种的查询,删改 ,dba, 配置文件(全局配置文件):列存储数据的地方,HTML代码存储地方 实现: 代码: ...

  8. JAVA自定义栈

    public class Stack{ int[] data; int maxSize; int top; public Stack(int maxSize) { this.maxSize=maxSi ...

  9. 用LinkedList和ArrayList实现自定义栈的异同

    //ArrayList已连续的空间进行存储数据  //LinkedList已链表的结构存储数据    //栈  MyStark ms=new MyStark();//new 一个实现栈的类  //压栈 ...

随机推荐

  1. 【一天一道LeetCode】#39. Combination Sum

    一天一道LeetCode系列 (一)题目 Given a set of candidate numbers (C) and a target number (T), find all unique c ...

  2. 【一天一道LeetCode】#20. Valid Parentheses

    一天一道LeetCode系列 (一)题目 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...

  3. Eclipse 项目以非gradle方式导入Android Studio

    对于以前习惯了Eclipse ide的开发这来说,要把项目导入到studio是一件很不愿接受的事情,但是...毕竟人家官方都给出建议了,并且年后会逐渐被淘汰 如下图所示是一个典型的eclipse项目. ...

  4. OC语言(一)

    一.概述 1.基本上所有关键词@开头 2.字符串以@开头,如@"Hello" 3.基本数据类型 char int float double BOOL(YES\NO) 4.空为nil ...

  5. php opcode缓存

    本文移至:http://www.phpgay.com/Article/detail/classid/2/id/61.html 1.什么是opcode 解释器分析代码之后,生成可以直接运行的中间代码,就 ...

  6. CIO必看:跨国集团采购部报表系统的建设经验分享

    CIO必看:跨国集团采购部报表系统的建设经验分享 引言 福耀集团是国内最具规模.技术水平最高.出口量最大的汽车玻璃生产供应商,产品"FY"商标是中国汽车玻璃行业第一个"中 ...

  7. How tomcat works 读书笔记十四 服务器组件和服务组件

    之前的项目还是有些问题的,例如 1 只能有一个连接器,只能处理http请求,无法添加另外一个连接器用来处理https. 2 对容器的关闭只能是粗暴的关闭Bootstrap. 服务器组件 org.apa ...

  8. web报表工具finereport常用函数的用法总结(数组函数)

    ADD2ARRAY ADDARRAY(array,insertArray, start):在数组第start个位置插入insertArray中的所有元素,再返回该数组. 示例: ADDARRAY([3 ...

  9. err:安装程序试图挂载映像 1(缺少ISO 9660图像)

    一般出现此错误是因为你没有把相应的CentOS-6.4-i386-bin-DVD1.iso文件放入到你装系统所引导的盘中,造成找不到挂载映像文件. ubuntu-12.04.3-desktop-i38 ...

  10. Java中使用C3P0连接池

    先看官网给的范例: import java.sql.*; import javax.naming.*; import javax.sql.DataSource; import com.mchange. ...