指出并改正一下代码:MaxSize=100 #全局变量,假设容量为100 class CSqQueue1: #本例循环队列类 def __init__(self): #构造方法 self.data=[None]*MaxSize #存放队列中元素 self.front=0 #队头指针 self.count=0 #队中元素个数 rear=(self.front+self.count)%MaxSize; #队列的基本运算算法 def empty(self): #判断队列是否为空 return self.count==0 def push(self,e): #元素e进队 rear=(self.front+self.count)%MaxSize; assert self.count!=MaxSize #检测队满 rear=(rear+1) % MaxSize self.data[rear]=e self.count+=1 #元素个数增1 def pop(self): # 出队元素 assert not self.empty() # 检测队空 self.count -= 1 # 元素个数减1 self.front = (self.front + 1) % MaxSize # 队头指针循环进1 return self.data[self.front] def gethead(self): # 取队头元素 assert not self.empty() # 检测队空 head = (self.front + 1) % MaxSize # 求队头元素的位置 return self.data[head] def size(self): # 返回队中元素个数 rear=(self.front+self.count)%MaxSize; return ((self.rear - self.front + MaxSize) % MaxSize) #主程序 if __name__ == '__main__': st=CSqQueue1() st.push(6) st.push(4) st.push(11) st.push(9) print() print("队头元素: %d" % (st.gethead())) print("队列个数:%d" % (st.size())) print("出队元素:%d" % (st.pop())) print("队列个数:%d" % (st.size())) print()
时间: 2024-04-01 07:31:51 浏览: 80
代码中存在如下问题:
1. 在构造方法中,应该将rear的计算放在方法内部,而不是放在类定义时。因为构造方法是在实例化对象时调用的,此时才能确定rear的值。应该修改为:`self.rear = (self.front + self.count) % MaxSize`
2. 在push方法中,判断队列是否已满的assert语句有误,应该将判断条件修改为`self.count != MaxSize-1`,因为当队列中元素个数等于MaxSize-1时,队列就已经满了。修改后的代码为:`assert self.count != MaxSize-1 # 检测队满`
3. 在size方法中,变量名rear写错了,应该改为self.rear。
修改后的代码如下:
相关问题
修改以下代码:MaxSize=100 #全局变量,假设容量为100 class CSqQueue1: #本例循环队列类 def __init__(self): #构造方法 self.data=[None]*MaxSize #存放队列中元素 self.rear=0 #队头指针 self.count=0 #队中元素个数 self.front = (self.rear - self.count + MaxSize) % MaxSize #队列的基本运算算法 def empty(self): #判断队列是否为空 return self.count==0 def push(self,e): #元素e进队 assert self.count!=MaxSize #检测队满 rear=(self.rear+1) % MaxSize self.data[rear]=e self.count+=1 #元素个数增1 def pop(self): # 出队元素 assert not self.empty() # 检测队空 self.count -= 1 # 元素个数减1 self.front = (self.rear - self.count + MaxSize) % MaxSize # 队头指针循环进1 return self.data[self.front] def gethead(self): # 取队头元素 assert not self.empty() # 检测队空 head = (self.front + 1) % MaxSize # 求队头元素的位置 return self.data[head] def size(self): # 返回队中元素个数 return ((self.rear - self.front + MaxSize) % MaxSize) #主程序 if __name__ == '__main__': st=CSqQueue1() st.push(7) st.push(5) st.push(10) st.push(3) print() print("队头元素: %d" % (st.gethead())) print(" 队列元素个数:%d" % (st.size())) print(" 出队元素:%d" % (st.pop())) print(" 队列元素个数:%d" % (st.size())) print()
MaxSize应该写成max_size,遵循Python的命名规范。除此之外,代码看起来没有其他问题。下面是修改后的代码:
max_size = 100 # 全局变量,假设容量为100
class CSqQueue1: # 本例循环队列类
def __init__(self): # 构造方法
self.data = [None] * max_size # 存放队列中元素
self.rear = 0 # 队头指针
self.count = 0 # 队中元素个数
self.front = (self.rear - self.count + max_size) % max_size # 队列的基本运算算法
def empty(self): # 判断队列是否为空
return self.count == 0
def push(self, e): # 元素e进队
assert self.count != max_size # 检测队满
rear = (self.rear + 1) % max_size
self.data[rear] = e
self.count += 1 # 元素个数增1
def pop(self): # 出队元素
assert not self.empty() # 检测队空
self.count -= 1 # 元素个数减1
self.front = (self.rear - self.count + max_size) % max_size # 队头指针循环进1
return self.data[self.front]
def gethead(self): # 取队头元素
assert not self.empty() # 检测队空
head = (self.front + 1) % max_size # 求队头元素的位置
return self.data[head]
def size(self): # 返回队中元素个数
return ((self.rear - self.front + max_size) % max_size)
if __name__ == '__main__':
st = CSqQueue1()
st.push(7)
st.push(5)
st.push(10)
st.push(3)
print()
print("队头元素: %d" % (st.gethead()))
print(" 队列元素个数:%d" % (st.size()))
print(" 出队元素:%d" % (st.pop()))
print(" 队列元素个数:%d" % (st.size()))
print()
指出并改正以下代码中的错误:MaxSize=100 #全局变量,假设容量为100 class CSqQueue1: #本例循环队列类 def __init__(self): #构造方法 self.data=[None]*MaxSize #存放队列中元素 self.front=0 #队头指针 self.count=0 #队中元素个数 rear=(self.front+self.count)%MaxSize; #队列的基本运算算法 def empty(self): #判断队列是否为空 return self.count==0 def push(self,e): #元素e进队 rear=(self.front+self.count)%MaxSize; assert self.count!=MaxSize #检测队满 rear=(rear+1) % MaxSize self.data[rear]=e self.count+=1 #元素个数增1 def pop(self): # 出队元素 assert not self.empty() # 检测队空 self.count -= 1 # 元素个数减1 self.front = (self.front + 1) % MaxSize # 队头指针循环进1 return self.data[self.front] def gethead(self): # 取队头元素 assert not self.empty() # 检测队空 head = (self.front + 1) % MaxSize # 求队头元素的位置 return self.data[head] def size(self): # 返回队中元素个数 rear=(self.front+self.count)%MaxSize; return ((self.rear - self.front + MaxSize) % MaxSize) #主程序 if __name__ == '__main__': st=CSqQueue1() st.push(6) st.push(4) st.push(11) st.push(9) print() print("队头元素: %d" % (st.gethead())) print("队列个数:%d" % (st.size())) print("出队元素:%d" % (st.pop())) print("队列个数:%d" % (st.size())) print()
代码中存在如下错误:
1. 在构造方法中,应该在rear的计算中使用self.front和self.count,而不是直接使用rear。应该修改为:`self.rear = (self.front + self.count) % MaxSize`
2. 在push方法中,应该先检测队列是否已满,然后再添加元素。应该修改为:`assert self.count!=MaxSize-1 # 检测队满` 。
3. 在size方法中,应该使用`self.rear`而不是`rear`,因为`rear`在该方法中未定义。应该修改为:`return ((self.rear - self.front + MaxSize) % MaxSize)`
修改后的代码如下:
阅读全文