要求将算法1~6设计为3. 3. 4节定义的顺序表Dy
要求将算法1~6设计为3. 3. 4节定义的顺序表DynamicArrayList类的方法。
2.设计算法,将顺序表中存放的元素循环左移p位。即L(a_o,a_1,a_2···.a_p···..a_n-1变为L= (a_p·a_p+1····.a_n-1.a_o····a_p-1)。
答案
class DynamicArrayList: def __init__(self): self.data = [] def reverse(self, left, right): """辅助函数:将data[left...right]原地逆置""" while left < right: self.data[left], self.data[right] = self.data[right], self.data[left] left+= 1 right-= 1 def left_shift_p(self, p): """循环左移p位,三次逆置法""" n = len(self.data) if n == 0: return p = p % n # p大于表长时取模,处理p>=n的情况 self.reverse(0, p-1) self.reverse(p, n-1) self.reverse(0, n-1)