版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构Python语言描述实验指导与习题解答
编程基础计算机及相关专业考研考博课程计算机等级考试课程程序员考试课程学习数据结构的重要性2
课程学习指导1.提前预习、认真听课、按时完成书面及上机作业2.先修课程的知识准备离散数学、Python语言3.着重掌握基本概念、基本思想、基本步骤、算法设计4.提高算法设计的能力理解所讲算法、对此多做思考若问题要求不同,应如何设计有效的算法课程特点:内容抽象、概念性强、内容灵活、不易掌握3
了解数据结构研究的主要内容掌握数据结构中涉及的基本概念掌握算法、算法的时间复杂度及其分析的简易方法
教学目标4第1章绪论5目录1.1基础实验1.2综合实验1.3习题解答61.1基础实验1.1.1基础实验1分析算法的时间和空间复杂度1.1.2基础实验2设计算法并讨论其时间复杂度71.1.1基础实验1分析算法的时间和空间复杂度82、实验内容1、实验目的3、实验代码1.1.2基础实验2设计算法并讨论其时间复杂度92、实验内容1、实验目的3、实验代码1.2综合实验1.2.1综合实验1多种方式求和1.2.2综合实验2多种方式求素数101.2.1综合实验1多种方式求和113、实验内容1、实验目的4、实验代码2、实验背景1.2.2综合实验2多种方式求素数123、实验内容1、实验目的4、实验代码2、实验背景1.3习题解答一、选择题二、填空题三、编程题13数据结构实验指导与习题解答——Python语言描述张光河
主编guanghezhang@163.com人民邮电出版社2022年09月14ISBN:978-7-115-56280-7ISBN:978-7-115-56280-7ISBN:978-7-115-48577-9配套教材主教材主教材与配套教材15
学习数据结构的重要性编程基础计算机及相关专业考研考博课程计算机等级考试课程程序员考试课程16
课程学习指导提前预习、认真听课、按时完成书面及上机作业先修课程的知识准备
离散数学、Python语言着重掌握
基本概念、基本思想、基本步骤、算法设计提高算法设计的能力
理解所讲算法、对此多做思考
若问题要求不同,应如何设计有效的算法课程特点内容抽象、概念性强、内容灵活、不易掌握17
了解数据结构研究的主要内容掌握数据结构中涉及的基本概念掌握算法、算法的时间复杂度及其分析的简易方法
教学目标18第1章绪论19习题解答1.3综合实验1.2基础实验1.1目录CONTENTS201.1基础实验211.1.1分析算法的时间和空间复杂度基础实验11.1.2设计算法并讨论其时间复杂度基础实验2
基础实验1分析算法的时间和空间复杂度221############################2#算法一:简单输出3############################4defFun1(self):5
i=06
print("helloworld!")考察是否能够正确地理解算法的时间和空间复杂度的概念,并能否计算出下列给定算法的时间和空间复杂度。实验目的实验内容计算出下列3个算法的时间和空间复杂度。实验代码231############################2#算法二:单重循环3############################4defFun2(self,n):5
k=06
foriinrange(0,n):7
k=k+i1############################2#算法三:双重循环3############################4defFunction(self,n):5
k=06
foriinrange(1,n):7
forjinrange(1,i+1):8
k=i*j9
print(i,"*",j,"=",k)10
print()基础实验1分析算法的时间和空间复杂度
基础实验2设计算法并讨论其时间复杂度24实验目的通过设计算法直观感知其时间复杂度,从而进一步理解算法的时间复杂度的概念,并能够计算出对应的时间复杂度。创建名为ex010501_02.py的文件,在其中设计多个操作(包括无循环、单重循环和双重循环),体会算法的时间复杂度这一概念。通过以下步骤完成本实验。1.实现无循环的方法(1)简单地编写一个输出自己姓名和学号的语句。(2)计算该方法的时间复杂度。2.实现单重循环的方法(1)利用单重循环求解正整数1~n的和。(2)计算该方法的时间复杂度。3.实现双重循环的方法(1)利用双重循环输出九九乘法表。(2)计算该方法的时间复杂度。实验内容251#########################################2#文件名:ex010501_02.py3#版本号:0.14#创建时间:2019-1-135#########################################6classLoopCom(object):7
################################8
#实现无循环的方法9
################################10
defNoLoop(self):11
name="张三"12
id="20190113"13
print("\n1.实现无循环的方法")14
print("(1)简单地编写一个输出自己姓名和学号的语句。")15
print("姓名为{0:},学号为{1:}".format(name,id))16
print("(2)该方法的时间复杂度为O(1)。")17
################################18
#实现单重循环的方法19
################################20
defOneLoop(self):21
sum=022
n=1023
foriinrange(1,n+1):24
sum=sum+i25
print("\n2.实现单重循环的方法")实验代码2630
#实现双重循环的方法31
################################32
defDoubleLoop(self):33
print("\n3.实现双重循环的方法")34
print("(1)利用双重循环输出九九乘法表。")35
foriinrange(1,10):36
forjinrange(1,i+1):37
print("{0:}*{1:}={2:}".format(i,j,i*j),end="")38
print()39
print("(2)该算法的时间复杂度为O(n^2)。")40
################################41
#输出函数42
################################43
defPrintOut(self):44
self.NoLoop()45
self.OneLoop()46
self.DoubleLoop()47if__name__=='__main__':48
LC=LoopCom()49
LC.PrintOut()26
print("(1)利用单重循环求解正整数1~10的和。")27
print("1~10的和为{0:}".format(sum))28
print("(2)该算法的时间复杂度为O(n)。")29
################################1.2综合实验271.2.1多种方式求和综合实验11.2.2多种方式求素数综合实验2
综合实验1多种方式求和28以多种方式求解正整数1~n的和,通过对比这些方式在同一种环境下运行后的绝对时间,深入地体会算法的时间复杂度。实验目的实验背景
综合实验1多种方式求和29
实验内容
综合实验1多种方式求和30实验代码50
defPrintOut(self):51
n=int(input("请输入n的值:"))52
print("\n(1)编写将正整数1,2,...,",n,"逐个进行累加的方法。")53
t2=self.Calculate(n)54
print("\n(3)编写使用(n*(n+1))/2求解1~",n,"的和的方法。")55
t4=self.Formula(n)56
print("\n(5)比较(2)和(4)中的绝对时间。")57
self.CompareTime(t2,t4)
综合实验2多种方式求素数31实验目的以多种方式判断某个正整数n(n>1)是否为素数,通过对比这些方式在同一种环境下运行后的绝对时间,深入地体会算法的时间复杂度。实验背景我们知道判断一个正整数n是否为素数的方法是通过计算该正整数是否只能被1和其本身整除。当设计如何判断正整数n是否为素数的算法时,我们可以将n对正整数2,3,…,n-1逐个进行取模,若结果均不为0,则n为素数;也可以将n对正整数2,3,…,2n逐个进行取模,若结果均不为0,则n为素数;也可以将n对正整数2,3,…,n逐个进行取模,若结果均不为0,则n为素数。这3种方法对素数的判断进行了逐步改进,需重复取模,比较的次数也变得越来越少。
综合实验2多种方式求素数32创建名为ex010502_02.py的文件,在其中编写判断正整数n是否为素数的程序,具体如下。(1)编写通过将正整数n对2,3,…,n-1逐个取模,判断其是否为素数的方法。(2)编写通过将正整数n对2,3,…,2n逐个取模,判断其是否为素数的方法。(3)编写通过将正整数n对2,3,…,n逐个取模,判断其是否为素数的方法。(4)输入待判断的正整数n。(5)分别执行上述实现的3个方法,并获取各自的运行时间。(6)改变n的规模(n=100、10000和1000000),并重复执行上述3个方法,分析每次的运行时间,计算算法的时间复杂度。实验内容
综合实验2多种方式求素数33实验代码58
defPrintOut(self):59
n=input("请输入待判断的正整数n:")60
n=int(n)61
t1=time.perf_counter()62
self.one(n)63
t2=time.perf_counter()64
self.two(n)65
t3=time.perf_counter()66
self.three(n)67
t4=time.perf_counter()68
print("\n(4)分别执行上述实现的3个方法,并获取各自的运行时间")69
print("第1种方法的运行时间为{0:}s".format(t2-t1))70
print("第2种方法的运行时间为{0:}s".format(t3-t2))71
print("第3种方法的运行时间为{0:}s".format(t4-t3))1.3习题解答34一、选择题1~5DBCDC【解析】1.数据元素可由若干个数据项组成。参考主教材P2。2.元素和元素之间可能存在一对一、一对多等关系。参考主教材P3。3.逻辑结构反映数据元素之间的逻辑关系,线性结构表示数据元素之间一对一的关系,非线性结构表示数据元素之间一对多或多对一的关系。可参考主教材P4。4.算法最终必须由硬件动作实现;算法就是为解决某一类问题而编写的程序;算法的可行性是算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成。可参考主教材P9。5.问题的规模和待处理数据的初态都会影响算法的时间复杂度。可参考主教材P10。1.3习题解答35二、填空题1.不可分割。【解析】参考主教材P2数据项的概念。2.集合、线性结构、树形结构、图状(或网状)结构。【解析】参考主教材P3数据的逻辑结构分类。3.顺序存储结构、链式存储结构、索引存储结构、哈希(或散列)存储结构。【解析】参考主教材P4~6数据的存储结构。4.有穷性、确定性、可行性、输入、输出。【解析】参考主教材P9。
5.临时变量、形参。【解析】参考主教材P13。1.3习题解答36二、编程题1.设计算法求解正整数n的阶乘,并分析其时间复杂度以及空间复杂度,例如n=10。(文件名:ex010603_01.py)。【解析】算法对应的代码仅含一个单重循环,因此时间复杂度为O(n),所占用的存储空间为程序本身的空间和变量fn所占用的空间,即空间复杂度为O(1)。15
defPrintOut(self):16
fn=int(input("请输入需要求解阶乘的数n:"))17
jc=118
foriinrange(1,fn+1):19
jc=jc*i20
print("n=",fn,"的阶乘为{0:}".format(jc))21
print("时间复杂度为O(n)")1.3习题解答37二、编程题2.已知序列1,2,3,5,8,…,要求设计算法求第20项的值,并分析其时间和空间复杂度。(文件名:ex010603_02.py)。【解析】算法对应的代码仅含一个单重循环,因此时间复杂度为O(n),所占用的存储空间为程序本身的空间及变量a、变量b和变量c所占用的空间,即空间复杂度为O(1)。15
defPrintOut(self):16
a=117
b=218
foriinrange(1,18):19
c=a+b20
a=b21
b=c22
print("第20项的值为{0:}".format(c))23
print("时间复杂度为O(n)")1.3习题解答38二、编程题3.设计算法求解1!+2!+3!+…+n!的和,并分析其时间复杂度,例如n=10(文件名:ex010603_03.py)。【解析】算法对应的代码仅含一个单重循环,因此时间复杂度为O(n)。15
defPrintOut(self):16
n=int(input("请输入n的值:"))17
jc=118
sum=019
foriinrange(1,n+1):20
jc=jc*i21
sum=sum+jc22
print("1!+...+{:0}!={:1}".format(n,sum))23
print("时间复杂度为O(n)")1.3习题解答39二、编程题
1.3习题解答40二、编程题5.设计算法求解1!+2!+3!+…+n!的和,要求仅使用单重循环控制循环的次数,同时用于计算当前数的阶乘(记下此值用于计算下一个数的阶乘),输出最终的结果并计算该算法的时间复杂度,例如n=10(文件名:ex010603_05.py)。【解析】由于题目要求仅使用单重循环,故算法对应的代码仅含一个单重循环,因此时间复杂度为O(n)。16
defPrintOut(self):17
n=int(input("请输入n的值:"))18
jc=119
sum=020
foriinrange(1,n+1):21
jc=jc*i22
sum=sum+jc23
print("1!+...+{:0}!={:1}".format(n,sum))24
print("时间复杂度为O(n)")1.3习题解答41二、编程题6.设计算法获取输入的n个数据中的最大值,要求输入一组数据使时间复杂度为算法的最好时间复杂度,例如n=10(文件名:ex010603_06.py)。【解析】算法对应的代码包含两个单重循环,第一个单重循环用于获取输入的n个数据,若输入的数据第一个为最大的,则在第二个单重循环中,就只会执行第25行的if语句,而不会执行第26行的代码,这样可以获得最好的时间复杂度。16
defPrintOut(self):17
n=int(input("请输入n的值:"))18
num=input("请输入{0:}个整数,每个数字以空格分隔:".format(n))19
num=num.split()20
len=num.__len()21
foriinrange(0,len):22
num[i]=int(num[i])23
max=num[0]24
foriinrange(1,len):25
ifmax<num[i]:26
max=num[i]27
print("最大值为{0:}".format(max))1.3习题解答42二、编程题7.设计算法获取输入的n个数据中的最大值,要求输入一组数据使时间复杂度为算法的最坏时间复杂度,例如n=10(文件名:ex010603_07.py)。【解析】算法采用插入排序的思路,此时如果输入时将较小的值放在前面,较大的值放在后面,则需要多次执行第28和第29行代码,从而导致最坏的时间复杂度。16
defPrintOut(self):17
n=int(input("请输入n的值:"))18
num=input("请输入{0:}个整数,每个数字以空格分隔:".format(n))19
num=num.split("")20
num_len=num._len_()21
list=[0foriinrange(0,num_len+1)]22
foriinrange(0,num_len):23
list[i+1]=int(num[i])#list[0]空出用于存放哨兵(插入排序算法)24
foriinrange(2,len(list)):25
list[0]=list[i]26
index=i27
whilelist[index-1]<list[0]:28
list[index]=list[index-1]29
index=index-130
list[index]=list[0]31
print("最大值为{0:}".format(list[1]))1.3习题解答43二、编程题
17
defPrintOut(self):18
n=int(input("请输入n的值:"))19
jc=120
print("当n={0:}时:\n".format(n))21
foriinrange(1,n+1):22
print("log2{0:}={1:}".format(i,log(i,2)))23
print("sqrt({0:})={1:}".format(i,sqrt(i)))24
print("{0:}={1:}".format(i,i))25
print("{0:}log2{1:}={2:}".format(i,i,i*log(i,2)))26
print("{0:}²={1:}".format(i,i**2))27
print("{0:}³={1:}".format(i,i**3))28
print("power(2,{0:})={1:}".format(i,2**i))29
jc=jc*i30
print("{0:}!={1:}\n".format(i,jc))1.3习题解答44二、编程题9.设计算法对输入的n个数据从小到大进行排序,要求输入一组数据使时间复杂度为算法的最好时间复杂度,例如n=10(文件名:ex010603_09.py)。【解析】关键看输入的数据是否需要执行第27~29行代码。16
defPrintOut(self):17
n=int(input("请输入n的值:"))18
temp=019
num=input("请输入{0:}个整数,每个数字以空格分隔:".format(n))20
num=num.split("")21
len=num.__len__()22
foriinrange(0,len):23
num[i]=int(float(num[i]))24
foriinrange(0,len-1):25
forjinrange(0,len-1-i):26
if(num[j]>num[j+1]):27
temp=num[j+1]28
num[j+1]=num[j]29
num[j]=temp30
print(num)1.3习题解答45二、编程题10.设计算法对输入的n个数据从小到大进行排序,要求输入一组数据使时间复杂度为算法的最坏时间复杂度,例如n=10(文件名:ex010603_10.py)。【解析】若输入的数据已经是从小到大的顺序,则时间复杂度最好,反之最坏31
defPrintOut(self):32
n=int(input("请输入n的值:"))33
x=input("请输入{0:}个待排序整数,每个数字以空格分隔".format(n))34
y=x.split()35
arr=[]36
foriiny:37
arr.append(int(i))38
arr=self.InsertSort(arr)39
print("数列按序排列如下:")40
foriinarr:41
print(i,end='')ThankYou!人民邮电出版社2022年09月张光河guanghezhang@163.com46ISBN:978-7-115-56280-7数据结构实验指导与习题解答——Python语言描述张光河
主编guanghezhang@163.com人民邮电出版社2022年09月47ISBN:978-7-115-56280-7ISBN:978-7-115-56280-7ISBN:978-7-115-48577-9配套教材主教材主教材与配套教材48第二章线性表49习题解答2.3综合实验2.2基础实验2.1目录CONTENTS502.1基础实验512.1.1顺序表的基本操作基础实验1基础实验22.1.22.1.32.1.42.1.5单链表的基本操作循环单链表的基本操作双链表的基本操作循环双链表的基本操作基础实验3基础实验4基础实验5
基础实验1顺序表的基本操作52理解线性表的顺序存储结构,并掌握顺序表基本操作。实验目的实验内容创建一个名为ex020501_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。531#############################################2#文件名:ex020501_01.py3#版本号:0.14#创建时间:2019-1-45#############################################6#############################################7#类名称:SequenceList8#类说明:定义一个顺序表SL9#类释义:创建一个顺序表SL,并对其执行相关操作。10############################################11classSequenceList(object):12
#####################################13
#初始化顺序表函数14
#####################################15
def__init__(self):16
self.SeqList=[]17
#####################################18
#创建顺序表函数19
#####################################20
defCreateSequenceList(self):21
print("---------------------------------------------------")22
print("请输入数据后按回车键确认,若想结束输入请按“#”。")23
print("---------------------------------------------------")24
Element=input("请输入元素:")25
whileElement!='#':实验代码5426
self.SeqList.append(int(Element))27
Element=input("请输入元素:")28
print("顺序表SL创建完成")29
#####################################30
#判断顺序表为空函数31
#####################################32
defIsEmpty(self):33
iflen(self.SeqList)==0:34
print("顺序表SL为空!")35
return136
else:37
print("顺序表SL不为空!",self.SeqList)38
#####################################39
#获取顺序表长度函数40
#####################################41
defGetLength(self):42
length=len(self.SeqList)43
print("顺序表SL中元素的个数为",length,"个")44
#####################################45
#查找表中某一元素函数46
#####################################47
defFindElement(self):48
key=int(input('请输入想要查找的元素值:'))49
ifkeyinself.SeqList:50
ipos=self.SeqList.index(key)5551
print("查找成功!值为",self.SeqList[ipos],"的元素,位于当前顺序表的第",ipos+1,"个位置。")52
else:53
print("查找失败!当前顺序表中不存在值为",key,"的元素")54
#####################################55
#定位插入元素函数56
#####################################57
defInsertElement(self):58
iPos=int(input('请输入待插入元素的位置:'))59
Element=int(input('请输入待插入的元素值:'))60
self.SeqList.insert(iPos,Element)61
print("成功插入元素",Element)62
#####################################63
#删除列表元素函数64
#####################################65
defDeleteElement(self):66
dElement=int(input('请输入需要删除元素的值:'))67
ifdElementinself.SeqList:68
dPos=self.SeqList.index(dElement)69
delself.SeqList[dPos]70
print("成功删除元素",dElement)71
else:72
print("顺序表中不存在该元素")73
#####################################74
#遍历顺序表函数75
#####################################5676
defTraverseElement(self):77
SeqListLen=len(self.SeqList)78
print("------------------遍历顺序表中元素------------------")79
foriinrange(0,SeqListLen):80
print("第",i+1,"个元素的值为",self.SeqList[i])81
#####################################82
#销毁顺序表函数83
#####################################84
defDestorySequenceList(self):85
delself.SeqList[:]86
print("顺序表已成功销毁!")87
#####################################88
#输出函数89
#####################################90
defPrintOut(self):91
print("*****************************************************")92
print("*******基础实验1实现顺序表的基本操作*******")93
print("\n(1)初始化顺序表SL:”,end="")94
try:95
self.__init__()96
print("顺序表SL初始化成功")97
except:98
print("顺序表SL初始化失败")99
print("\n(2)判断当前顺序表是否为空:”,end="")100
self.IsEmpty()57101
print("\n(3)创建顺序表SL")102
try:103
self.CreateSequenceList()104
exceptValueError:105
print("输入有误,请重新输入!")106
self.CreateSequenceList()107
print("\n(4)SL中元素的个数为:”,end="")108
try:109
self.GetLength()110
except:111
print("获取SL中元素个数出错!")112
print("\n(5)查找元素5所在位置")113
try:114
self.FindElement()115
except:116
print("查找元素5出错!")117
print("\n(6)在元素5后插入元素11")118
try:119
self.InsertElement()120
except:121
print("插入元素11出错!")122
print("\n(7)删除元素16")123
try:124
self.DeleteElement()125
except:58126
print("删除元素16出错!")127
print("\n(8)输出顺序表SL")128
try:129
self.TraverseElement()130
except:131
print("输出SL出错!”)132
print("\n(9)销毁线性表SL:”,end="")133
try:134
self.DestorySequenceList()135
except:136
print("销毁SL出错!”)137
print("*****************************************************")138if__name__=='__main__':139
SL=SequenceList()140
SL.PrintOut()注意:在上述代码中,我们在PrintOut()函数中调用初始化顺序表函数(__init__(self))、判断顺序表是否为空(IsEmpty())和创建顺序表(CreateSequenceList())时使用了Python提供的异常处理代码(try......except),其目的是为了在发生错误时,及时捕获所产生的异常,并对其做出调整,以便程序更为稳定流畅的运行。在之后的例子中,由于篇幅的限制,调用其它函数时没有增加异常处理代码,请在实际编写代码时参照此实例加上。
基础实验2单链表的基本操作59理解单链表的链式存储结构,并掌握单链表的基本操作。实验目的实验内容创建名为ex020501_02.py的文件,在其中编写一个结点类,该类中必须包含结点的定义及初始化操作,再编写一个单链表类,该类中包含单链表的定义及基本操作。请通过以下步骤测试基本操作的实现是否正确(假定头结点所处位置为第0个位置)。(1)初始化一个单链表SLL。(2)判断SLL是否为空。(3)将值为33,24,231,3,11的结点依次链入SLL中。(4)获取SLL的长度。(5)将值为11的结点插入至SLL中第3个位置。(6)在SLL首端插入值为25的结点。(7)删除SLL中第4个位置的结点。(8)查找SLL中第3个位置结点的值。(9)遍历SLL中所有结点。601##################################################2#文件名:ex020501_02.py3#版本号:0.14#创建时间:2019-4-105##################################################6##################################################7#类名称:Node8#类说明:定义一个结点9#类释义:创建结点,并对结点进行初始化操作。10#################################################11classNode(object):12
#####################################13
#初始化结点函数14
#####################################15
def__init__(self,data):16
self.data=data17
self.next=None18#################################################19#类名称:SingleLinkedList20#类说明:定义一个单链表SLL21#类释义:创建一个单链表SLL,并对其执行相关操作。22#################################################23classSingleLinkedList(object):24
#####################################25
#初始化头结点函数实验代码6126
#####################################27
def__init__(self):28
self.head=Node(None)29
#####################################30
#创建单链表函数31
#####################################32
defCreateSingleLinkedList(self):33
print("---------------------------------------------------")34
print("请输入数据后按回车键确认,若想结束输入请按“#”。")35
print("---------------------------------------------------")36
cNode=self.head37
Element=input("请输入当前结点的值:")38
whileElement!='#':39
nNode=Node(int(Element))40
cNode.next=nNode41
cNode=cNode.next42
Element=input("请输入当前结点的值:")43
print("单链表SLL创建完成!")44
#####################################45
#判断单链表是否为空46
#####################################47
defIsEmpty(self):48
ifself.GetLength()==0:49
returnTrue50
else:6251
returnFalse52
#####################################53
#获取单链表长度函数54
#####################################55
defGetLength(self):56
cNode=self.head57
length=058
whilecNode.next!=None:59
length=length+160
cNode=cNode.next61
returnlength62
#####################################63
#在表中指定位置插入结点64
#####################################65
defInsertElement(self):66
Pos=067
cNode=self.head68
iPos=int(input('请输入待插入结点的位置:'))69
whilePos<iPos:70
cNode=cNode.next71
Pos=Pos+172
Element=int(input('请输入待插入结点的值:'))73
nNode=Node(int(Element))74
nNode.next=cNode.next75
cNode.next=nNode6376
print("结点",Element,"插入成功!")77
#####################################78
#在表中首端插入某一结点79
#####################################80
defInsertElementInHead(self):81
Element=int(input('请输入待插入结点的值:'))82
ifElement=="#":83
return84
cNode=self.head85
nNode=Node(int(Element))86
nNode.next=cNode.next87
cNode.next=nNode88
print("结点",Element,"插入成功!")89
#####################################90
#删除指定位置结点值91
#####################################92
defDeleteElement(self):93
Pos=094
cNode=self.head95
ifself.IsEmpty():96
print("当前单链表为空!")97
return98
dPos=int(input('请输入待删除结点的位置:'))99
whilePos<dPos:100
cNode=cNode.next64101
Pos=Pos+1102
pNode=cNode103
cNode=cNode.next104
pNode.next=cNode.next105
delcNode106
print("成功删除第",dPos,"个位置的结点!")107
#####################################108
#在表中查找某一指定结点109
#####################################110
defFindElement(self):111
Pos=0112
cNode=self.head113
sPos=int(input('请输入想要查找的结点位置:'))114
whilePos<sPos:115
cNode=cNode.next116
Pos=Pos+1117
key=cNode.data118
print("查找成功!第",Pos,"个位置的结点值为",key)119
#####################################120
#遍历单链表函数121
#####################################122
defTraverseElement(self):123
cNode=self.head124
ifcNode.next==None:125
print("当前单链表为空!")65126
return127
print("您当前的单链表为:")128
whilecNode!=None:129
cNode=cNode.next130
self.VisitElement(cNode)131
#####################################132
#输出单链表某一元素函数133
#####################################134
defVisitElement(self,tNode):135
iftNode!=None:136
print(tNode.data,"->",end="")137
else:138
print("None")139
#####################################140
#输出函数141
#####################################142
defPrintOut(self):143
print("*****************************************************")144
print("*********基础实验2实现单链表的基本操作*********")145
print("\n(1)初始化单链表SLL:”,end="")146
try:147
self.__init__()148
print("单链表SLL初始化成功!")149
except:150
print("单链表SLL初始化失败!")66151
print("\n(2)判断当前单链表是否为空:”,end="")152
ifself.IsEmpty():153
print("当前链表为空!")154
else:155
print("当前链表不为空!")156
print("\n(3)创建单链表SLL")157
try:158
self.CreateSingleLinkedList()159
exceptValueError:160
print("输入有误,请重新输入!”)161
self.CreateSingleLinkedList()162
print("\n(4)单链表SLL中元素的个数为",end="")163
try:164
sum=self.GetLength()165
print(sum)166
except:167
print("获取SLL中结点个数出错!")168
print("\n(5)将值为11的结点插入至SLL中的第3个位置")169
try:170
self.InsertElement()171
except:172
print("插入结点18出错!")173
print("\n(6)在SLL首端插入值为25的结点")174
try:175
self.InsertElementInHead()67176
except:177
print("插入结点25出错!")178
print("\n(7)删除SLL中第4个位置的结点")179
try:180
self.DeleteElement()181
except:182
print("删除结点出错!")183
print("\n(8)查找SLL中第3个位置结点的值")184
try:185
self.FindElement()186
except:187
print("查找出错!”)188
print("\n(9)遍历SLL中的所有结点:”)189
try:190
self.TraverseElement()191
except:192
print("遍历SLL出错!”)193
print("*****************************************************")194if__name__=='__main__':195
SLL=SingleLinkedList()196
SLL.PrintOut()
基础实验3循环单链表的基本操作68理解循环单链表的链式存储结构,并掌握循环单链表的基本操作。实验目的实验内容创建名为ex020501_03.py的文件,在其中编写一个结点类,该类中必须包含结点的定义及初始化操作,再编写一个循环单链表类,该类中包含循环单链表的定义及基本操作。请通过以下步骤测试基本操作的实现是否正确(假定头结点所处位置为第0个位置)。(1)初始化一个循环单链表CSLL。(2)判断CSLL是否为空。(3)将值为60,41,43,78,85的结点依次链入CSLL中。(4)将值为49的结点插入至CSLL中第3个位置。(5)在CSLL末端插入值为66的结点。(6)删除CSLL中值为78的结点。(7)查找值为66的结点的位置。(8)遍历CSLL中所有结点。691##################################################2#文件名:ex020501_03.py3#版本号:0.14#创建时间:2019-4-105##################################################6##################################################7#类名称:Node8#类说明:定义一个结点9#类释义:创建结点,并对结点进行初始化操作。10#################################################11classNode(object):12
#####################################13
#初始化结点函数14
#####################################15
def__init__(self,data):16
self.data=data17
self.next=None18#################################################19#类名称:CircularSingleLinkedList20#类说明:定义一个循环单链表CSLL21#类释义:创建一个循环单链表CSLL,并对其执行相关操作。22#################################################23classCircularSingleLinkedList(object):24
#####################################25
#初始化头结点函数实验代码7026
#####################################27
def__init__(self):28
self.head=Node(None)29
#####################################30
#创建循环单链表函数31
############
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 团队协作意识培养主题班会课件齐心力聚共筑辉煌
- 房地产项目销售现场客户接待全流程规范手册
- 家政服务员中级(四级)理论知识模拟试题及答案解析
- 道路绿化喷淋工程施工组织设计方案
- 2026秋人教版历史八年级上册第1课鸦片战争课件
- 长沙某高层住宅楼测量施工方案
- 警钟交通长鸣,守护生命至上几年级主题班会课件
- 雨污水管道专项施工方案(精)
- 2026二十四届三中全会知识题库与答案
- 2025玖隆能建集团锡林郭勒盟华润电厂项目招聘49人笔试历年参考题库附带答案详解
- T∕CECS 21-2024 超声法检测混凝土缺陷技术规程
- 北京市科技计划项目(课题)结题经费审计工作底稿-参考文本
- 七年级数学上册知识点练习专题47 动角问题专项训练(40道)(举一反三)(华东师大版)(解析版)
- 2024年全国动物畜类防疫、检疫、检验技能知识试题库(附含答案)
- 公考必考成语1000个
- 苏科版(2024)八年级下册物理期末复习重要知识点考点提纲
- 2023-2024学年广东省广州市番禺区七年级(下)期末数学试卷(含答案)
- 电力建设工程风险较大分部分项工程辨识清单
- 激光切割机日常保养表
- 一种硬脂酸钙熔融法生产工艺及其硬脂酸钙反应釜
- YS/T 248.1-2007粗铅化学分析方法 铅量的测定 Na2 EDTA滴定法
评论
0/150
提交评论