【发布时间】:2023-04-03 16:18:01
【问题描述】:
这是我的循环堆栈代码。我想确保用户不能在堆栈中输入重复的值。
CircularStack = [None] * 10
headPosition = tailPosition = 0
def AddingItem(CircularStack, tailPosition, NewItem, headPosition):
CircularStack[tailPosition] = NewItem
printQue(CircularStack)
CircularLength = len(CircularStack)
PlaceToChange = CircularStack[tailPosition] = NewItem
DelOrAddItem = input("Do you want to delete an item?")
if DelOrAddItem == "Y" or DelOrAddItem == "y":
DeleteItemFromQueue(CircularStack, tailPosition, NewItem, headPosition)
else:
if tailPosition == len(CircularStack)-1:
tailPosition = 0
AdditionItems = int(input("Add Number to Queue"))
if headPosition == tailPosition:
print("STACK FULL")
else:
AddingItem(CircularStack, tailPosition, AdditionItems, headPosition)
else:
tailPosition = tailPosition + 1
AdditionItems = int(input("Add Number to Queue"))
if headPosition == tailPosition:
print("STACK FULL")
else:
AddingItem(CircularStack, tailPosition, AdditionItems, headPosition)
def DeleteItemFromQueue(CircularStack, tailPosition, NewItem, headPosition):
if headPosition == tailPosition:
print("STACK FULL")
else:
if headPosition == len(CircularStack):
headPosition = 0
else:
headPosition = headPosition + 1
AddingItem(CircularStack, tailPosition, NewItem, headPosition)
def printQue(CircularStack):
print(CircularStack)
FirstItemInQueue = int(input("Start Circular Queue with first input"))
AddingItem(CircularStack, tailPosition, FirstItemInQueue, headPosition)
【问题讨论】:
-
但这不是首先破坏了使用堆栈的目的吗?堆栈的主要卖点是向它添加新值是 O(1)。如果您必须首先验证堆栈中不存在该值,那么添加新项目是 O(N)。
-
对不起,我的意思是我不想将相同的值输入堆栈两次。有什么方法可以轻松做到这一点?
-
使用一个类将功能包装在一起,并将值也偷偷地存储到一个集合中,并根据需要从集合中添加和删除元素。提供快速查找时间,但需要比扫描整个堆栈更多的存储空间
-
@IanQuah,这听起来是个不错的建议,但是我对 python 还是很陌生,以前从未遇到过一套。你能解释一下我会怎么做吗?