一、线性表
线性表的定义:
线性表是具有相同数据类型的有限数据的序列。
线性表的特点:
出了第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外有且只有一个后继。
线性表是一种逻辑结构,表示元素之间的一一的相邻关系,顺序表和链表是指存储结构,两者属于不同的概念。
线性表的顺序表示:
线性表的顺序存储即数组的动态、静态分配,特点是可以随机访问。
线性表的链式表示:
线性表的链式存储即单链表、双连表、循环单链表以及循环双连表,特点是随机插入,不可随机访问。
单链表的实现(python):
1 #-*- coding:utf-8 -*- 2 class Node: 3 def __init__(self,values,next=None): 4 self.values=values 5 self.next=None 6 7 class linklist(): 8 def __init__(self): 9 self.head=None 10 11 #创建链表 12 def listcreate(self,n): 13 if n==0: 14 return False 15 elif n==1: 16 print ‘请输入头结点:‘ 17 num=raw_input() 18 return Node(num) 19 else: 20 print ‘请输入头结点:‘ 21 num = raw_input() 22 root=Node(num) 23 temp=root 24 for i in range(2,n+1): 25 print ‘请输入第‘+str(i)+‘个结点:‘ 26 num = raw_input() 27 temp.next=Node(num) 28 temp=temp.next 29 return root 30 31 #链表长度 32 def listlen(self,head): 33 n=0 34 if head==None: 35 return n 36 while True: 37 n+=1 38 if head.next==None: 39 break 40 head=head.next 41 return n 42 43 #读取链表所有数据 44 def listread(self,head): 45 if self.is_empty(head): 46 return ‘链表为空!!!‘ 47 while True: 48 if head.next==None: 49 print head.values 50 break 51 print head.values 52 head=head.next 53 54 #链表是否为空 55 def is_empty(self,head): 56 if self.listlen(head)==0: 57 return True 58 else: 59 return False 60 61 #链表数据插入 62 def listinsert(self,head,n,num): 63 Head=head 64 if self.listlen(head)<n-1 or self.is_empty(head): 65 print ‘链表为空或者插入地点超过链表长度!‘ 66 elif n==1: 67 node=Node(num) 68 node.next=head 69 Head=node 70 else: 71 c=1 72 while True: 73 if c==n-1: 74 node=Node(num) 75 temp=head.next 76 head.next=node 77 node.next=temp 78 break 79 else: 80 c+=1 81 head=head.next 82 return Head 83 84 #链表中以数据进行删除 85 def listdelete_data(self,head,data): 86 Head=head 87 if head.values==str(data): 88 Head=head.next 89 return Head 90 while True: 91 temp=head.next 92 if temp.values==data: 93 head.next=head.next.next 94 break 95 elif temp.next==None: 96 print str(data)+‘不存在链表中!!!‘ 97 break 98 else: 99 head=head.next 100 return Head 101 102 #链表中以下标进行删除 103 def listdelete_index(self,head,index): 104 if index<0 or index>self.listlen(head)+1: 105 print ‘下标不规范,请重新输入!!‘ 106 Head = head 107 c=1 108 if index == c: 109 Head = head.next 110 return Head 111 while True: 112 c+=1 113 if index==c: 114 head.next = head.next.next 115 break 116 head=head.next 117 return Head 118 119 # 反转链表 120 def listreverse(self,head): 121 n=self.listlen(head) 122 c=1 123 while True: 124 temp=head 125 while True: 126 if temp.next==None: 127 break 128 temp=temp.next 129 head = self.listdelete_index(head, n) 130 head=self.listinsert(head,c,temp.values) 131 c+=1 132 if c==n+1: 133 break 134 return head