教你如何運用python golang實現迴圈鍊錶

2021-10-10 09:55:25 字數 2739 閱讀 7672

這篇文章主要介紹了python/golang如何實現迴圈鍊錶,幫助大家更好的理解和學習迴圈鍊錶的實現方法,感興趣的朋友可以了解下

迴圈鍊錶就是將單鏈表的末尾指向其頭部,形成乙個環。迴圈鍊錶的增刪操作和單鏈表的增刪操作區別不大。只是增加時,需要考慮空鍊錶增加第乙個節點的特殊情況;刪除時需考慮刪除節點是頭/尾節點,和鍊錶中只有乙個節點的特殊情況。

golang實現:

type node struct 

type circle struct

// 增加節點:

func (c *circle) add(value int)

if c.lenth == 0 else

c.lenth += 1

c.printcircle()}

// 刪除節點:

func (c *circle) remove(v int) else if c.lenth == 1 && c.tail.value == v

pre := c.tail

cur := c.tail.next // 頭節點

for i := 0; i < c.lenth; i++

pre.next = cur.next

c.lenth -= 1

c.printcircle()

return

} pre = cur

cur = cur.next

} fmt.println(v, "不在環中")}

//列印節點:

func (c *circle) printcircle()

cur := c.tail.next // 頭節點

for i := 0; i < c.lenth; i++

fmt.println()}

func testcircle()

circle.add(1)

circle.remove(10)

circle.printcircle()

}

python實現:

class node:

def __init__(self, value, next=none):

self.value = value

self.next = next

def __str__(self):

return str(self.value)

class circle:

def __init__(self):

self.tail = none

self.lenth = 0

# 增加節點

def add(self, v):

new_node = node(v)

if self.lenth == 0: # 空煉表中新增節點

self.tail = new_node

self.tail.next = new_node

else:

new_node.next = self.tail.next

self.tail.next = new_node

self.tail = new_node

self.lenth += 1

# 刪除節點

def remove(self, v):

if self.lenth == 0:

print("空環")

return

elif self.lenth == 1 and self.tail.value == v: # 鍊錶中只有乙個節點的特殊情況

self.tail = none

self.lenth = 0

return

pre = self.tail

cur = self.tail.next # 頭節點

for i in range(self.lenth):

if cur.value == v:

if cur == self.tail: # 如果刪除的節點是尾節點,需更新tail

self.tail = pre

pre.next = cur.next

self.lenth -= 1

return

pre = cur

cur = cur.next

print(v, "不在環中")

# 列印鍊錶

def print_circle(self):

if self.lenth == 0:

print('空環')

return

cur = self.tail.next # 頭節點

for i in range(self.lenth):

print(cur, end=" ")

cur = cur.next

print()

def test():

c = circle()

for i in range(10):

c.add(i)

c.print_circle()

c.remove(0)

c.print_circle()

c.remove(10)

c.print_circle()

c.remove(9)

c.print_circle()

c.remove(4)

c.print_circle()

以上就是python/golang實現迴圈鍊錶的示例**的詳細內容。

教你如何運用自聯接(不太明白)

sql有乙個技巧可以運用自聯接來把每一行與下一行對應。像上面這種查詢,你可以製造像秩 rank 或者位置 position 行差 row differences 累積總計 running total 等等的資料 it專家網獨家 如果不使用分析函式,怎麼樣能夠查詢累積和?例如 1 150 150 1 ...

教你迅速運用Summary

在研究tensorflow自帶的例程speech command,順便學習tensorflow的一些基本用法。其中tensorboard 作為一款視覺化神器,可以說是學習tensorflow時模型訓練以及引數視覺化的法寶。而在訓練過程中,主要用到了tf.summary 的各類方法,能夠儲存訓練過程以...

教你如何運用golang 實現陣列的隨機排序

本文主要介紹了golang 陣列隨機排序的實現,文中通過示例 介紹的非常詳細,具有一定的參考價值,感興趣的小夥伴們可以參考一下 前言 目前接到乙個推薦資料的需求,需要將資料庫中獲取到的資料進行隨機排序後返回給使用者。考慮了一下,有兩種使用方式,一種是通過資料庫 order by rand 還有一種就...