Chapter 06. 스택(Stack)

Similar documents
03_queue

05_tree

Chapter 08. 트리(Tree)

Microsoft PowerPoint - 07-chap05-Stack.ppt

슬라이드 1

03장.스택.key

03장.스택

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

슬라이드 1

Chapter 4. LISTS

Microsoft PowerPoint - ch07 - 포인터 pm0415

chap 5: Trees

5.스택(강의자료).key

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-1Array.ppt

o 스택 (stack) ~ 쌓아놓은더미 1. 스택의개요 - 2 -

4장

06장.리스트

Microsoft PowerPoint - 제5장-스택의응용.pptx

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - ch07_스택 [호환 모드]

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

중간고사 (자료 구조)

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - chap04-연산자.pptx

7장

OCW_C언어 기초

02장.배열과 클래스

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Chapter 4. LISTS

11장 포인터

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

1장. 리스트

슬라이드 1

Microsoft PowerPoint - 제11장 포인터(강의)

설계란 무엇인가?

슬라이드 1

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft Word - FunctionCall

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

PowerPoint Presentation

설계란 무엇인가?

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

Microsoft PowerPoint - 제11장 포인터

슬라이드 1

01_List

Microsoft PowerPoint - chap11-포인터의활용.pptx

금오공대 컴퓨터공학전공 강의자료

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은

C++ Programming

PowerPoint 프레젠테이션

chap x: G입력

C++ Programming

Microsoft PowerPoint - chap-11.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint 프레젠테이션

컴파일러

PowerPoint Template

11장 포인터

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

ABC 10장

Lab 3. 실습문제 (Single linked list)_해답.hwp

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

PowerPoint 프레젠테이션

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - chap10-함수의활용.pptx

PowerPoint Presentation

Chap 6: Graphs

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

Microsoft PowerPoint - chap03-변수와데이터형.pptx

chap x: G입력

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

08장.트리

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

PowerPoint Presentation

Microsoft PowerPoint - chap-03.pptx

untitled

adfasdfasfdasfasfadf

Chap 6: Graphs

¾Ë·¹¸£±âÁöħ¼�1-ÃÖÁ¾

01....b

00목차

(291)본문7

2007백서-001-특집

슬라이드 1

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Contents v 학습목표 자료구조큐에대한개념을스택과비교하여이해한다. 큐의특징과연산방법에대해알아본다. 순차표현방법을이용한큐와연결표현방법을이용한큐를구현해본다. 큐의응용방법을알아본다. v 내용 큐 큐의구현 큐의응용 2/74

윤성우의 열혈 TCP/IP 소켓 프로그래밊

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

4장.문장

Transcription:

윤성우의열혈자료구조 : C 언어를이용한자료구조학습서 Chapter 06. 스택 (Stack) Introduction To Data Structures Using C

Chapter 06. 스택 (Stack) Chapter 06-1: 스택의이해와 ADT 정의 2

스택 (Stack) 의이해 스택은 먼저들어간것이나중에나오는자료구조 로서 초코볼이담겨있는통에비유할수있다. 스택은 LIFO(Last-in, First-out) 구조 의자료구조이다. 초코볼통에초코볼을넣는다. 초코볼통에서초코볼을꺼낸다. 이번에꺼낼초코볼의색이무엇인지통안을들여다본다. push pop peek 스택의기본연산 일반적인자료구조의학습에서스택의이해와구현은어렵지않다. 오히려활용의측면에 서생각할것들이많다! 3

스택의 ADT 정의 ADT 를대상으로배열기반의스택 또는연결리스트기반의스택을구현할수있다. PUSH 연산 POP 연산 PEEK 연산 4

Chapter 06. 스택 (Stack) Chapter 06-2: 스택의배열기반구현 5

구현의논리 두번의 PUSH 연산 인덱스가 0 인위치를스택의바닥으로 정의해야배열길이에상관없이바닥 의인덱스값이동일해진다. 인덱스 0 의배열요소가 ' 스택의바닥 ( 초코볼통의바닥 )' 으로정의되었다. 마지막에저장된데이터의위치를기억해야한다. push pop Top 을위로한칸올리고, Top 이가리키는위치에데이터저장 Top 이가리키는데이터를반환하고, Top 을아래로한칸내림 6

스택의헤더파일 배열기반을고려하여정의된스택의구조체! 7

배열기반스택의구현 : 초기화및기타함수 -1 은스택이비었음을의미 빈경우 TRUE 를반환 8

배열기반스택의구현 : PUSH, POP, PEEK 9

배열기반스택의활용 : main 함수 실행결과 10

Chapter 06. 스택 (Stack) Chapter 06-3: 스택의연결리스트기반구현 11

연결리스트기반스택의논리와헤더파일의정의 이렇듯메모리구조만보아서는스택임이구분되지않는다! 저장된순서의역순으로데이터 ( 노드 ) 를참조 ( 삭제 ) 하는연결리스트가바로연결기반의스택이다! 문제 06-1 에서는 CLinkedList.h 와 CLinkedList.c 를 단순히활용하여스택의구현을요구한다! 12

연결리스트기반스택의구현 1 새노드를머리에추가하고, 삭제시머리부 터삭제하는단순연결리스트의코드에지 나지않는다. 13

연결리스트기반스택의구현 2 연결리스트기반스택을직접구현하는것보다 의미있는것은문제 06-1 을해결하는것이다! 14

연결기반스택의활용 : main 함수 배열기반리스트관련 main 함수와완전히동일하게 정의된 main 함수! 실행결과 15

Chapter 06. 스택 (Stack) Chapter 06-4: 계산기프로그램구현 16

구현할계산기프로그램의성격 다음과같은문장의수식을계산할수있어야한다. ( 3 + 4 ) * ( 5 / 2 ) + ( 7 + ( 9 5 ) ) 다음과같은문장의수식계산을위해서는다음두가지를고려해야한다. 소괄호를파악하여그부분을먼저연산한다. 연산자의우선순위를근거로연산의순위를결정한다. 계산기구현에필요한알고리즘은스택과는별개의것이다. 다만그알고리즘의구현에있어서스택이매우요긴하게활용된다. 17

세가지수식의표기법 : 전위, 중위, 후위 중위표기법 (infix notation) 예 ) 5 + 2 / 7 수식내에연산의순서에대한정보가담겨있지않다. 그래서소괄호와연산자의우선 순위라는것을정의하여이를기반으로연산의순서를명시한다. 전위표기법 (prefix notation) 예 ) + 5 / 2 7 수식내에연산의순서에대한정보가담겨있다. 그래서소괄호가필요없고연산의 우선순위를결정할필요도없다. 후위표기법 (postfix notation) 예 ) 5 2 7 / + 전위표기법과마찬가지로수식내에연산의순서에대한정보가담겨있다. 그래서소 괄호가필요없고연산의우선순위를결정할필요도없다. 18 소괄호와연산자의우선순위를인식하게하여중위표기법의수식을직접계산하게프로그래밍 하는것보다후위표기법의수식을계산하도록프로그래밍하는것이더쉽다!

중위 후위 : 소괄호고려하지않고 1 수식을이루는왼쪽문자부터시작해서하나씩처리해나간다. 피연산자를만나면무조건변환된수식이위치할자리로이동시킨다. 19

중위 후위 : 소괄호고려하지않고 2 연산자를만나면무조건쟁반으로이동한다. 숫자를만났으니변환된수식이위치할자리로이동! 20

중위 후위 : 소괄호고려하지않고 3 / 연산자의우선순위가높으므로 + 연산자위에올린다. 쟁반에기존연산자가있는상황에서의행동방식! 쟁반에위치한연산자의우선순위가높다면 쟁반에위치한연산자를꺼내서변환된수식이위치할자리로옮긴다. 그리고새연산자는쟁반으로옮긴다. 쟁반에위치한연산자의우선순위가낮다면 쟁반에위치한연산자의위에새연산자를쌓는다. 우선순위가높은연산자는우선순위가낮은 연산자위에올라서서, 우선순위가낮은연산 자가먼저자리를잡지못하게하려는목적! 21

중위 후위 : 소괄호고려하지않고 4 피연산자는무조건변환된수식의자리로이동! 나머지연산자들은쟁반에서차례로옮긴다! 22

중위 후위 : 정리하면 변환규칙의정리내용 피연산자는그냥옮긴다. 연산자는쟁반으로옮긴다. 연산자가쟁반에있다면우선순위를비교하여처리방법을결정한다. 마지막까지쟁반에남아있는연산자들은하나씩꺼내서옮긴다. 23

중위 후위 : 고민될수있는상황 상황 1 + 연산자가우선순위가높다고가정하고 (+ 연산자가먼저등장했으므로 ) 일을진행한다. 즉 + 연산자를옮기고그자리에 연산자를가져다놔야한다. 상황 2 24

중위 후위 : 소괄호고려 1 후위표기법의수식에서는먼저연산이이뤄져야하는연산자가뒤에연산이이뤄지는연산자보다앞에위치해야한다. 따라서소괄호안에있는연산자들이후위표기법의수식에서앞부분에위치해야한다. ( 연산자의우선순위는그어떤사칙연산자들보다낮다고간주! 그래서 ) 연산자가등장할때까지쟁반에남아소괄호의경계역할을해야함! 25

중위 후위 : 소괄호고려 2 26 ) 연산자를만나면쟁반에서 ( 연산자만날때까지연 산자를변환된수식의자리로옮긴다!

중위 후위 : 소괄호고려 3 조금달리설명하면 ( 연산자는쟁반의또다른바닥이다! 그리고 ) 연산자는변환이되어야하는 작은수식의끝을의미한다. 그래서 ) 연산자를만나면 ( 연산자를만날때까지연산자를이동시 켜야한다. 지금까지설명한내용에해당하는코드의구현에앞서중위표기법의수식을후위표기 법의수식으로바꾸는연습을할필요가있다. 27

추가주의사항 책에서 ( 은어떤연산자보다도우순순위가낮다고설명하고있다. 오해의소지가있음. 이미다른연산자가쟁반위에있어도 ( 는무조건그위에쌓는다. 예 3-(2+8) 328+- ((3-2)/4) 32-4/ ((4+2)/4)-(3+2/(7*5))? 28

중위 후위 : 프로그램구현 1 변환함수의타입 함수이름의일부인 RPN 은후위표기법의또다른이름인 Reverse Polish Notation 의약자이다. 중위표기법수식을배열에담아함수의인자로전달한다. 호출완료후 exp 에는변환된수식이담긴다. 29

중위 후위 : 프로그램구현 2 함수 ConvToRPNExp 의첫번째 helper function! 연산자의우선순위에대응하는값을반환한다. 값이클수록우선순위가 높은것으로정의되어있다. ( 연산자는 ) 연산자가등장할때까지쟁반에남아있어야하기때문에가 장낮은우선순위를부여! ) 연산자는소괄호의끝을알리는메시지의역할을한다. 따라서쟁반으로가지않는다. 때문에 ) 연산자에대한반환값은정의되어있을필요가없다! 30

중위 후위 : 프로그램구현 3 함수 ConvToRPNExp 의두번째 helper function! 두연산자의우선순위비교결과를반환한다. ConvToRPNExp 함수의실질적인 Helper Function 은위의함수하나이다! 31

중위 후위 : 프로그램구현 4 void ConvToRPNExp(char exp[]) { Stack stack; int explen = strlen(exp); char * convexp = (char*)malloc(explen+1); 문자열 exp 의길이를반환함. 변환된수식을담을공간마련 int i, idx=0; char tok, popop; 새로운문자열을저장할공간을마련함. NULL 문자를추가하기위해 +1 함. memset(convexp, 0, sizeof(char)*explen+1); StackInit(&stack); 마련한공간을 0 으로초기화 for(i=0; i<explen; i++) {.... } 일련의변환과정을이반복문안에서수행 while(!sisempty(&stack)) convexp[idx++] = SPop(&stack); 스택에남아있는모든연산자를이동시키는반복문 } 32 strcpy(exp, convexp); free(convexp); 변환된수식을반환!

중위 후위 : 프로그램구현 5 void ConvToRPNExp(char exp[]) {.... for(i=0; i<explen; i++) { tok = exp[i]; } 33 } if(isdigit(tok)) tok에저장된문자가피연산자라면 { convexp[idx++] = tok; } else tok에저장된문자가연산자라면 { switch(tok) {.... 연산자일때의처리루틴을 switch문에담는다! } }

중위 후위 : 프로그램구현 6 함수 ConvToRPNExp 의일부인 switch 문 tok 에저장된연산자를스택에저장하기위한과정 스택맨위의연산자가 tok 보다우선순위가높거나같다면 34

중위 후위 : 프로그램의실행 ConvToRPNExp 함수의선언과정의 스택관련함수의선언과정의 main 함수의정의 실행결과 35

후기표기법수식의계산 피연산자두개가연산자앞에항상위치하는구조 후위표기법수식으로 후위표기법수식으로 1 과 2 의곱진행 2 와 4 의곱진행 2 와 3 의합진행 36

후기표기법수식계산프로그램의구현 계산의규칙 피연산자는무조건스택으로옮긴다. 연산자를만나면스택에서두개의피연산자를꺼내서계산을한다. 계산결과는다시스택에넣는다. 37

후기표기법수식계산프로그램의구현 이어서 숫자라면 연산자였다면 38 문자를숫자로변환 주의! 먼저꺼낸것이 op2 이고, 나중에꺼낸것이 op1 임. 마지막엔하나의값만남게되고, 그값을 pop 함.

후위표기법수식계산프로그램의실행 EvalRPNExp 함수의선언과정의 스택관련함수의선언과정의 main 함수의정의 실행결과 39

계산기프로그램의완성 1 계산의과정 중위표기법수식 ConvToRPNExp EvalRPNExp 연산결과 계산기프로그램의파일구성 InfixCalculator.h InfixCalculator.c 40

계산기프로그램의완성 2 InfixCalculator.h InfixCalculatorMain.c 실행결과 InfixCalculator.c 41

수고하셨습니다 ~ Chapter 06 에대한강의를마칩니다! 42