一、动态数组的实现
- 首先,我们需要创建一个
DynamicArray
类,该类将管理我们的动态数组。- 动态数组能够动态地调整其大小,以容纳更多的元素。
目录
一、动态数组的实现
代码示例:
二、序列队列的实现
接下来,我们基于DynamicArray类实现SeqQueue类。序列队列将提供标准的队列操作,如入队、出队、检查队列是否为空等。
-
代码示例:
class DynamicArray: def __init__(self, initial_capacity=10): """初始化动态数组,设置初始容量""" self.capacity = initial_capacity self.size = 0 self.array = [None] * self.capacity def is_empty(self): """检查动态数组是否为空""" return self.size == 0 def is_full(self): """检查动态数组是否已满""" return self.size == self.capacity def resize(self, new_capacity): """调整动态数组的大小""" new_array = [None] * new_capacity for i in range(self.size): new_array[i] = self.array[i] self.array = new_array self.capacity = new_capacity def insert(self, index, data): """在指定索引处插入数据""" if self.is_full(): self.resize(self.capacity * 2) # 扩容 if index < 0 or index > self.size: raise IndexError("Index out of range") for i in range(self.size, index, -1): self.array[i] = self.array[i - 1] self.array[index] = data self.size += 1 def remove(self, index): """移除指定索引处的数据""" if self.is_empty(): raise IndexError("Cannot remove from an empty array") if index < 0 or index >= self.size: raise IndexError("Index out of range") for i in range(index, self.size - 1): self.array[i] = self.array[i + 1] self.array[self.size - 1] = None self.size -= 1 if self.size > 0 and self.size == self.capacity // 4: # 缩容 self.resize(self.capacity // 2) def get(self, index): """获取指定索引处的数据""" if index < 0 or index >= self.size: raise IndexError("Index out of range") return self.array[index] def __len__(self): """返回动态数组的大小""" return self.size
二、序列队列的实现
-
接下来,我们基于
DynamicArray
类实现SeqQueue
类。序列队列将提供标准的队列操作,如入队、出队、检查队列是否为空等。
class SeqQueue: def __init__(self, initial_capacity=10): """初始化序列队列,设置初始容量""" self.queue = DynamicArray(initial_capacity) def is_empty(self): """检查队列是否为空""" return self.queue.is_empty() def enqueue(self, item): """入队操作,将元素添加到队列末尾""" self.queue.insert(self.queue.size, item) def dequeue(self): """出队操作,移除并返回队列的第一个元素""" if self.is_empty(): raise IndexError("Dequeue from an empty queue") return self.queue.remove(0) def size(self): """返回队列中元素的数量""" return len(self.queue) def front(self): """返回队列的第一个元素,但不移除它""" if self.is_empty(): raise IndexError("Queue is empty") return self.queue.get(0) def back(self): """返回队列的最后一个元素,但不移除它""" if self.is_empty(): raise IndexError("Queue is empty") return self.queue.get(self.queue.size - 1)def destroy(self): self.queue = None # 使用示例 max_size = 10 seq_queue = SeqQueue(max_size) # 入队 seq_queue.push("data1") seq_queue.push("data2") # 获取队首元素 print(seq_queue.front()) # 输出: data1 # 获取队尾元素 print(seq_queue.back()) # 输出: data2 # 出队 seq_queue.pop() # 再次获取队首元素 print(seq_queue.front()) # 输出: data2 # 销毁队列 seq_queue.destroy()
在这个文件中,
DynamicArray
类定义了一个动态数组,而SeqQueue
类则定义了一个基于DynamicArray
的序列队列。您可以直接运行这个文件来测试这些类的功能。请注意,这个示例假设您希望队列在出队时返回被移除的元素,所以pop
方法现在返回被移除的元素。如果您不希望这样,您可以相应地调整pop
方法的实现。