单链表的学习(数据结构)

  1  """
  2 单链表学习程序
  3 重点程序
  4 """
  5 
  6 
  7 # 创建结点类
  8 class Node(object):
  9     def __init__(self, val, next=None):
 10         self.val = val  # 有用数据
 11         self.next = next
 12 
 13 
 14 # 链表的操作
 15 class LinkList(object):
 16     def __init__(self):
 17         self.head = Node(None)  # 链表的开头
 18 
 19     def init_list(self, data):
 20         p = self.head  # 可移动变量p
 21 
 22         for i in data:
 23             p.next = Node(i)
 24             p = p.next
 25 
 26     def show(self):
 27         p = self.head.next
 28 
 29         while p != None:
 30             print(p.val, end=' ')
 31             p = p.next
 32         print()
 33 
 34     #  尾部插入新的结点
 35     def append(self, item):
 36         p = self.head
 37         while p.next is not None:
 38             p = p.next
 39         p.next = Node(item)
 40 
 41     #  获取链表长度
 42     def get_length(self):
 43         n = 0
 44         p = self.head
 45         while p.next is not None:
 46             n += 1
 47             p = p.next
 48         return n
 49 
 50     #  判断链表是否为空
 51     def is_empty(self):
 52         if self.get_length() == 0:
 53             return True
 54         else:
 55             return False
 56 
 57     # 清空链表
 58     def clear(self):
 59         self.head.next = None
 60 
 61     #  获取索引值
 62     def get_item(self, index):
 63         p = self.head.next
 64         i = 0
 65         # 没有到对应索引号并且遍历索引没有到最后就循环
 66         while i < index and p is not None:
 67             i += 1
 68             p = p.next
 69         # 如果因为p到最后了则说明越界
 70         if p is None:
 71             raise IndexError("list index out of range")
 72         # i 不小于 index说明找到索引结点了
 73         else:
 74             return p.val
 75 
 76     def insert(self,index,item):
 77         if index < 0 or index > self.get_length():
 78             raise IndexError("list index out of range")
 79 
 80         # 让p移动到待插入位置的前一个
 81         p = self.head
 82         i = 0
 83         while i < index:
 84             p = p.next
 85             i += 1
 86 
 87         node = Node(item)  # 创建新的结点
 88         node.next = p.next  # 插入结点
 89         p.next = node
 90     #p.next=Node(item,p.next) # 一句话完成
 91 
 92     def delete(self,item):
 93         p = self.head
 94         while p.next is not None:
 95             # 如果值相等则越过中间的结点
 96             if p.next.val == item:
 97                 p.next = p.next.next
 98                 break
 99             p = p.next # 让程序继续前进
100         else:
101             raise ValueError("x not in list")
102 
103 
104 if __name__ == "__main__":
105     #  创建链表对象
106     link = LinkList()
107 
108     #  初始数据
109     l = [1, 2, 3, 4, 5]
110     link.init_list(l)  # 将初始数据插入链表
111     link.show()  # 遍历链表
112     link.append(6)  # 尾部插入结点
113     link.show()
114     print(link.get_length())  # 获取结点个数
115 
116     # print(link.is_empty())  # 判断是否为空
117     # link.clear()  # 清空链表
118     # print(link.is_empty())
119 
120     print(link.get_item(4)) # 获取索引值
121 
122     link.insert(1,10) # 在某个索引位置插入数据
123     link.show()
124     link.delete(10000)
125     link.show()

 

posted @ 2019-04-29 23:08  kavin_li  阅读(291)  评论(0编辑  收藏  举报