[读书笔记]-大话数据结构-3-线性表(二)-线性表的链式存储
2017-10-30 11:30
344 查看
线性表链式存储结构
为了解决线性表插入、删除操作复杂和空间大小不灵活等缺点, 可以用链式存储结构表示线性表。链式存储结构的定义为:为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需要存储一个指示其后继的信息(即直接后继的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称作为指针。这两部分信息组成数据元素ai的存储映像,称为节点(Node).n个节点链接成一个链表,即线性表(a1,a2,...an)的链式存储结构。因为该链表每个节点只包含一个指针域,也叫做单链表。如下图:
#encoding=UTF-8 class Node(object): def __init__(self,data=None): #生成数据节点 self.data=data self.next=None #指针默认指向空 class LinkList(object): def __init__(self): #生成一个链表,无头结点,默认指向空 self.head=None def ListEmpty(self): return self.head==None def ClearList(self): self.head=None def GetElem(self,i): p=self.head #p指向链表的头 j=1 #初始下标为1 while p!=None and j<i: #下标小于i或者p不到链表尾部(p=None)时,资讯 j+=1 #下标加1 p=p.next #节点指向下一个 if p==None or j>i: raise IndexError('not exit') #第i个元素不存在 return p.data #返回第i个元素的值 def LoacateElem(self,e): p=self.head i=0 while p!=None: i+=1 if p.data==e:return i p=p.next return -1 def ListInsert(self, i, e): p=self.head j=1 while p!=None and j<i: j+=1 p=p.next if p==None or j>i: raise IndexError('not exit') s=Node(e) #生成新节点 s.next=p.next #新节点指向p的下一个元素 p.next=s #p指向s return True #返回成功 def ListDelete(self,i): p=self.head #工作节点 q=None #p的前一个节点 j=1 while p!=None and j<i: #遍历寻找节点i j+=1 q=p p=p.next if p==None or j>i:raise IndexError('not exit') if q==None: self.head=p.next #当q指向空时,头指针指向p.next else: q.next=p.next #上一个节点指向p.next,即删除p return p.data #返回p的值 def ListLength(self): cnt=0 p=self.head while p!=None: cnt+=1 p=p.next return cnt def ListShow(self): p=self.head q=self.head while p!=None: print p.data, p=p.next print '' def ListCreate(self,l): self.head=None l.reverse() for e in l: #从最后一个元素到第一个元素 p=Node(e) #生成一个新节点 p.next=self.head #这个及诶单指向链表头 self.head=p #链表头指向这个节点 def ListCreateTail(self,l): self.head=None q=None for e in l: #从第一个到最后一个元素 p=Node(e) #新生成一个节点 if self.head==None: #如果头结点为空 self.head=p #头节点指向先生存的节点 else:q.next=p #否则q指向新节点 q=p #q等于尾节点 def Union(self,lb): p=lb.head while p!=None: e=p.data if self.LoacateElem(e)==-1: #如果p.data不在la中 q=Node(e) q.next=self.head self.head=q p=p.next if __name__=='__main__': la=LinkList() lb=LinkList() print la.ListEmpty() la.ListCreateTail(range(0,20,2)) la.ListShow() lb.ListCreate(range(1,20,3)) lb.ListShow() print la.ListEmpty() print la.GetElem(7) print la.LoacateElem(8) la.ListInsert(5,15) la.ListShow() print la.ListLength() #print la.ListDelete(1) la.ListShow() la.Union(lb) la.ListShow() la.ClearList() la.ListShow()
View Code
相关文章推荐
- 读书笔记-《大话数据结构》第三章 线性表之链式存储结构
- 第3章 线性表的顺序存储c#实现---《大话数据结构》读书笔记
- 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)
- 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)
- 【大话数据结构】——-线性表之链式存储
- [读书笔记]-大话数据结构-3-线性表(一)-线性表的顺序存储
- 2.4_线性表的链式存储结构_单链表具体实现
- 数据结构2----线性表顺序存储和链式存储的实现(霜之小刀)
- 大话数据结构 code 第3章 01线性表顺序存储_List
- 线性表之链式存储结构_单链表相关算法
- 线性表学习归纳总结四:线性表链式存储 带头结点
- 数据结构一一线性表的链式存储结构之删除操作
- 数据结构:线性表的链式存储(单向链表)--Java实现
- 线性表链式存储
- 线性表链式存储的实现
- 线性表的链式存储方式及实现
- [SDUT](2117)数据结构实验之链表二:逆序建立链表 ---链式存储(线性表)
- 图的链式存储(线性表)
- C语言 数据结构 线性表 单链表 线性表的链式存储结构之一
- 线性表顺序存储与链式存储的比较