자료구조 강의노트 - kocwcontents.kocw.net/kocw/document/2015/cup/weonsunghyun2/6.pdf•...

14
소프트웨어학과 원성현 교수 1 자료구조 강의노트 교재 : C배우는 쉬운 자료구조(개정판) 출판사 : 한빛미디어(20113발행) 저자 : 이지영

Upload: others

Post on 11-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 1

자료구조 강의노트

교재 : C로 배우는 쉬운 자료구조(개정판) 출판사 : 한빛미디어(2011년 3월 발행) 저자 : 이지영

Page 2: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 64

6장 스택

Page 3: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 65

1. 스택

• 스택(stack)이란? • 사전적 의미는 ‘쌓아올린 더미’ • 데이터가 입력된 순서와 반대로 출력되는 데이터 구조 • 후입 선출, 즉 LIFO(Last In First Out) 리스트라고 함

• 스택의 실생활 예 • 부페식당에 쌓여있는 접시

• 스택의 컴퓨터 시스템 예 • 순차적으로 오픈한 윈도우

스택 정의

A

B

C 입력순서 : A – B - C

출력순서 : C – B - A

가장 오래된 자료 →

가장 최신 자료 →

Page 4: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 66

2. 추상 자료형 스택

• 상단(top) : 스택에서 제일 나중에 입력된 데이터의 위치 • 하단(bottom) : 스택에서 제일 먼저 입력된 데이터의 위치 • 요소(element) : 스택에 저장되는 데이터 그 자체 • 공 스택(empty stack) : 아무런 데이터도 갖고 있지 않은 스택

스택의 구성

createStack(S) : 스택 생성 isEmpty(S) : 스택 S가 비어있는지 검사 isFull(S) : 스택 S가 꽉 차있는지 검사 push(S,item) : 스택의 S의 top에 item을 추가 pop(S) 또는 delete(S) : 스택 S의 top에 있는 요소 삭제 peek(S) : 스택 S의 top에 있는 요소를 삭제하지 않고 반환

push(S,x) top=top+1; if(top>stack_SIZE) then overflow; else S(top)=x; end push()

pop(S) if(top=0) then underflow; else { return S(top); top=top-1; } end pop()

←스택에 데이터 삽입

스택에서 데이터 삭제→

첨자 1부터를 가정

Page 5: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 67

3. 스택의 구현

순차 자료구조를 이용한 스택의 구현(삽입과 삭제)

#include <stdio.h> #include <stdlib.h> #define STACK_SIZE 100 typedef int element; element stack[STACK_SIZE]; int top=-1; void push(element item) { if (top>=STACK_SIZE-1) { printf(“\n\n Stack is FULL!\n”); return; } else stack[++top]=item; }

element pop() { if (top==-1) { printf(“\n\n Stack is EMPTY!\n”); return 0; } else return stack[top--]; }

• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원 배열을 정의 • top이라는 변수를 정의하고 -1로 초기화(첨자 0부터를 가정) • 데이터가 삽입될 때는 top을 1 증가, 삭제될 때는 top을 1 감소

Page 6: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 68

• 순차 자료구조를 이용한 스택 구현의 문제점 • 배열로 구현하기 때문에 구현하기는 쉽지만, 물리적으로 크기가 고정된 배열을 쓰기 때문에 크기 변경이 어렵고 기억 공간의 낭비 발생

• 연결 자료구조를 이용한 스택 구현 • 스택에 삽입할 데이터가 발생할 때 연결 리스트의 노드를 생성하고 데이터를 저장한 후 링크 생성 • top의 링크 변경

연결 자료구조를 이용한 스택의 구현

top data link

n번째 원소

첫번째 원소

두번째 원소

n번째 원소

두번째 원소

첫번째 원소 null

Page 7: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 69

top null

① 빈 스택 생성 ② 원소 A 삽입 : push(S,A)

top data link

A null 100

100

③ 원소 B 삽입 : push(S,B)

top data link

B 200

200

A null

100

100

④ 원소 C 삽입 : push(S,C)

top data link

C 300

300

A null

100

200

B

200 100

⑤ 원소 삭제 : pop(S)

top data link

200

A null

100

B

200 100

Page 8: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 70

4. 스택의 응용

역순 문자열 만들기

A

B

C

D

A

B

C

A

B

A

A

B

C

D

A

B

C

A

B

A

D C B A

A B C D

Page 9: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 71

• 프로그램 간의 호출과 복귀 • 가장 나중에 호출된 함수가 가장 먼저 실행을 완료하고 복귀 • 호출은 스택에 데이터 삽입, 복귀는 스택에서 데이터 삭제를 의미 • 함수를 호출하면 호출된 함수로 컨트롤이 옮겨가야 하기 때문에 현재 작업 중인 지역변수, 매개변수 및 수행이 종료된 후 복귀할 주소 등의 정보를 스택 프레임에 저장하여 스택에 삽입 • 함수의 실행이 끝나면 시스템 스택의 top에 있는 원소를 삭제하고 프레임에 저장되어 있던 주로를 확인하고 복귀

시스템 스택

main F_1() F_2()

F_1()

a:

end main()

F_2()

b:

end F_1() end F_1()

Page 10: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 72

수식의 괄호 검사

{ A [ ( i + 1 ) ] = 0; }

{ {

[

{

[

(

{ {

[

{ [ ( 성공

• 여는 괄호가 나올 때마다 스택에 삽입하고, 닫는 괄호가 나올 때는 여는 괄호를 스택에서 삭제

• 수식의 마지막 괄호까지 처리했을 때 스택이 비어 있으면 성공

Page 11: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 73

if ( ( i == 0 ) && ( j == 0 )

( (

(

(

(

( (

(

( 오류

(

• 여는 괄호가 나올 때마다 스택에 삽입하고, 닫는 괄호가 나올 때는 여는 괄호를 스택에서 삭제

• 수식의 마지막 괄호까지 처리했을 때 스택이 비어 있지 않으면 실패

Page 12: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 74

수식의 후위 표기법 변환

• 수식의 표현법 • 전위 표기법(prefix)

• 연산자가 피연산자 앞에 오는 표기법 • 중위 표기법(infix)

• 연산자가 피연산자 사이에 오는 표기법 • 후위 표기법(postfix)

• 연산자가 피연산자 뒤에 오는 표기법 • 컴퓨터시스템에서의 표기법

• 후위 표기법 • 연산의 우선순위를 나타내기 위해 괄호를 사용하지 않아도 되기 때문

전위 표기법 : - + a * b c ÷ d e 중위 표기법 : a + b * c – d ÷ e 후위 표기법 : a b c * + d e ÷ -

Page 13: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 75

a + b * c – d ÷ e

+

연산자

스택

+

*

- -

÷

-

• 중위표기법 산술식의 후위표기법 변환

a ab abc

+

-

*

+

-

abc* abc*+ abc*+d abc*+de abc*+de ÷ abc*+de ÷

Page 14: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/6.pdf• 순차 자료구조를 이용한 스택의 구현 방법 • 일정한 크기의 1차원

소프트웨어학과 원성현 교수 76

3 + 5 * 2 – 7 ÷ 2

3

+

피연산자 스택

연산자 스택

3

5

+

*

3

5

+

2

-

3

10

*

+

-

13

-

13

7

-

÷

13

7

2

-

13

3.5

9.5

• 산술식의 연산