《数据结构:python语言描述》2.5上机实验顺序表和链式表

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()

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值