예제 #1
0
    def iter_dfs(self, v):
        """
        시작 정점으로 돌아가 
        더 이상 방문할 정점이 없어야 종료
        """
        s = Stack()
        self.init_visited()

        s.push(v)
        #방문 체크 및 방문
        self.visited[v] = True
        print(v, end="  ")

        #아직 방문하지 않은 정점을 방문했는가
        is_visited = False

        while not s.empty():
            is_visited = False
            v = s.peek()
            #인접 리스트를 받아온다.
            u = self.adjacency_list[v]
            while u:
                if not self.visited[u.vertex]:
                    s.push(u.vertex)
                    #방문 체크 및 방문
                    self.visited[u.vertex] = True
                    print(u.vertex, end="  ")
                    #아직 방문하지 않은 정점을 방문했으므로
                    is_visited = True
                    break
                u = u.link
            if not is_visited:
                s.pop()
def print_num_use_stack(n):
    from stack1 import Stack
    s = Stack()
    while n > 0:
        s.push(n)
        n -= 1

    while not s.is_empty():
        print(s.pop())
예제 #3
0
def div_by_2(dec_num):
    s = Stack()

    while dec_num > 0:
        rem = dec_num % 2
        s.push(rem)
        dec_num = dec_num // 2

    bin_num = ""
    while not s.is_empty():
        bin_num += str(s.pop())

    return bin_num
예제 #4
0
def parChecker(symbolString):
    s = Stack()
    balanced = True
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        if symbol == "(":
            s.push(symbol)
        else:
            if s.isEmpty():
                balanced = False
            else:
                s.pop()

        index = index + 1

    if balanced and s.isEmpty():
        return True
    else:
        return False
예제 #5
0
def getBinary_num(num,base):
    s = Stack()
     
    while(num > 0):
        a = num%base
         
        s.push(a)
        num = num/base
     
    st = ""
    while not s.isEmpty():
        st += str(s.pop())
        
    return st
예제 #6
0
def parChecker2(symbolString):
    s = Stack()
    balanced = True
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        if symbol in "([{":
            s.push(symbol)
        else:
            if s.isEmpty():
                balanced = False
            else:
                top = s.pop()
                if not matches(top, symbol):
                    balanced = False
        index = index + 1
    if balanced and s.isEmpty():
        return True
    else:
        return False
예제 #7
0
def is_parent_balanced(paren_string):
    s = Stack()
    is_balanced = True
    index = 0

    while index < len(paren_string) and is_balanced:
        paren = paren_string[index]
        if paren in "({[":
            s.push(paren)
        else:
            if s.is_empty():
                is_balanced = False
            else:
                top = s.pop()
                if not is_match(top, paren):
                    is_balanced = False
        index += 1

    
    if s.is_empty() and is_balanced:
        return True
    else:
        return False
def check_brackets(statement):
    stack = Stack()
    last = stack.pop()
    for ch in statement:
        if ch in ('{', '[', '('):
            stack.push(ch)
        if ch in ('}', ']', ')'):
            last = stack.pop()
        if last is '{' and ch is '}':
            continue
        elif last is '[' and ch is ']':
            continue
        elif last is '(' and ch is ')':
            continue
        else:
            return False

    if stack.size > 0:
        return False
    else:
        return True
from stack1 import Stack


def reverse(s):
    for i in range(len(s)):
        stack.push(s[i])

    rev = ''
    while not stack.isempty():
        rev += stack.pop()

    return rev


stack = Stack()
s = input()
print(reverse(s))
예제 #10
0
from stack1 import Stack
print('Enter the string')
string = input()
s = Stack()

for char in string:
    s.push(char)

print("Reversing string")
while not s.isEmpty():
    print(s.pop(), end="")
from stack1 import Stack
s = Stack()


def parchecker(l):
    balanced = True
    i = 0
    while i < len(l) and balanced == True:
        if l[i] in '([{':
            s.push(l[i])
        else:
            if s.isempty():
                balanced = False
            else:
                top = s.pop()
                if not matches(top, l[i]):
                    balanced = False
        i += 1
    if balanced == True:
        return True
    else:
        return False


def matches(open, close):
    opens = '{[('
    closer = ')]}'
    return opens.index(open) == closer.index(close)


print(parchecker('{{[[(())]]}}'))
예제 #12
0
 def setUp(self):
     self.stack = Stack()
예제 #13
0
class QueueTests(unittest.TestCase):
    def setUp(self):
        self.stack = Stack()

    def test_len_returns_0_for_empty_stack(self):
        self.assertEqual(len(self.stack), 0)

    def test_len_returns_correct_length_after_push(self):
        self.assertEqual(len(self.stack), 0)
        self.stack.push(2)
        self.assertEqual(len(self.stack), 1)
        self.stack.push(4)
        self.assertEqual(len(self.stack), 2)
        self.stack.push(6)
        self.stack.push(8)
        self.stack.push(10)
        self.stack.push(12)
        self.stack.push(14)
        self.stack.push(16)
        self.stack.push(18)
        self.assertEqual(len(self.stack), 9)

    def test_empty_pop(self):
        self.assertIsNone(self.stack.pop())
        self.assertEqual(len(self.stack), 0)

    def test_pop_respects_order(self):
        self.stack.push(100)
        self.stack.push(101)
        self.stack.push(105)
        self.assertEqual(self.stack.pop(), 105)
        self.assertEqual(len(self.stack), 2)
        self.assertEqual(self.stack.pop(), 101)
        self.assertEqual(len(self.stack), 1)
        self.assertEqual(self.stack.pop(), 100)
        self.assertEqual(len(self.stack), 0)
        self.assertIsNone(self.stack.pop())
        self.assertEqual(len(self.stack), 0)
예제 #14
0
from stack1 import Stack
from nodes1 import Node


class TreeNode:
    def __init__(self, data):
        self.data = data
        self.right = None
        self.left = None


expr = "4 5 + 5 3 - *".split()
stack = Stack()
for term in expr:
    if term in "+-*/":
        node = TreeNode(term)
        node.right = stack.pop()
        node.left = stack.pop()
    else:
        node = TreeNode(int(term))
        stack.push(node)


def calc(node):
    if node.data is "+":
        return calc(node.left) + calc(node.right)
    elif node.data is "-":
        return calc(node.left) - calc(node.right)
    elif node.data is "/":
        return calc(node.left) / calc(node.right)
    elif node.data is "*":