麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

python環形單鏈表的約瑟夫問題詳解

2020-02-15 23:03:26
字體:
來源:轉載
供稿:網友

題目:

一個環形單鏈表,從頭結點開始向后,指針每移動一個結點,就計數加1,當數到第m個節點時,就把該結點刪除,然后繼續從下一個節點開始從1計數,循環往復,直到環形單鏈表中只剩下了一個結點,返回該結點。

這個問題就是著名的約瑟夫問題。

代碼:

首先給出環形單鏈表的數據結構:

class Node(object): def __init__(self, value, next=0):  self.value = value  self.next = next # 指針class RingLinkedList(object): # 鏈表的數據結構 def __init__(self):  self.head = 0 # 頭部 def __getitem__(self, key):  if self.is_empty():   print 'Linked list is empty.'   return  elif key < 0 or key > self.get_length():   print 'The given key is wrong.'   return  else:   return self.get_elem(key) def __setitem__(self, key, value):  if self.is_empty():   print 'Linked list is empty.'   return  elif key < 0 or key > self.get_length():   print 'The given key is wrong.'   return  else:   return self.set_elem(key, value) def init_list(self, data): # 按列表給出 data  self.head = Node(data[0])  p = self.head # 指針指向頭結點  for i in data[1:]:   p.next = Node(i) # 確定指針指向下一個結點   p = p.next # 指針滑動向下一個位置  p.next = self.head def get_length(self):  p, length = self.head, 0  while p != 0:   length += 1   p = p.next   if p == self.head:    break  return length def is_empty(self):  if self.head == 0:   return True  else:   return False def insert_node(self, index, value):  length = self.get_length()  if index < 0 or index > length:   print 'Can not insert node into the linked list.'  elif index == 0:   temp = self.head   self.head = Node(value, temp)   p = self.head   for _ in xrange(0, length):    p = p.next   print "p.value", p.value   p.next = self.head  elif index == length:   elem = self.get_elem(length-1)   elem.next = Node(value)   elem.next.next = self.head  else:   p, post = self.head, self.head   for i in xrange(index):    post = p    p = p.next   temp = p   post.next = Node(value, temp) def delete_node(self, index):  if index < 0 or index > self.get_length()-1:   print "Wrong index number to delete any node."  elif self.is_empty():   print "No node can be deleted."  elif index == 0:   tail = self.get_elem(self.get_length()-1)   temp = self.head   self.head = temp.next   tail.next = self.head  elif index == self.get_length()-1:   p = self.head   for i in xrange(self.get_length()-2):    p = p.next   p.next = self.head  else:   p = self.head   for i in xrange(index-1):    p = p.next   p.next = p.next.next def show_linked_list(self): # 打印鏈表中的所有元素  if self.is_empty():   print 'This is an empty linked list.'  else:   p, container = self.head, []   for _ in xrange(self.get_length()-1): #    container.append(p.value)    p = p.next   container.append(p.value)   print container def clear_linked_list(self): # 將鏈表置空  p = self.head  for _ in xrange(0, self.get_length()-1):   post = p   p = p.next   del post  self.head = 0 def get_elem(self, index):  if self.is_empty():   print "The linked list is empty. Can not get element."  elif index < 0 or index > self.get_length()-1:   print "Wrong index number to get any element."  else:   p = self.head   for _ in xrange(index):    p = p.next   return p def set_elem(self, index, value):  if self.is_empty():   print "The linked list is empty. Can not set element."  elif index < 0 or index > self.get_length()-1:   print "Wrong index number to set element."  else:   p = self.head   for _ in xrange(index):    p = p.next   p.value = value def get_index(self, value):  p = self.head  for i in xrange(self.get_length()):   if p.value == value:    return i   else:    p = p.next  return -1            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产69精品久久99不卡免费版 | 久久久久久免费 | 久久久久久久亚洲精品 | 毛片毛片免费看 | 欧美a视频 | 久久精品中文字幕一区二区 | 免费观看一区 | 毛片118极品美女写真 | 午夜视频久久久 | 黄视频免费观看 | 久久精品国产99久久久古代 | 中文字幕线观看 | 99sesese| 深夜网站在线观看 | 欧美日韩高清一区二区三区 | 国产一区毛片 | 亚州精品国产 | 国产成人免费高清激情视频 | 在线看日本 | 成人在线视频免费看 | av在线1 | 一级黄色淫片 | 毛片大全免费看 | 久久久电影电视剧免费看 | 成人性视频免费网站下载软件 | 狠狠干网站 | 亚洲国产资源 | 午夜影院日韩 | 国产一国产精品一级毛片 | 日韩av片在线播放 | 久久99国产视频 | 美女在线观看视频一区二区 | 天天色人人爱 | 精品亚洲福利一区二区 | 久久久久久久久久久久久久国产 | 一级毛片在线视频 | 久久草在线视频国产 | 一区二区三区在线播放视频 | av在线播放观看 | 欧美黄色大片免费观看 | 色柚视频网站ww色 |