1、基础实验
编写一个顺序表的类,该类必须包含顺序表的定义及基本操作,具体要求在代码中。
class seq():
# 初始化顺序表函数
def __init__(self):
self.SL = []
#判断顺序表SL是否为空
def IsEmpty(self):
if len(self.SL) == 0:
#通过判断顺序表长度
print("顺序表为空")
print("顺序表不为空")
#创建顺序表函数,存入元素2/5/16/55/8
def CreateSequenceList(self):
self.SL = [2,5,16,55,8]
#输出SL中元素的个数
def TraveseElement(self):
num = len(self.SL)
print("SL中元素个数为:",num)
print("遍历顺序表中元素")
for i in range(0,num):
print("第",i+1,"个元素的值为",self.SL[i])
# 查找元素值函数
def FindElement(self):
key = int(input('请输入想要查找的元素值:'))
if key in self.SL:
ipos = self.SL.index(key)
print("查找成功!值为", self.SL[ipos], "的元素,位于当前顺序表的第", ipos + 1, "个位置。")
else:
print("查找失败!当前顺序表不存在值为", key, "的元素")
#在元素5后面插入元素11
def InsertElement(self):
#获得元素5的位置
ipos = self.SL.index(5)+1
#输入待插入的值11
Element = 11
self.SL.insert(ipos,Element)
print("当前顺序表:\n",self.SL)
#删除值为16的元素
def DeleteElement(self):
#输入16的位置
ipos = self.SL.index(16)
#删除指定元素
self.SL.remove(self.SL[ipos])
print("删除后顺序表:",self.SL)
#销毁SL
def DestorySequenceList(self):
self.SL = None
s = seq()
s.CreateSequenceList()
#s.FindElement()
#s.IsEmpty()
s.InsertElement()
s.DeleteElement()
s.TraveseElement()
s.DestorySequenceList()
1.2编写一个结点类,该类中包含结点的定义和初始化操作,再编写一个循环双链表的类,包含以下基本操作,在代码中。
class DoubleLinkedNode():
#初始化结点函数
def __init__(self,data):
self.data = data
self.next = None
self.prev = None
class seq2():
#初始化头结点函数
def __init__(self):
self.head = DoubleLinkedNode(None)
#创建循环双链表函数
def CreateCircularDoubleLinkedList(self):
print("请输入元素后按回车键确认,若想结束请输入#")
data = input("请输入元素")
cNode = self.head
cNode.next = self.head
while data != "#":
nNode = DoubleLinkedNode(int(data))
cNode.next = nNode
nNode.prev = cNode
nNode.next = self.head
self.head.prev = nNode
cNode = cNode.next
data = input("请输入元素")
#获取链表长度
def GetLength(self):
cNode = self.head
length = 0
while cNode.next != self.head:
length = length + 1
cNode = cNode.next
return length
#判断链表是否为空
def IsEmpty(self):
while self.GetLength() == 0:
return True
else:
return False
#按后继指针访问某一结点值
# def VisitElementByNext(self,tNode):
#判断CDLL是否为空,遍历循环双链表函数
def TraversDoubleLinkedList(self):
if self.IsEmpty():
print("循环双链表为空")
return
else:
print("双链表不为空!")
#将值为8,0,84,73,51的结点依次插入链CDLL中
#将值为99的结点插至CDLL中第五个位置思路类似在头部插入函数
def InsertElement(self):
#输入值为99
Element = input("请输入想插入第五个位置中的值")
if Element == "#":
return
nNode = DoubleLinkedNode(int(Element))
cNode = self.head
pos = 0
while cNode.next != self.head:
cNode = cNode.next
pos = pos+1
if pos == 4:
pNode = cNode
nNode.prev = pNode
pNode.next = nNode
nNode.next = cNode
cNode.prev = nNode
#尾端插入元素
def InsertElementInTail(self):
Element =(input("请输入尾端待插入结点的值"))
if Element =="#":
return
nNode = DoubleLinkedNode(int(Element))
cNode = self.head
while cNode.next != self.head:
cNode = cNode.next
cNode.next = nNode
nNode.prev = nNode
nNode.next = self.head
self.head.prev = nNode
#删除最后一个结点,最后一个结点的下一个结点是头结点
def DeleteElement(self):
cNode = self.head
pNode = self.head
while cNode.next != self.head:
pNode = cNode
cNode = cNode.next
if cNode.next == self.head:
pNode.next = cNode.next
del cNode
#按后继指针访问表中结点值
def VisitElementByNext(self):
tNode = self.head
while tNode.next != self.head:
tNode = tNode.next
key = tNode.data
print(key)
s = seq2()
s.CreateCircularDoubleLinkedList()
s.InsertElement()
#s.InsertElementInTail()
#s.GetLength()
#s.DeleteElement()
s.VisitElementByNext()