用Python学习数据结构2--链表

一、链表简介

  1. 链表是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接
    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())) 

运行结果如下:
这里写图片描述

本文参考自:http://www.cnblogs.com/russellluo/p/3285045.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值