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、循环双链表
通过将双链表中最后一个结点的后继指针指向双链表的头结点,并将其头结点的先驱指针指向表中最后一个结点,即可得到循环双链表。
链表的应用在下一篇文章。