제3장 스택과 큐.

Slides:



Advertisements
Similar presentations
National University 1 / 24 컴퓨터 개론 및 실습 강의 11 (parser)
Advertisements

Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
제6장 조건문.
어서와 Java는 처음이지! 제3장선택과 반복.
제 5 장 stack and queue.
제 3 장 변수와 자료형.
YACC 응용 예 Desktop Calculator.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
제 8 장  파서 생성기 YACC 사용하기.
Chapter 7. 조건문.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
제3장 스택과 큐.
4장 스택.
제5장 제어명령
Lesson 3. 입출력과 제어문.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
7 스택.
스택(stack) SANGJI University Kwangman Ko
Chapter 4 스택, 큐, 데크.
제 5 장. 스택(Stack).
Chapter 06. 스택.
AVR - Chapter 15 황 지 연.
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
스택 (1) 스택(stack)과 큐(queue) 스택(stack) 순서 리스트(ordered list)의 특별한 경우
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
자료구조: CHAP 5 스택 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 7 트리(1) 순천향대학교 컴퓨터공학과 하 상 호.
제 7 장 어휘분석과 불용어목록 7.2 어휘분석 자동색인작업을 위한 어휘분석
프로그래밍 랩 – 7주 리스트.
제 3 장 상수와 변수
제 4 장 스택과 큐 4.1 스택(stack) 4.2 스택의 활용 4.3 큐 4.4 데큐.
11장. 1차원 배열.
Introduction To Data Structures Using C
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
JA A V W. 03.
어서와 C언어는 처음이지 제14장.
Chapter 2 Lexical Elements, Operators, and the C System
4th HomeWork Guide (ver2.0)
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
[INA240] Data Structures and Practice
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
연산자 (Operator).
제어문 & 반복문 C스터디 2주차.
제 3 강.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
자바 5.0 프로그래밍.
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
구조체(struct)와 공용체(union)
AdcRead API 함수 분석 마이크로프로세서.
Numerical Analysis Programming using NRs
엔화 대환/대출 자금용도 대상 이자 차액 효과 (A,B,C) 환율 리스크 헷징 (A,B) 엔화의 평균환율 (A,B,C)
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
제 2장 연결리스트.
printf("Global Korea\n");
제 3장 연 산 자 연 산 자 의 종 류 연 산 자 우 선 순 위 형 변 환.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

제3장 스택과 큐

3.4 수식의 계산 x=a/b-c+d*e-a*c x=a/(b-c+d)*(e-a)*c

3.4 수식의 계산 토큰 우선순위 결합성 () [] -> . 17 L→R -- ++ 16 L→R 토큰            우선순위         결합성  () [] -> . 17 L→R -- ++                   16                L→R & * unary - +        15                R→L * / %                       13                L→R + -                           12                L→R > >= < <=            10                L→R == !=                        9                 L→R &&                           5                 L→R ||                               4                  L→R

3.4 수식의 계산 수식의 표현 중위 표기(infix notation) : a * b / c 후위 표기(postfix notation)   :  a b * c / 전위 표기(prefix notation)     :  / * a b c 예) x = a / b - c + d * e - a * c         x = ((((a / b) - c) + (d * e)) - (a * c)) 컴파일러 => 후위 표기법 사용

3.4 수식의 계산 후위 표기 : x = a b / c - d e * a c * - 괄호 사용 안함 연산자의 우선순위 없음 (L→R 순서의 계산) 중위표기 후위표기 2+3*4 2 3 4 * + a*b+5 a b * 5 + (1+2)*7 1 2 + 7 *

3.4 수식의 계산 후위표기 연산방법 연산자를 만날때까지 피연산자를 스택에 저장 연산자를 만나면 연산에 필요한 만큼의 피연산자를 스택에서 가져와서 연산을 실행하고 연산의 결과를 다시 스택에 저장 예) 6 2 / 3 – 4 2 * + 토큰 스택 [0] [1] [2] Top 6 6 0 2 6 2 1 / 6/2 0 3 6/2 3 1 - 6/2-3 0 4 6/2-3 4 1 2 6/2-3 4 2 2 * 6/2-3 4*2 1 + 6/2-3+4*2 0

3.4 수식의 계산 스택과 수식의 표현 방법 #define MAX_STACK_SIZE 100 /*스택의 최대크기*/ #define MAX_EXPR_SIZE 100   /*수식의 최대크기*/ typedef enum { lparen, rparen, plus, minus, times, divide, mod, eos, operand } precedence; int stack[MAX_STACK_SIZE];  /* 전역 배열 */ char expr[MAX_EXPR_SIZE];   /* 입력 스트링 */

int eval(void) { precedence token; char symbol; int op1,op2; int n = 0; /* 수식 스트링을 위한 카운터 */ int top = -1; token = get_token(&symbol, &n); while (token != eos) { if (token == operand) add(&top, symbol-'0'); / *스택 삽입 */ else {          /* 두 피연산자를 삭제하여 연산을 수행후, 결과를 스택에 삽입 */ op2 = delete(&top); /* 스택 삭제 */        op1 = delete(&top); switch(token) { case plus:   add(&top, op1+op2);    break; case minus: add(&top, op1-op2);    break; case times:  add(&top, op1*op2);    break; case divide: add(&top, op1/op2);     break; case mod:   add(&top, op1%op2); } return delete(&top); /* 결과를 반환 */

3.4 수식의 계산 precedence get_token (char *symbol, int * n) { /* 다음 토큰을 취한다. symbol은 문자 표현이며, token은 그것의 열거된 값으로 표현되고, 명칭으로 반환된다. */ *symbol = expr[(*n)++]; switch (*symbol) { case '(' : return lparen; case ')' : return rparen; case '+' : return plus; case '-' : return minus; case '/' : return divide; case '*' : return times; case '%' : return mod; case ' ' : return eos; default : return operand; }

3.4 수식의 계산 중위 표기에서 후위 표기로의 변환 a*(b+c)*d 스택 [0] [1] [2] * * ( * ( * ( + *    ( *    (     *    (     + output a ab abc abc+ abc+* abc+*d abc+*d* 토큰 a * ( b + c ) d eos top -1 1 2

3.4 수식의 계산 isp(in-stack precedence)와 icp(incoming precedence) precedence stack[MAX_STACK_SIZE]; /* isp와 icp 배열 -- 인덱스는 연산자 lparen, rparen, plus, minus, times, divide, mod, eos의 우선순위 값 */ static int isp[] = { 0, 19, 12, 12, 13, 13, 13, 0 }; static int icp[] = { 20, 19, 12, 12, 13, 13, 13, 0 };

void postfix(void) { char symbol; precedence token; int n = 0; int top = 0; /* eos를 스택에 놓는다. */ stack[0] = eos; for (token=get_token(&symbol,&n); token!=eos; token=get_token(&symbol,&n)) { if (token == operand) printf("%c", symbol); else if (token == rparen) { while (stack[top] != lparen)   /* 왼쪽 괄호가 나올 때까지   */ print_token(delete(&top)); /* 토큰들을 제거해서 출력시킴 */ delete(&top); /* 좌괄호를 버린다 */ } else {  /* symbol의 isp ≥ token의 icp ⇨ symbol을 제거하고 출력 */ while (isp[stack[top]] >= icp[token]) print_token(delete(&top)); add(&top, token);     } while ((token=delete(&top)) != eos) print_token(token); printf("\n");

과제물 중위 표기법 -> 후위 표기법 변환 알고리즘 후위 표기법 계산 알고리즘