python實現鍊錶的增刪改查操作

2021-09-02 22:32:59 字數 4484 閱讀 5485

# _*_ coding:utf-8 _*_

''' @author:xianyt

@date:2018/

@func:用python實現鍊錶操作

'''class node(object):

'''data:節點儲存的資料

_next:儲存下乙個節點物件

'''def __init__(self, data, pnext=none):

self.data = data

self._next = pnext

def __repr__(self):

'''用來定義node的字元輸出

:return: 資料的data

'''return str(self.data)

class operating(object):

def __init__(self):

self.head = none

self.length = 0

def isempty(self):

#判斷鍊錶是否為空

return (self.length == 0)

'''在末尾新增乙個節點

:param dataornode:

:return:

'''item = none

#判斷輸入值是否是乙個節點,如果不是則建立乙個節點

if isinstance(dataornode, node):

item = dataornode

else:

item = node(dataornode)

#如果鍊錶為空,則建立乙個鍊錶。長度加一

if self.isempty():

self.head = item

self.length += 1

print('插入成功********')

return true

else:

#遍歷到鍊錶末尾並新增至末尾,長度加一

node = self.head

while node._next:

node = node._next

node._next = item

self.length += 1

print('插入成功********')

return true

def addindex(self, dataornode, index):

'''在指定位置上新增節點

:param dataornode:

:param index:

:return:

'''# 判斷數值不是節點,則建立節點

if not isinstance(dataornode, node):

items = node(dataornode)

#判斷鍊錶是否存在或是指定位置大於鍊錶長度

if self.isempty() or index>=self.length:

return true

else:

node = self.head

#判斷是否是插入乙個頭結點

if index == 0:

items._next = node

self.head = items

self.length += 1

print('插入成功********')

return true

i = 0

#找到指定位置

while iself.length or index<0:

print('輸入位置不合理')

return false

#判斷輸入數值是否是節點,取出數值

if isinstance(dataornode, node):

dataornode = dataornode.data

node = self.head

i = 0

while node:

#修改數值

if i == index:

node.data = dataornode

print('修改節點成功*********')

return true

i += 1

node = node._next

def find(self, dataornode):

'''查詢指定節點的資料

:param dataornode:

:return: 返回空或者位置

'''index = 0

#判斷鍊錶是否為空

if self.isempty():

print('鍊錶為空**************')

return false

node = self.head

# 判斷是否是節點

if isinstance(dataornode, node):

# 遍歷查詢

while node:

# 判斷是否找到

if node.data == dataornode.data:

print('數值處於鍊錶{}*************'.format(index))

return index

index += 1

node = node._next

else:

#遍歷完成都沒有找到

print('沒有找到該節點**************')

return false

#不是節點

else:

while node:

if dataornode == node.data:

print('數值處於鍊錶{}位置*************'.format(index))

return index

node = node._next

index += 1

else:

# 遍歷完成都沒有找到

print('沒有找到該節點**************')

return false

def show(self):

'''輸出鍊錶

:return:

'''#判斷鍊錶是否為空

if self.isempty():

print('鍊錶還是空的喲*******')

else:

print('鍊錶輸出:',end='')

node = self.head

while node:

print('{}'.format(node.data), end='-')

node = node._next

print()

def clear(self):

'''清除鍊錶

:return:

'''self.head = none

self.length = 0

if __name__ == "__main__":

o = operating()

while true:

print('鍊錶基本操作(0:輸出鍊錶,1:新增節點,2:新增指定位置節點,3:刪除節點,4:修改節點,5:查詢下標位置, 其他數值:退出程式)')

i = int(input('請輸入相應操作:'))

if i == 0:

o.show()

elif i == 1:

try:

data = int(input('請輸入節點數值:'))

except:

print('請輸入數值:')

else:

elif i == 2:

try:

data = int(input('請輸入節點數值:'))

index = int(input('請輸入指定位置:'))

except:

print('請輸入數值')

else:

o.addindex(data, index)

elif i == 3:

try:

data = int(input('請輸入需要刪除的節點數值:'))

except:

print('請輸入數值')

else:

o.delete(data)

elif i == 4:

try:

index = int(input('請輸入需要修改的指定位置:'))

data = int(input('請輸入需要修改的數值:'))

except:

print('請輸入數值:')

else:

o.update(data, index)

elif i == 5:

try:

data = int(input('請輸入查詢節點數值:'))

except:

print('請輸入數值:')

else:

o.find(data)

else:

o.clear()

break

mysql增刪改查鍊錶 鍊錶的增刪改查

include include 先定義鍊錶裡面的元素。typedef struct nodemynode 定義整個鍊錶。typedef struct linkmylink int isempty to mylink mylink mylink 判斷鍊錶是否為空。int push to mylinki...

鍊錶 增刪改查

實現 鍊錶的增刪改查 package com.baicai.linkedlist public class singlinkedlistdome 定義乙個singlinkedlist管理我們的英雄 class singlelinkedlist 如果沒有找到最後的乙個節點就直接往後面找 temp te...

單向鍊錶python實現,增刪改查 鍊錶反轉

單向鍊錶,實現了增刪改查以及鍊錶反轉,class node def init self,val self.val val self.nextp none class linkedlist def init self self.length 0 self.head none self.tail non...