본문 바로가기
자료구조

연습문제와 응용문제

by Benihs 2022. 10. 20.

 1  연습문제

** 문제는 처음에 언급한 책에 나와있습니다 **

답 :

1.  4번
2. top, push, pop
3. (1) top += 1 (2) top -= 1

4. 2번
5. 2번
6. (1) return None (2) return stack[top]

 

 2  응용예제 01

헨젤과 그레텔이 돌을 떨어뜨리면서 숲으로 들어가는데 돌아갈때 반대로 돌을 주어오는 프로그램

import random

# 힘수 선언 부분 ##
def isStackFull() :
    global SIZE, stack, top
    if (top >= SIZE - 1) :
        return True
    else :
        return False

def isStackEmpty() :
    global SIZE, stack, top
    if (top == -1) :
        return True
    else :
        return False
    
def push(data) :
    global SIZE, stack, top
    if (isStackFull()) :
        print("스택이 꽉 찼습니다.")
        return
    top += 1
    stack[top] = data

def pop() :
    global SIZE, stack, top
    if(isStackEmpty()) :
        return None
    data = stack[top]
    stack[top] = None
    top -= 1
    return data

def peek() :
    global SIZE, stack, top
    if(isStackEmpty()) :
        print("스택이 비었습니다.")
        return None
    return stack[top]

## 전역 변수 선언 부분 ##
SIZE = 10
stack = [None for _ in range(SIZE)]
top = -1

## 메인 코드 부분 ##
if __name__ == "__main__" :
    
    stoneAry = ["빨강", "파강", "초록", "노랑", "보라", "주황"]
    random.shuffle(stoneAry)
    
    print("과자집에 가는길 :", end = ' ')
    for stone in stoneAry :
        push(stone)
        print(stone, "==>", end = ' ')
    print("과자집")
    
    print("우리집에 오는길 :", end = ' ')
    while True :
        stone = pop()
        if stone == None :
            break
        print(stone, "==>",end = ' ')
    print("우리집")

 

 3  응용예제 02

텍스트 파일에서 전체 줄을 거꾸로 하고, 각 줄의 글자도 거꾸로 출력하는 프로그램

# 힘수 선언 부분 ##
def isStackFull() :
    global SIZE, stack, top
    if (top >= SIZE - 1) :
        return True
    else :
        return False

def isStackEmpty() :
    global SIZE, stack, top
    if (top == -1) :
        return True
    else :
        return False
    
def push(data) :
    global SIZE, stack, top
    if (isStackFull()) :
        print("스택이 꽉 찼습니다.")
        return
    top += 1
    stack[top] = data

def pop() :
    global SIZE, stack, top
    if(isStackEmpty()) :
        return None
    data = stack[top]
    stack[top] = None
    top -= 1
    return data

def peek() :
    global SIZE, stack, top
    if(isStackEmpty()) :
        print("스택이 비었습니다.")
        return None
    return stack[top]

## 전역 변수 선언 부분 ##
SIZE = 100
stack = [None for _ in range(SIZE)]
top = -1

## 메인 코드 부분 ##
if __name__ == "__main__" :
    
    with open("진달래꽃.txt", 'r', encoding='UTF8') as rfp :
        lineAry = rfp.readlines()
        
        print("----- 원본 -----")
        for line in lineAry :
            push(line)
            print(line, end = ' ')
        print()
        
        print("----- 거꾸로 처리된 결과 -----")
        while True :
            line = pop()
            if line == None :
                break
                
            miniStack = [None for _ in range(len(line))]
            miniTop = -1
            for ch in line :
                miniTop += 1
                miniStack[miniTop] = ch
                
            while True :
                if miniTop == -1 :
                    break
                
                ch = miniStack[miniTop]
                miniTop -= 1
                print(ch, end = '')

'자료구조' 카테고리의 다른 글

큐의 기본과 간단구현  (0) 2022.11.01
스택의 일반 구현과 응용  (0) 2022.10.20
스택의 기본과 간단구현  (0) 2022.10.20
연습문제와 응용예제  (0) 2022.10.18
원형 연결 리스트의 일반 구현  (1) 2022.10.18