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

(1)初始化一个顺序表 SL。

(2)判断 SL 是否为空。

(3)将元素 2,5,16,55,8 依次存入 SL 中。

(4)输出 SL 中元素的个数。

(5)获取 SL 中元素 5 的位置。

(6)在元素 5 之后插入元素 11。

(7)删除值为 16 的元素。

(8)将 SL 中元素依次输出。

(9)销毁 SL。

class SequenceList(object):  # 新建顺序表类def __Init__(self):self.sequencelist = []  # 初始化顺序表def EmptyJudgement(self):  # 是否为空判断函数if len(self.sequencelist) == 0:  # 列表长度为0print("顺序表为空。")  # 显示为空else:print("顺序表不为空。")def Insert(self):counter = len(self.sequencelist)  # 准备计数while True:  # 循环输入info = input("请输入要插入的数据,一次输入一个,输入“终止”以结束输入:")if info == "终止":print("已终止输入。")break  # 终止输入则终端循环elif info == "":  # 控制存在就不让输入print("数据不能为空,请重新插入。")else:counter = counter + 1  # 计数器self.sequencelist.append(info)print("成功插入第%d个元素%s" % (counter, info))  # 显示信息def Count(self):length = len(self.sequencelist)print("顺序表现有元素%d个" % length)  # 获取长度然后打印出来def GetIndex(self):  # 获取索引和位置函数length = len(self.sequencelist)  # 这是循环的时候定界用的info = input("请输入要查找的元素:")for i in range (length):if self.sequencelist[i] == info:print(info, "的索引是", str(i), ",", "其位置是", str(i+1))  # 索引不够直观,因此加一个位置break  # 终止循环节省算力elif self.sequencelist[i] != info and i == length - 1:  # 如果都循环到头了还没找到该元素print("未查找到该数据,无法执行下一步插入操作")else:continuedef InsertByIndex(self):  # 定位插入元素length = len(self.sequencelist)info = input("请输入要插入位置的前一个元素:")for i in range(length):if self.sequencelist[i] == info:  #本质还是一个查找的过程,找到了就插入,找不到就不插入了info2 = input("请输入要插入的元素:")self.sequencelist.insert(i+1, info2)print("插入成功")breakelif self.sequencelist[i] != info and i == length - 1:print("未查找到该数据,无法执行下一步插入操作")else:continuedef Delete(self):try:info = input("请输入要删除的元素:")self.sequencelist.remove(info)  # 按照元素信息删除print("删除成功。")except ValueError:print("未查找到改数据,无法执行下一步操作。")def SelectAll(self):length = len(self.sequencelist)for i in range(length):print(self.sequencelist[i], end="  ")  # 打印所有元素,双空格分隔不换行def  DropList(self):del self.sequencelist  # 把列表删了def Choice(self):self.__Init__()  # 初始化列表while True:info = input("请选择操作(插入数据,查找元素位置,查找全部元素,查找元素个数,定位插入元素,列表是否非空,删除元素,删除列表)或输入“终止”以结束:")if info == "插入数据":self.Insert()elif info == "查找元素位置":self.GetIndex()elif info == "查找全部元素":self.SelectAll()elif info == "查找元素个数":self.Count()elif info == "定位插入元素":self.InsertByIndex()elif info == "列表是否非空":self.EmptyJudgement()elif info == "删除元素":self.Delete()elif info == "删除列表":self.DropList()print("程序已终止")break  # 列表都删除了就不能再搞其他操作了elif info == "终止":print("程序已终止")breakelse:print("无效指令")if __name__ == "__main__":  # 运行程序demo = SequenceList()demo.Choice()

2、创建名为 prac02_02.py 的文件,在其中编写一个结点类,该类中必须包含结点的定 义及初始化操作,再编写一个单链表类,该类中包含单链表的定义及基本操作。请通过以下 步骤测试基本操作的实现是否正确(假定头结点所处位置为第 0 个位置),给出运行结果。

(1)初始化一个单链表 SLL。

(2)判断 SLL 是否为空。

(3)将值为 33,24,231,3,11 的结点依次链入 SLL 中。

(4)获取 SLL 的长度。

(5)将值为 18 的结点插入至 SLL 中第 3 个位置。

(6)在 SLL 首端插入值为 25 的结点。

(7)删除 SLL 中第 4 个位置的结点。

(8)查找 SLL 中第 3 个位置结点的值。

(9)遍历 SLL 中所有结点。

class Node(object):  # 定义节点类def __init__(self, data):  # 设置节点self.data = data  # 节点中的数据self.next = None  # 节点存储的下一个的信息class LinkedList(object):  # 定义链表类def __init__(self):self.head = Node(None)  # 头结点def EmptyJudgement(self):  # 空链表判断函数if self.Length() == 0:  # 检查链表长度,如果为0return True  # 返回Trueelse:return False  # 不然返回Falsedef Append(self, data):  # 写入数据(追加数据)函数node = Node(data)  # 新建数据节点if self.EmptyJudgement():  # 判断链表是否为空self.head.next = node  # 为空则将头结点的下一个赋为数据节点print("成功插入第1个数据%s" % data)  # 提示else:  # 如果不是cnode = self.head  # 赋为头结点,作为游标使用counter = self.Length() + 1  # 计数器,后面提示用的while cnode.next != None:  # 如果还没到空节点就循环cnode = cnode.next  # 不断向后移动游标cnode.next = node  # 退出循环后就将下一个直接将数据节点赋值过去print("成功插入第%d个数据%s" % (counter, data))  # 提示def Length(self):  # 链表长度判断函数cnode = self.head  # 赋为头结点,作为类似使用counter = 0  # 长度计数器while cnode.next != None:  # 如果还没到空节点就循环cnode = cnode.next  # 不断向后移动游标counter = counter + 1  # 计数器计数return counter  # 返回计数结果,即链表元素数量,链表元素def Insert(self, index, data):  # 定位插入函数if index >= 0 and index < (self.Length()):  # 如果插入位置位于现有数据之间pnode = self.head  # 游标for i in range(index):  #还是循环pnode = pnode.nextnode = Node(data)node.next = pnode.next # 将要插入的数据所形成的节点指向原来的上一个节点所指向的节点pnode.next = node  # 将原来的上一个节点所指向的节点改为新插入的节点print("插入成功")elif index >= (self.Length()):  #如果插入位置在末尾或超限,直接追加数据 self.Append(data)  # 写入数据print("插入成功")else:  # 索引小于0,判定不合法print("插入位置不合法")def HeadInsert(self, data):  # 头插函数self.Insert(0, data)  # 直接相当于索引为0时定位插入函数def Delete(self, index):  # 删除元素函数if index >= 0 and index < (self.Length()):  # 一样的判定cnode = self.headfor i in range(index):cnode = cnode.next  # 游标移动到索引位置的前一个pnode = cnode  # 赋值为将要删除的节点的先导节点cnode = cnode.next  # 将游标再向后移动一个pnode.next = cnode.next  # 将先导节点所指的内容移动到print("成功删除索引为%d的元素%s" % (index, cnode.data))del cnode  # 删除节点else:  # 直接超限,不再分成两个print("索引超出合法范围")def Select(self, index):if index >= 0 and index < (self.Length()):cnode = self.headfor i in range(index + 1):cnode = cnode.next  # 直接按照索引定位到节点,然后打印print("索引为%d位置上的信息为%s" % (index, cnode.data))else:print("索引超出合法范围")def SelectAll(self):  # 查找全部元素函数cnode = self.headfor i in range(self.Length()):cnode = cnode.nextprint(cnode.data, end="  ")  # 双空格分隔不换行def Choice(self):self.__init__()  # 初始化链表while True:info = input("请选择操作(写入数据,依索引查找元素,查找全部元素,查找元素个数,定位插入元素,链表是否非空,删除元素)或输入“终止”以结束:")if info == "写入数据":while True:data = input("请输入要写入的数据,一次输入一个,输入“终止”以结束输入:")if data != "终止":self.Append(data)else:break  # 终止的话就直接停止循环elif info == "依索引查找元素":while True:try:index_0 = input("请输入要查找元素的索引:")index = int(index_0)self.Select(index)breakexcept ValueError:  # 输入错误提醒print("索引需为自然数")elif info == "查找全部元素":self.SelectAll()elif info == "查找元素个数":self.Length()elif info == "定位插入元素":while True:try:index_0 = input("请输入插入位置索引:")index = int(index_0)data = input("请输入要写入的数据:")self.Insert(index, data)breakexcept ValueError:print("索引需为自然数")elif info == "链表是否非空":a = self.EmptyJudgement()if a is True:print("链表为空")else:print("链表不为空")elif info == "删除元素":while True:try:index_0 = input("请输入要查找元素的索引:")index = int(index_0)self.Delete(index)breakexcept ValueError:print("索引需为自然数。")elif info == "终止":print("程序已终止")breakelse:print("无效指令")if __name__ == "__main__":  # 运行demo = LinkedList()demo.Choice()

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

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

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

  2. 线性表之顺序表与单链表的区别及优缺点

    这里比较的是基于C语言实现的顺序表与单链表,与其他语言的实现可能会有差异,但我相信语言是相通的,它们的实现机制应该也差不多. 1.What 什么是顺序表和单链表 ①顺序表: 顺序表是在计算机内存中以数 ...

  3. 数据结构实验二——建立具有至少10个元素的顺序表或单链表,并能对该表进行查找、删除等基本操作。

    结合实际应用,建立具有至少10个元素的顺序表或单链表,并能对该表进行查找.删除等基本操作. //主函数 #include"Sq.h" #include<stdio.h> ...

  4. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  5. 数据结构——线性表:顺序表、单链表、双链表(C++)

    内容概要: 1.代码部分: 线性表抽象类 顺序表类 单链表类 双链表类 主函数 2.基本概念及注意事项 代码(测试环境VS2017): //线性表ADT类的定义:ADT_List.htemplate ...

  6. 数据结构个人笔记 第三课 顺序表和单链表

    数据结构个人笔记 第三课 顺序表和单链表 顺序表的基本操作 插入元素 删除元素 顺序表查找元素 顺序表更改元素 本节总结代码 单链表 链表的节点 头节点.头指针和首元结点 链表的创建(初始化) 本节总 ...

  7. 数据结构----顺序表与单链表(JAVA)

    下面为学习顺序表和单链表的一些基本操作函数: 1 public class SeqList<T> extends Object { 2 protected int n; 3 protect ...

  8. java如何给顺序表赋值_JAVA模拟新增顺序表及单链表

    最近在回顾大学学的数据结构,这里给大家用javwww.cppcns.coma模拟顺序表和单链表的新增 1顺序表新增 /** * 顺序www.cppcns.com表 * * @author cjd * ...

  9. 顺序表和单链表的插入删除操作时间复杂度的区别

    顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...

最新文章

  1. idea 关于spring boot实现自动编译
  2. vue路由跳转权限_vue权限路由实现方式总结
  3. 学习笔记(58):Python实战编程-Combobox
  4. python的属性访问,python:如何访问函数的属性
  5. 红橙Darren视频笔记 数据库操作优化 数据查询(数据库操作)中
  6. spark sql 入门详解
  7. scala 主构造函数_Scala主构造器和辅助构造器
  8. android system image,android systemimage默認大小以及如何修改
  9. python教程-1.基础篇
  10. 三步棋,跟着bit鹏哥学得
  11. c语言10k ntc 测温表,10KNTC热敏电阻对照表.doc
  12. android系统息屏设置_安卓实现熄屏功能。
  13. [usaco2010 Oct]Soda Machine (入门oj Problem 6195 )
  14. 工业互联网新发展:基于 HTML5 WebGL 的高炉炼铁厂可视化系统!
  15. 杭州seo优化月底工作总结
  16. 顾大松:对北京市出租车、网约车、顺风车文件征求意见稿的六项建议
  17. php 将ppt转html,C#实现将PPT转换成HTML的方法
  18. 量化投资中的因子逻辑是什么?该如何实现?
  19. Mysql深入浅出(一)
  20. 第1章 用物理模型进行高效的水模拟

热门文章

  1. 20行代码制作字符画版小黄鸭表情包 | 文末送书抽奖结果
  2. word只能以安全模式打开
  3. EM78P468 义隆单片机 单键触控
  4. 【图灵学院】JAVA互联网架构【全】
  5. android 紫外线传感器,Arduino光线传感器-UV Sensor V1.0-ML8511紫外线传感器
  6. 【数学】树的重心的性质及其证明
  7. 史上最简单的spark教程第二章-快速开发部署你的第一个Java+spark程序
  8. 游戏角色3d建模用什么软件
  9. 目标检测综述(二:古典方法对比现代方式以及目标检测算法相关概述)
  10. index函数python什么意思,python index函数是什么