python单链表操作_单链表的基本操作(python)

本文介绍了如何使用Python实现单链表的数据结构,并提供了详细的增删改查操作实现,包括初始化链表、输出链表、获取指定索引元素、获取链表长度、判断链表是否为空、删除指定索引元素、插入元素、修改元素以及查找元素的次数等方法。
摘要由CSDN通过智能技术生成

用python实现单链表的增删改查

#!/usr/bin/python

#coding: utf-8

class Node(object):

"数据域"

def __init__(self, data, next = 0):

self.data = data

self.next = next

class LinkList(object):

"处理类"

def __init__(self):

"head用来指向Node类变量, length用来计算单链表的长度(每插入一个元素,长度加1,如果删除的时候,长度减1)"

self.head = 0

self.length = 0

def InitList(self, data):

"单链表的初始化"

self.head = Node(data[0])

p = self.head

self.length += 1

for x in data[1:]:

node = Node(x)

# 注意下面两句话的顺序,不要弄颠倒,首先要让p指向node,然后再把它重新赋值给p,这样才完成了对p的更新

p.next = node

p = p.next

self.length += 1

def OutputList(self):

"输出单链表, 查看单链表的所有 元素"

if self.head == 0:

print(u"单链表中没有元素")

return

p = self.head

while p.next != 0:

print p.data, "->",

p = p.next

print(p.data)

def Get_Index_List(self, index):

"获取当前索引位置的元素"

if self.Is_Not_Empty() == True:

print u"单链表为空"

return False

if index < 1 or index > self.length:

print u"输入位置不合法"

return False

i = 1

p = self.head

while i < index:

p = p.next

i += 1

return p.data

def GetLength(self):

"获取单链表的长度"

return self.length

def Is_Not_Empty(self):

"判断单链表是否为空"

return self.length == 0

def DelList(self, index):

"删除指定索引的元素"

if self.Is_Not_Empty() == True:

print u"单链表为空"

return

if index < 1 or index > self.length:

print u"输入位置不合法"

return

p = self.head

if index == 1:

self.head = p.next

self.length -= 1

return

i = 1

while p.next != 0 and i < index - 1:

# 退出while循环的时候 i 的值为 index - 1

p = p.next;

i += 1

# 用r指向p的后面的元素

r = p.next

# 连接操作

p.next = r.next

self.length -= 1

def InsList(self, index, e):

"将元素e插入到索引为i的位置"

if index < 1 or index > self.length + 1:

# 可以插入的最后一个位置是长度加1

print u"插入位置不合法"

return

r = Node(e)

p = self.head

i = 1

while i < index - 1:

p = p.next

i += 1

r.next = p.next

p.next = r

p = p.next

self.length += 1

def ChaList(self, index, e):

"把index索引位置上面的元素改为e"

if self.Is_Not_Empty() == True:

print u"单链表为空"

return

if index < 1 and index > self.length:

print u"修改位置不合法"

return

p = self.head

i = 1

while i < index:

p = p.next

i += 1

p.data = e

return

def FindList(self, e):

"查找元素e出现的次数"

if self.Is_Not_Empty() == True:

return 0

p = self.head

i = 1

count = 0

while p.next != 0:

if p.data is e:

count += 1

p = p.next

i += 1

# 不要忘记最后一位也要判断

if p.data is e:

count += 1

return count

def ClearList(self, ):

"清空单链表"

self.head = 0

self.length = 0

if __name__ == "__main__":

L = LinkList()

L.InitList([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

L.OutputList()

# 输出单链表的长度

print u"单链表的长度为:", L.GetLength()

# 删除

L.DelList(5)

L.OutputList()

print u"单链表的长度为:", L.GetLength()

L.DelList(0)

L.OutputList()

print u"单链表的长度为:", L.GetLength()

L.DelList(9)

L.OutputList()

print u"单链表的长度为:", L.GetLength()

# 删除

L.InsList(5, 5)

L.OutputList()

print u"单链表的长度为:", L.GetLength()

L.InsList(10, 10)

L.OutputList()

print u"单链表的长度为:", L.GetLength()

# 修改

L.ChaList(5, 10)

L.OutputList()

# 查找

t = L.Get_Index_List(5)

if type(t) != "bool":

print u"当前位置的元素为:", t

else:

print u"出错啦!!"

print u"该元素出现的次数为:", L.FindList(10)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值