示例#1
0
def rev_word(string):

    from Stack import ArrayStack  # STACK IMPORTED FROM MY OWN COLLECTION

    stack = ArrayStack() # ASSIGNING NEW STACK
    reversedWords = "" # ASSIGNING NEW STRING, WILL BE ADDED REVERSED WORDS IN HERE LATER ON
    word = "" #ASSIGNING NEW STRING, SO IT CAN ADD EACH WORD

    #I AM ADDING A WHITE SPACE AT THE END OF THE STRING
    #SO THE LOOP CAN UNDERSTAND THE END OF THE STRING
    #IF I DONT ADD THIS, THE PROGRAM WILL NOT PUT THE LAST WORD IN THE STACK !
    string = string + " "


    for i in range(len(string)): #FOR EACH ELEMENT IN THE STRING
        if string[i] != " ": #IF CHAR NOT A WHITE SPACE ADD CHARS TO THE WORD
            word += string[i]
        else:
            if len(word) > 0: #IF THE LENGTH OF THE WORD MORE THAN ZERO
                stack.push(word) #ADD WORD TO THE STACK
                word = "" #CLEAR WORD VARIABLE, FOR THE NEXT ONE


    for i in range(len(stack)):
        reversedWords += stack.pop() + " " #ADDING EACH ELEMENT TO THE reversedWords STRING WITH SPACE BETWEEN WORDS
    reversedWords = reversedWords[:-1] #REMOVING THE LAST ELEMENT OF THE STRING, BECAUSE IT IS A WHITE SPACE. ADDED FROM THE PREVIOUS LINE
    return reversedWords
示例#2
0
def is_html_matched(raw):
    S = ArrayStack()
    j = raw.find('<')
    root = etree.Element("root")
    curr = root

    while j != -1:
        k = raw.find('>', j + 1)
        if k == -1:
            return None
        tag = raw[j + 1:k]

        if tag.startswith('/'):
            if S.is_empty():
                return False
            elif S.pop() != tag[1:]:
                return False
            curr = curr.getparent()
        else:
            curr = etree.SubElement(curr, tag)
            S.push(tag)

        j = raw.find('<', k + 1)
    print(etree.tostring(root).decode('utf8'))
    return S.is_empty()
示例#3
0
def is_matched(expr):
    left = '{(['
    right = '})]'
    S = ArrayStack()
    for c in expr:
        if c in left:
            S.push(c)
        elif c in right:
            if S.is_empty():
                return False
            elif right.index(c) != left.index(S.pop()):
                return False
    return S.is_empty()
def balanced_expression(str_input):
    stack = ArrayStack()
    for i in str_input:
        if i not in d:
            stack.push(i)
        else:
            try:
                output = stack.pop()
            except:
                return False
            if output != d[i]:
                return False
    return stack.is_empty()
def balanced_expression(str_input):
    d = {"}": "{", ")": "(", "]": "["}
    stack = ArrayStack()
    for i in str_input:
        if i in "{[(":
            stack.push(i)
        else:
            try:
                out = stack.pop()
                if out != d[i]:
                    return False
            except:
                return False
    return stack.is_empty()
def is_matched_html(html_str):
    lst = [i for i in get_tokens(html_str)]
    stack = ArrayStack()
    for i in lst:
        if i[1] == "/":
            try:
                out = stack.pop()
                if out[1:-1] != i[2:-1]:
                    return False
            except:
                return False
        else:
            stack.push(i)
    return stack.is_empty()
def is_mathced_html(html_str):
    stack = ArrayStack()
    for i in get_tags(html_str):
        if i[0] != "/":
            stack.push(i)
        else:
            try:
                val = stack.pop()
            except:
                return False
            if i[1:] != val:
                return False

    return stack.is_empty()
示例#8
0
def infixToPostfix(tokenList: list) -> list:
    '''
    Algoritms Architecture

    1) 피연산자이면 그냥 출력
    2) '('이면 스택에 push
    3) ')' 이면 '('이 나올때 까지 스택에서 pop, 출력
    4) 연산자이면 스택에서 이보다 높(거나 같)은 우선순위 것들을 pop, 출력
    그리고 이 연산자는 스택에 push
    5) 스택에 남아 있는 연산자는 모두 pop, 출력.
    '''
    prec = {
        '*': 3, '/': 3,
        '+': 2, '-': 2,
        '(': 1,
    }

    opStack = Stack()
    postfixList = []

    for token in tokenList:
        if type(token) is int:
            postfixList.append(token)
        else:
            if opStack.isEmpty() and token in prec.keys():
                opStack.push(token)
            elif token == '(':
                opStack.push(token)
            elif token == ')':
                while opStack.peek() != '(':
                    postfixList.append(opStack.pop())
                opStack.pop()
            elif prec.get(opStack.peek()) < prec.get(token):
                opStack.push(token)
            else:
                postfixList.append(opStack.pop())
                opStack.push(token)
        
    while not opStack.isEmpty():
        postfixList.append(opStack.pop())

    return postfixList
 def __init__(self):
     self.stack = ArrayStack()
     self.size = 0
示例#10
0
class DupStack:
    def __init__(self):
        self.stack = ArrayStack()
        self.size = 0

    def __len__(self):
        return len(self.size)

    def is_empty(self):
        return len(self) == 0

    def push(self,e):
        if self.is_empty():
            self.stack.push((e,1))
        else:
            prev,dup = self.stack.top()
            if prev == e:
                self.stack.pop()
                self.stack.push((prev,dup+1))
            else:
                self.stack.push((e,1))
        self.size += 1
            

    def top(self):
        if self.is_empty():
            raise Exception("Empty!!")
        return self.stack.top()[0]

    def top_dups_count(self):
        if self.is_empty():
            raise Exception("Empty!!")
        return self.stack.top()[1]

    def pop(self):
        if self.is_empty():
            raise Exception("Empty!!")
        value,count = self.stack.top()
        if count == 1:
            return self.stack.pop()[0]
        else:
            self.stack.pop()
            self.stack.push(value,count-1)
        self.size -= 1

    def pop_dups(self):
        if self.is_empty():
            raise Exception("Empty!!")
        value,count = self.stack.pop()
        self.size -= count
        return value
示例#11
0
def postfixEval(tokenList):
    valStack = Stack()

    for token in tokenList:
        if type(token) is int:
            valStack.push(token)
        elif token == '*':
            v1 = valStack.pop()
            v2 = valStack.pop()
            result = v2 * v1
            valStack.push(result)
        elif token == '/':
            v1 = valStack.pop()
            v2 = valStack.pop()
            result = v2 / v1
            valStack.push(result)
        elif token == '+':
            v1 = valStack.pop()
            v2 = valStack.pop()
            result = v2 + v1
            valStack.push(result)
        elif token == '-':
            v1 = valStack.pop()
            v2 = valStack.pop()
            result = v2 - v1
            valStack.push(result)
    return valStack.pop()
示例#12
0
def convert(S):
    '''
    materialize to ArrayStack
    '''
    opStack = ArrayStack()
    answer = ''

    for c in S:
        if c not in "*/+-()":
            answer += c
        elif c == '(':
            opStack.push(c)
        elif c == ")":
            while opStack.peek() != "(":
                answer += opStack.pop()
            opStack.pop()
        elif (not opStack.isEmpty()) and prec.get(c) <= prec.get(
                opStack.peek()):
            answer += opStack.pop()
            opStack.push(c)
        else:
            opStack.push(c)

    while not opStack.isEmpty():
        answer += opStack.pop()

    return answer