《数据结构:python语言描述》第二章线性表

1、线性表是由若干个具有相同特性的数据元素组成的有限序列。

线性表这一章最主要的内容就是顺序表和链式表,顺序表和链式表的定义和区别随便在网上找找都可以找得到,也很容易理解,在这里就不介绍了。

在我学完这本书的第一章后,朋友建议说不需要学这些基础,可以在编程过程中遇到问题后再进行针对性的解决。所以我就没有继续更新了,且这段时间也是在写论文,学数据库,了解机器学习。

现在在做一些工作面试的准备,所以我打算还是把这本书学完,也会持续更新这本书的知识点和课后习题。如果有错误,感谢各位的指正,我也只是在初学阶段。

2、在做顺序表操作的时候我一直不能理解里面的self是什么意思,http://t.csdn.cn/E2UQsPython中self个人理解cr朝天椒的夏天,这篇文章中写的很清楚,可以参考一下。

class seq():
    #初始化顺序表函数
    def __init__(self):
        self.SeqList=[]
    #创建顺序表函数
    def CreateSequenceList(self):
        print("请输入元素后按回车键确认,若想结束请输入#")
        Element = input("请输入元素:")
        while Element != '#':
            self.SeqList.append(int(Element))
            Element = input("请输入元素:")
s = seq()
s.CreateSequenceList()

3、查找元素值函数的实现

通过FindElement(self,SeqList)来查找顺序表中的某一元素

class seq():
    #初始化顺序表函数
    def __init__(self):
        self.SeqList=[]
    #创建顺序表函数
    def CreateSequenceList(self):
        print("请输入元素后按回车键确认,若想结束请输入#")
        Element = input("请输入元素:")
        while Element != '#':
            self.SeqList.append(int(Element))
            Element = input("请输入元素:")
            
    #查找元素值函数
    def FindElement(self):
        key = int(input('请输入想要查找的元素值:'))
        if key in self.SeqList:
            ipos = self.SeqList.index(key)
            print("查找成功!值为",self.SeqList[ipos],"的元素,位于当前顺序表的第",ipos+1,"个位置。")
        else:
            print("查找失败!当前顺序表不存在值为",key,"的元素")
s = seq()
s.CreateSequenceList()
s.FindElement()

4、指定位置插入元素函数的实现

这个代码就不写了,和上面的一样

书中介绍了该算法的时间复杂度为O(n)

5、指定位置删除元素函数

时间复杂度为O(n)

6、遍历顺序表元素函数

二、链表

链表是指采用链式结构存储数据元素的线性表,每个结点创建时主动向系统申请相应的存储空间,并通过指针来链接各个包含数据元素的结点。链表在指定位置插入和删除不需要移动元素,只需要修改指针即可。

1、链表的构成

链表是由一系列结点通过指针链接而形成的,每个结点可分为数据域和指针域两个部分,数据域可用于存储数据元素,指针域可用于存储下一结点的地址。

2、链表的类型

链表可分为单向链表、双向链表及循环链表

3、链表的基本操作

向链表中增加元素,对链表中的元素进行修改,查找链表中的特定元素,删除链表中的元素。

4.1开始创建一个单链表

class Node:
    #初始化结点函数
    def __init__(self,data):
        self.data = data
        self.next = None
class seq2():
    #初始化头结点函数
    def __init__(self):
        self.head = Node(None)
    def CreateSingleLinkedList(self):
    #创建单链表函数
        print("请输入元素后按回车键确认,若想结束请输入#")
        cNode = self.head
        Element = input("请输入当前结点的值")
        while Element != "#":
            nNode = Node(int(Element))
            cNode.next = nNode
            cNode = cNode.next
            Element = input("请输入当前结点的值")
    #尾端插入元素
    def InsertElementInTail(self):
        Element =(input("请输入待插入结点的值"))
        if Element =="#":
            return
        cNode = self.head
        nNode = Node(int(Element))
        while cNode.next!=None:
            cNode = cNode.next
        cNode.next = nNode


s = seq2()
s.CreateSingleLinkedList()
s.InsertElementInTail()

4.2首端插入元素函数

4.3查找指定元素并返回其位置函数

4.4删除元素函数

4.5遍历单链表函数

这些语法书中都有,我就不在这里一一传图片了。

5、双链表

在单链表中,每个结点都有一个指向其直接后继结点的指针。然后我们为结点增加一个指针域,此时可以提高效率,我们将这种同时包含两个指针域的结点构成的链表称为双链表,对于每一个结点而言,它的一个指针域可用来存储该结点直接先驱结点的地址,我们将其称为先驱指针域,而另一个指针域用于存储该结点直接后继结点的地址,我们称其为后继指针域。

可仿照单链表学习。

6、循环双链表

通过将双链表中最后一个结点的后继指针指向双链表的头结点,并将其头结点的先驱指针指向表中最后一个结点,即可得到循环双链表。

链表的应用在下一篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值