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 |