Implementing Stack with Python

前端 未结 12 1095
长发绾君心
长发绾君心 2021-01-17 16:16

I am trying to implement a simple stack with Python using arrays. I was wondering if someone could let me know what\'s wrong with my code.

class myStack:
            


        
相关标签:
12条回答
  • 2021-01-17 17:00

    The proper implementation would include __iter__ also since Stack needs to be LIFO order.

    class Stack:
        def __init__(self):
            self._a = []
    
        def push(self, item):
            self._a.append(item)
    
        def pop(self):
            return self._a.pop()
    
        def isEmpty(self):
            return len(self._a) == 0
    
        def __iter__(self):
            return reversed(self._a)
    
        def __str__(self):
            # return str(list(reversed(self._a)))
            return str(list(iter(self)))
    
    def main():
        stack = Stack()
        stack.push('a')
        stack.push('b')
        stack.push('c')
        stack.pop()
        print(stack)
        if stack:
            print("stack not empty")
        stack.pop()
        stack.pop()
        if stack.isEmpty():
            print("stack empty")
    
    if __name__ == '__main__':
        main()
    
    0 讨论(0)
  • 2021-01-17 17:02

    Your stack is an array...

    class stacked(): # Nodes in the stack
        def __init__(self,obj,next):
            self.obj = obj
            self.next = next
        def getObj(self):
            return(self.obj)
        def getNext(self):
            return(self.next)
    
    class stack(): # The stack itself
        def __init__(self):
            self.top=None
        def push(self,obj):
            self.top = stacked(obj,self.top)
        def pop(self):
            if(self.top == None):
                return(None)
            r = self.top.getObj()
            self.top = self.top.getNext()
            return(r)
    
    0 讨论(0)
  • 2021-01-17 17:05

    I corrected a few problems below. Also, a 'stack', in abstract programming terms, is usually a collection where you add and remove from the top, but the way you implemented it, you're adding to the top and removing from the bottom, which makes it a queue.

    class myStack:
         def __init__(self):
             self.container = []  # You don't want to assign [] to self - when you do that, you're just assigning to a new local variable called `self`.  You want your stack to *have* a list, not *be* a list.
    
         def isEmpty(self):
             return self.size() == 0   # While there's nothing wrong with self.container == [], there is a builtin function for that purpose, so we may as well use it.  And while we're at it, it's often nice to use your own internal functions, so behavior is more consistent.
    
         def push(self, item):
             self.container.append(item)  # appending to the *container*, not the instance itself.
    
         def pop(self):
             return self.container.pop()  # pop from the container, this was fixed from the old version which was wrong
    
         def peek(self):
             if self.isEmpty():
                 raise Exception("Stack empty!")
             return self.container[-1]  # View element at top of the stack
    
         def size(self):
             return len(self.container)  # length of the container
    
         def show(self):
             return self.container  # display the entire stack as list
    
    
    s = myStack()
    s.push('1')
    s.push('2')
    print(s.pop())
    print(s.show())
    
    0 讨论(0)
  • 2021-01-17 17:05

    Below is my implementation

    class Stack:
        def __init__(self):
            self.items = list()
        def is_empty(self):
            return self.items == []
        def peek(self):
            if self.is_empty():
                print('Cannot peek empty stack')
                return
            else:
                return self.items[-1]
        def pop(self):
            if self.is_empty():
                print('Cannot pop an empty stack')
                return
            else:
                return self.items.pop()
        def size(self):
            return len(self.items)
        def push(self,data):
            self.items.append(data)
    
    0 讨论(0)
  • 2021-01-17 17:06

    Below is the simple implementation of stack in python. In addition, it returns the middle element at any point in time.

      class Stack:
            def __init__(self):
                self.arrList = []
    
            def isEmpty(self):
                if len(self.arrList):
                    return False
                else:
                    return True
    
            def push(self, val):
                self.arrList.append(val)
    
            def pop(self):
                if not self.isEmpty():
                    self.arrList[len(self.arrList)-1]
                    self.arrList = self.arrList[:len(self.arrList)-1]
                else:
                    print "Stack is empty"
    
            def returnMiddle(self):
                if not self.isEmpty():
                    mid = len(self.arrList)/2
                    return self.arrList[mid]
                else:
                    print "Stack is empty"
    
            def listStack(self):
                print self.arrList
    
        s = Stack()
        s.push(5)
        s.push(6)
        s.listStack()
        print s.returnMiddle()
        s.pop()
        s.listStack()
        s.push(20)
        s.push(45)
        s.push(435)
        s.push(35)
        s.listStack()
        print s.returnMiddle()
        s.pop()
        s.listStack()
    

    Output:

    [5, 6]
    6
    [5]
    [5, 20, 45, 435, 35]
    45
    [5, 20, 45, 435]
    
    0 讨论(0)
  • 2021-01-17 17:10

    Implementing a Stack in Python from the book of Problem Solving with Algorithms and Data Structures

    0 讨论(0)
提交回复
热议问题