一、链表简介
- 链表是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接
2.根据结构的不同,链表可分为单项链表,单项循环链表,双向链表,双向循环链表等。
单项链表和单项循环链表结构如图所示:
二、单项循环列表操作
三、Python实现单向循环列表
Python中采用“引用+类”来实现链表,Node类代表链表中的一个节点
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
class Node:
#初始化结点
def __init__(self,initdata):
self.__data=initdata
self.__next=None
#获取结点数值
def getData(self):
return self.__data
#获取结点指针域
def getNext(self):
return self.__next
#设置结点取值
def setData(self,newdata):
self.__data=newdata
#设置结点指针域
def setNext(self,newnext):
self.__next=newnext
class SinCyLinkedList:
#初始化链表为空
def __init__(self):
self.head=Node(None)
self.head.setNext(self.head)
#增加第一个结点
def add(self,item):
temp=Node(item)
temp.setNext(self.head.getNext())
self.head.setNext(temp)
#删除指定结点
def remove(self,item):
prev=self.head
while prev.getNext()!=self.head:
cur=prev.getNext()
if cur.getData()==item:
prev.setNext(cur.getNext())
prev=prev.getNext()
#搜索结点是否存在于链表中
def search(self,item):
cur=self.head.getNext()
while cur!=self.head:
if cur.getData()==item:
return True
cur=cur.getNext()
return False
#判断链表是否为空
def empty(self):
return self.head.getNext()==self.head
#求链表的大小
def size(self):
count=0
cur=self.head.getNext()
while cur!=self.head:
count+=1
cur=cur.getNext()
return count
if __name__=='__main__':
s=SinCyLinkedList()
print('s.empty()==%s,s.size()==%s' % (s.empty(),s.size()))
s.add(19)
s.add(86)
print('s.empty()==%s,s.size()==%s' % (s.empty(),s.size()))
print('86 is%s in s' % ('' if s.search(86) else 'not'))
print('4 is%s in s' % ('' if s.search(4) else 'not'))
s.remove(19)
print('s.empty()==%s,s.size()==%s' % (s.empty(),s.size()))
运行结果如下: