1、创建名为 prac03_01.py 的文件,在其中编写一个顺序栈的类,该类必须包含顺序栈 的定义及基本操作,并通过以下步骤测试基本操作的实现是否正确,给出运行结果。

(1)初始化一个顺序栈 SequenceStack。

(2)判断栈是否为空。

(3)将元素 1,3,5 依次进栈。

(4)遍历栈内所有元素。

(5)获取栈顶元素。

(6)获取栈的长度。

(7)将栈中元素依次出栈并输出。

(8)判断栈是否为空。

class SequenceStack(object):  # 新建顺序栈类def __init__(self):  #初始化顺序栈self.maxstorage = 10  # 初始化栈的容量self.s = []for i in range(0, self.maxstorage):self.s.append(None)  # 给栈的所有值赋为Noneself.top = -1  # 栈顶def EmptyJudgement(self):  # 判断是否为空函数if self.top == -1:  # 如果栈顶还是-1。就相当于未写入数据print("栈为空。")else:print("栈不为空。")def Append(self):  # 数据入栈函数while True:  # 循环写入if self.top < self.maxstorage:  # 如果没有超出存储容量限制data = input("请输入入栈元素,一次输入一个,输入“终止”以结束输入:")  # 输入if data != "终止":self.top = self.top + 1  # 栈顶上移self.s[self.top] = data  # 替换写入数据print("成功插入该栈的第%d个元素%s。" % (self.top + 1, data))  # 输入提示else:break  # 终止循环else:print("栈满,无法插入数据。")  # 栈满,提示并终止循环breakdef SelectAll(self):  # 遍历查找函数if self.top == -1:print("栈为空。")  # 空栈判断else:for i in range(0, self.top + 1):print(self.s[i], end="  ")  # 循环打印出栈中的数据def SelectTop(self):  # 查询栈顶元素if self.top == -1:print("栈为空。")else:print("栈顶元素为:%s" % (self.s[self.top]))  # 打印栈顶元素def Length(self):print("栈的长度为:%d" % (self.top + 1))  # 就是返回栈顶,再加个1def Delete(self):  # 出栈函数if self.top == -1:print("栈为空。")else:while self.top != -1:  # 如果不是-1(空栈)print("当前出栈元素为:%s" % self.s[self.top])  # 打印self.s[self.top] = None  # 删除self.top = self.top - 1  # 删除后栈顶下移print("已全部出栈。")def choice(self):self.__init__()while True:info = input("请选择操作(数据入栈,数据出栈,查找全部元素,查找栈顶元素,栈长度,栈是否非空)或输入“终止”以结束:")if info == "数据入栈":self.Append()elif info == "数据出栈":self.Delete()elif info == "查找全部元素":self.SelectAll()elif info == "查找栈顶元素":self.SelectTop()elif info == "栈长度":self.Length()elif info == "栈是否非空":self.EmptyJudgement()elif info == "终止":breakelse:print("无效指令")if __name__ == "__main__":demo = SequenceStack()demo.choice()

2、创建名为 prac03_02.py 的文件,在其中编写结点的类和链式栈的类,后者必须包含 链式栈的定义及基本操作,并通过以下步骤测试基本操作的实现是否正确,给出运行结果。

(1)初始化一个链栈 LinkStack。

(2)判断栈是否为空。

(3)将元素 2,4,6 依次进栈。

(4)获取栈顶元素。

(5)将栈中元素依次出栈并输出。

class Node(object):  # 定义节点类def __init__(self, data):  # 包含data和next的节点self.data = dataself.next = Noneclass LinkedStack(object):def __init__(self):self.head = Node(None)  # 初始化头结点,顺便出现了链表的雏形def EmptyJudgement(self):if self.head.next == None:return Trueelse:return Falsedef Append(self):cnode = self.headwhile cnode.next != None:cnode = cnode.nextcounter = self.Length()while True:data = input("请输入入栈元素,一次输入一个,输入“终止”以结束输入:")if data != "终止":if counter != 9:  # 栈满判定(满栈为10个元素)node = Node(data)  # 将输入的值设置为节点cnode.next = node  # 将节点接入链表cnode = cnode.next  # 索引后移counter = counter + 1  # 计数+1else:print("栈满,无法插入数据。")breakprint("成功插入该栈的第%d个元素%s。" % (counter, data))else:breakdef Length(self):cnode = self.headcounter = 0while cnode.next != None:  # 循环移动指针计数cnode = cnode.nextcounter = counter + 1return counterdef SelectTop(self):if self.Length() != 0:cnode = self.headwhile cnode.next != None:  #循环移动指针计数cnode = cnode.nextprint("栈顶元素为:%s" % cnode.data)else:print("栈为空。")def Delete(self):while True:  # 循环以删除cnode = self.headif self.Length() != 0:while cnode.next.next != None:  # 循环到最后一个有数据节点的前一个节点cnode = cnode.nextpnode = cnode  # 设为p节点cnode = cnode.next  # 再走一次将cnode赋值为要删除的那个接地那print("当前出栈元素为:%s" % cnode.data)pnode.next = cnode.next  # 连接跳过要删除的那个节点del cnode  # delete一下else:print("栈为空。")breakdef choice(self):self.__init__()while True:info = input("请选择操作(数据入栈,数据出栈,查找栈顶元素,栈长度,栈是否非空)或输入“终止”以结束:")if info == "数据入栈":self.Append()elif info == "数据出栈":self.Delete()elif info == "查找栈顶元素":self.SelectTop()elif info == "栈长度":a = self.Length()print("栈长度为%d。" % a)elif info == "栈是否非空":if self.EmptyJudgement():print("栈为空。")else:print("栈不为空。")elif info == "终止":breakelse:print("无效指令")if __name__ == "__main__":demo = LinkedStack()demo.choice()

基于Python的数据结构实验——顺序栈与链栈建立与操作(附详细代码和注释)相关推荐

  1. 基于Python的数据结构实验——顺序表与单链表建立与操作(附详细代码和注释)

    1.创建一个名为 prac02_01.py 的文件,在其中编写一个顺序表的类,该类必须包含顺 序表的定义及基本操作,并通过以下步骤测试基本操作的实现是否正确,给出运行结果. (1)初始化一个顺序表 S ...

  2. 基于Python的数据结构实验——内排序(直接插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序)(附详细代码和注释)

    创建名为 prac10.py 的文件,在其中编写一个顺序表的类,该类必须至少含有两个 成员变量(关键字和其他信息)及相关的基本操作,具体如下. 初始化一个顺序表 SSequenceList. 通 过 ...

  3. 数据结构之线性表的链式存储实现(附完整代码)

    顺序表插入.删除时需要通过移动数据来实现,影响了执行效率. 而链表不要求逻辑上相邻的两个数据元素物理上也相邻,因此对线性表的插入.删除不需要移动数据元素,只需要修改链. 下面介绍带头结点的链式表: 数 ...

  4. 【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现

    灵魂拷问:为什么要学数据结构? 数据结构,直白地理解,就是研究数据的存储方式.数据存储只有一个目的,即为了方便后期对数据的再利用.因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好 ...

  5. python structure_GitHub - CYZYZG/Data_Structure_with_Python: 这是我在学习《基于Python的数据结构》的时候的笔记与代码...

    Data_Structure_with_Python 这是我在学习<基于Python的数据结构>的时候的笔记与代码 主要参考:数据结构与算法(Python) 对于算法的时间效率,我们可以用 ...

  6. python机器视觉教材_基于Python的机器视觉实验教学平台设计

    基于 Python 的机器视觉实验教学平台设计 韩志豪 ; 刘晓英 [期刊名称] <计算机测量与控制> [年 ( 卷 ), 期] 2020(028)003 [摘要] 针对机器视觉领域的学习 ...

  7. 数据结构之 顺序栈、共享栈、链栈

    顺序栈.共享栈.链栈 一.思维导图: 二.栈的定义: 三.栈的特点: 四.栈的基本操作: 五.常考题型: 六.顺序栈: 1.思维导图: 2.顺序栈基本操作的实现: 1.定义栈: 2. 初始化栈:Ini ...

  8. php数据结构之线性表,php数据结构之顺序链表与链式线性表示例

    本文实例讲述了php数据结构之顺序链表与链式线性表.分享给大家供大家参考,具体如下: 链表操作 1. InitList(L):初始化链表 2. DestroyList(L):删除连接 3. Clear ...

  9. 数据结构学习笔记——链式存储结构实现栈(链栈)

    目录 一.链栈的定义 二.链栈的初始化 三.判断链栈是否为空栈 四.进栈(插入操作) 五.出栈(删除操作) 六.读取链栈的栈顶元素 七.链栈的建立 八.链栈的遍历输出 链式存储结构实现栈完整代码 一个 ...

最新文章

  1. unix cut命令
  2. FLV Extract 1.2.1
  3. 大象喝水c语言程序,实现大象喝水(c语言)
  4. MySQL事务及锁机制大揭秘 - 公开课笔记
  5. (旧)走遍美国——(三、文化3)
  6. 盒马要造车?网友调侃:不会就搞个车轮卷蛋糕吧
  7. vim简单操作---学习随笔
  8. 4.15_strategy_行为型模式:策略模式
  9. 5.支付平台架构:业务、规划、设计与实现 --- 账务系统
  10. 【数学建模】基于matlab GUI弱肉强食问题—Volterra 模型【含Matlab源码 1502期】
  11. 斯坦福大学吴恩达机器学习教程中文笔记——目录
  12. 机械臂速成小指南(五):末端执行器
  13. 激荡三十年:银行数据库的发展与变迁
  14. ecs服务器数据迁移_如何用迁云工具把服务器数据迁移到阿里云服务器ecs?
  15. opengl dfdx dfdy
  16. PAC bounding学习记录
  17. 《别看了,你学不会的》——Redis原理与实战(一)
  18. 攻防世界——web新手题
  19. fcitx重启 linux_【Linux基础】Fcitx中文输入法安装
  20. nginx 启动、重启、关闭命令

热门文章

  1. 【韩顺平老师MyBatis】
  2. Android 解决 adapter.notifyDataSetChanged() 不起作用
  3. 【CSS3】变形--位移 translate()
  4. iOS小技巧11-Xcode中相对路径和绝对路径的使用
  5. PTA 3+2转段考试 数据库 mysql(3篇)
  6. Appium: Could not proxy command to the remote server. Original error: socket hang up
  7. scratch学习1 积木区+程序区
  8. Oracle创建定时任务教程
  9. 试解leetcode算法题--求解方程
  10. 10 计算并联电阻的阻值