【问题标题】:How to prevent duplicate values in circular stack?如何防止循环堆栈中的重复值?
【发布时间】: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 还是很陌生,以前从未遇到过一套。你能解释一下我会怎么做吗?

标签: python stack


【解决方案1】:
def AddingItem(CircularStack, tailPosition, NewItem, headPosition):
    if NewItem in CircularStack:
        #item already exists; return without doing anything.
        return
    #rest of function goes here

或者,循环直到值不在列表中。

def AddingItem(CircularStack, tailPosition, NewItem, headPosition):
    while NewItem in CircularStack:
        NewItem = int(input("Item already exists. Please enter a different value: "))
    #rest of function goes here

【讨论】:

  • 这可行,但它会完全停止程序,有没有什么办法可以在输入复制后添加输入?
猜你喜欢
  • 2017-07-24
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2017-11-01
相关资源
最近更新 更多