4th HomeWork Guide (ver2.0)

Slides:



Advertisements
Similar presentations
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
Advertisements

1. 자료구조 개념 (1) 자료구조의 개요 1) 자료구조 ① 일련의 자료들을 조직하고 구조화하는 것 ② 자료의 표현과 그것과 관련된 연산 2) 자료구조에 따라 저장공간의 효율성과 프로그램의 실행시간이 달라짐 3) 어떠한 자료구조에서도 필요한 모든 연산들을 처리하는 것이.
Vision System Lab, Sang-Hun Han
10. 예외 처리.
3주 강의 Lexical Elements, Operators, and the C System
Internet Computing KUT Youn-Hee Han
C++ Espresso 제1장 기초 사항.
3 장 stack and queue.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
Internet Computing KUT Youn-Hee Han
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
Internet Computing KUT Youn-Hee Han
8. 객체와 클래스 (기본).
Internet Computing KUT Youn-Hee Han
제7장 제어구조 I – 식과 문장.
Internet Computing KUT Youn-Hee Han
4장 스택.
7 스택.
스택(stack) SANGJI University Kwangman Ko
강의 #6 큐(Queue).
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 27).
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
다음 주 과제 7장 읽어오기 숙제 해서 다음 주(11월 12일) 제출하기. 큐(Queue) E304호,
Chapter 9 – 구조형과 리스트 처리 Outline 9.1 자신 참조 구조형 9.2 선형 연결 리스트 9.3 리스트 연산
제 5 장. 스택(Stack).
Chapter 06. 스택(Stack) Chapter 06-1: 스택의 이해와 ADT 정의.
Lesson 6. 형변환.
Chapter 06. 스택.
제3장 스택과 큐.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
자료구조: CHAP 5 스택 순천향대학교 컴퓨터공학과 하 상 호.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
자료구조: CHAP 4 리스트 (1) 순천향대학교 컴퓨터공학과 하 상 호.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
스택(Stack) 김진수
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
14. 예외처리.
Introduction To Data Structures Using C
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
13. 연산자 오버로딩.
JA A V W. 03.
자바 5.0 프로그래밍.
제2장 데이터 및 수식.
Lesson 4. 수식과 연산자.
8 큐.
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
adopted from KNK C Programming : A Modern Approach
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
[INA470] Java Programming Youn-Hee Han
C언어 응용 제7주 실습 해보기 제6장.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
CHAP 1:자료구조와 알고리즘.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
자료구조론 8장 큐(queue).
05. General Linear List – Homework
[INA240] Data Structures and Practice
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
1.예수 거룩한 주 예수 생명의 11.예수 권능의 주 예수 19.그 누구도 그 누구도 21.It's all about you.
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Presentation transcript:

4th HomeWork Guide (ver2.0) Internet Computing Laboratory @ KUT Youn-Hee Han

1. Deque의 구현 A Double ended queue Has operations that Add, remove, or retrieve entries at both its front and back Combines and expands the operations of queue and stack d.printDeque() d.isEmpty() Data Structure

1. Deque의 구현 Interface (Deque.h) class Deque { public: class Node{ // Deque 의 내부노드 클래스 - doubly linked list int data; Node *prev; Node *next; Node(){ prev = next = NULL; } }; Deque(); // 생성자 ~Deque(); // 소멸자 void addToFront(int data); // 맨앞에 삽입 void addToBack(int data); // 맨뒤에 삽입 void removeFront(); // 맨앞 삭제(반환x) void removeBack(); // 맨뒤 삭제(반환x) int getFront(); // 맨앞 데이터 반환 int getBack(); // 맨뒤 데이터 반환 void printDeque(); // Deque 내용 출력 bool isEmpty(); // 비었는지 검사하는 함수 private: Node *front; // front Node *rear; // rear int count; // 갯수 Data Structure

1. Deque의 구현 Implementation (Deque.cpp) #include <iostream> #include “Deque.h" using namespace std; Deque::Deque() { // 생성자 front = NULL; rear = NULL; count = 0; } Deque::~Deque() { // 소멸자 - 모든 노드 삭제. for (int i=0; i<count; i++) removeBack(); void Deque::addToFront(int data) { // 맨앞에 삽입 Node *newNode = new Node; // 새로운 노드 할당 - prev,next 는 null 로 초기화 된다. newNode->data = data; if ( IsEmpty() ) front = rear = newNode; else { newNode->next = front; front->prev = newNode; front = newNode; count++; // 삽입 후 카운터 증가 Data Structure

1. Deque의 구현 문제 1 – 30점 만점 addToFront 외에 나머지 addToBack(int data), removeFront, removeBack() getFront(), getBack(), printDeque(), isEmpty()를 구현하시오. 활용 예 #include <iostream> using namespace std; #include "deque.h" void main() { Deque queue; queue.addToFront(3); queue.PrintDeque(); queue.addToFront(5); queue.PrintDeque(); queue.removeFront(); queue.PrintDeque(); queue.addToBack(7); queue.PrintDeque(); queue.removeBack(); queue.PrintDeque(); queue.addFront(9); queue.PrintDeque(); queue.addBack(7); queue.PrintDeque(); queue.addFront(3); queue.PrintDeque(); } Data Structure

2. Calculator의 구현 Let's convert an infix string to a postfix string. Postfix preserves the order of operands, so an operand can be appended to postfix as soon as that operand is encountered in infix. The operands for ‘-’ are not yet in postfix, so ‘-’ must be temporarily saved somewhere. (stack) INFIX x – y * z INFIX POSTFIX x – y * z x INFIX POSTFIX x – y * z x – Data Structure

2. Calculator의 구현 Next operand is appended to postfix. The operands for '*' must be pushed to the stack, because '*' has greater precedence than top operator, '-', of the stack. Next operand is appended to postfix INFIX POSTFIX x – y * z xy – INFIX POSTFIX x – y * z xy * – INFIX POSTFIX x – y * z xyz * – Data Structure

2. Calculator의 구현 At the end of infix expression, pop the all data from the stack. How about the followings? Until now, do you understand…? INFIX POSTFIX x – y * z xyz*- INFIX x * y - z INFIX POSTFIX x * y - z xy * Data Structure

2. Calculator의 구현 The top operator '*‘ stored in the stack must be popped and then the operator ‘-’ should be pushed, because ‘-' has lower precedence than the top operator, ‘*', of the stack. Next operand is appended to postfix. At the end of infix expression, pop the all data from the stack. INFIX POSTFIX x * y - z xy* – INFIX POSTFIX x * y - z xy*z – INFIX POSTFIX x * y - z xy*z- Data Structure

2. Calculator의 구현 a + b * c / d - e abc*d/+e – 알고리즘 Exercise 피연산자를 만나면 그대로 출력 연산자를 만나면 Stack Top에 있는 것보다 새로 들어오려는 연산자의 우선순위가 높을 경우 그 새로운 연산자를 Push Stack Top에 있는 것보다 새로 들어오려는 연산자의 우선순위가 낮거나 같을 경우 Stack Top의 것을 Pop 하여 출력한 후 새로운 연산자를 Push 더 이상 수식표현이 없으면 스택 내의 모든 연산자를 Pop하여 출력 Exercise INFIX POSTFIX a + b * c / d - e abc*d/+e – Data Structure

2. Calculator의 구현 How about this? The operator ‘(‘ is just pushed to the stack. Next operand is appended to postfix. INFIX (x – y) * z INFIX POSTFIX (x – y) * z ( INFIX POSTFIX (x – y) * z x ( Data Structure

2. Calculator의 구현 In stack top, there is ‘(‘. At this case, just push ‘-’ Next operand is appended to postfix. The operator ‘)’ allows to pop all elements above the operator ‘(‘ in the stack. And then, both ‘(‘ and ‘)’ are just ignored. INFIX POSTFIX (x – y) * z x – ( INFIX POSTFIX (x – y) * z xy – ( INFIX POSTFIX (x – y) * z xy- Data Structure

2. Calculator의 구현 Operator is pushed to the stack Next operand is appended to postfix. At the end of infix expression, pop the all data from the stack. INFIX POSTFIX (x – y) * z xy- * INFIX POSTFIX (x – y) * z xy-z * INFIX POSTFIX (x – y) * z xy-z* Data Structure

2. Calculator의 구현 x * (y + z – (a / b + c) * d) / e 괄호를 고려한 최종 알고리즘 Case 1 - 피연산자를 만나면 그대로 출력 Case 2 - 연산자를 만나면 Stack Top에 ‘(‘이 있는 경우 : 현재 연산자를 단순히 Stack에 Push한다. Stack Top에 있는 것보다 현재 연산자의 우선순위가 높을 경우 : 현재 연산자를 단순히 Stack에 Push한다. Stack Top에 있는 것보다 현재 연산자의 우선순위가 낮거나 같을 경우 : Stack Top의 것을 Pop 하여 출력한 후 현재 연산자를 Stack에 Push한다. Case 3 – 괄호를 만나면 왼쪽 괄호 ‘(’인 경우 : 단순히 Stack에 ‘(‘을 Push 한다. 오른쪽 괄호 ‘)’인 경우 : 스택에서 왼쪽 괄호와 그 위에 쌓여있는 연산자를 모두 Pop하여 출력한다. 더 이상 수식표현이 없으면 스택 내의 모든 연산자를 Pop하여 출력 Exercise INFIX POSTFIX x * (y + z – (a / b + c) * d) / e Data Structure

2. Calculator의 구현 Left-associative와 Right-associative 4 ^ 2 ^ 3 = 4 ^ (2 ^ 3) = 4 ^ 6 2 + 3 + 5 = (2 + 3) + 5 = 5 + 5 10 % 7 % 2 = (10 % 7) % 2 = 3 % 2 = 1 Data Structure

2. Calculator의 구현 문제 2. Calculator의 구현 – 1/3 실행 예 > (3 + 4)^2 - 3 * (2 + 3) 3 4+2^3 2 3+*- 34 > 3 * 4 - 5 * 6 3 4*5 6*- -18.0 > 100 / 2 ^ 2 100 2 2^/ 25 > 2^2^3 2 2 3^^ 256 > q 괄호 처리를 포함한 Infix  Postfix 변환과 Evaluation 결과를 보여주면 기본 점수 30점 Data Structure

2. Calculator의 구현 문제 2. Calculator의 구현 – 2/3 실행 예 > (1 + 3 * 33 괄호 매칭 오류 > 3 & 4 - 5 * 6 허용하지 않은 기호 기입 오류 > 100 2 ^ 2 연속된 Operand 기입 오류 > 100 + * 2 연속된 Operator 기입 오류 > 1 + 3 * 수식 자체 오류 > q 왼쪽과 같은 오류 처리를 수행하면 추가 점수 20점 Data Structure

2. Calculator의 구현 문제 2. Calculator의 구현 – 3/3 Due Date 실행 예 문제 2의 총 점수 기본 점수 30 + 오류 처리 20 + 실수 처리 10 + 음수 처리 10 = 70 점 만점 주의: Stack 자료구조 사용하지 말고 이번 숙제에서 개발한 Deque를 Stack 처럼 사용할 것. Due Date 2007년 5월 15일 23시 59분 59초 > 1 + 20.2 + 11.3 1 20.2 + 11.3 + 32.5 왼쪽과 같이 실수 (Real Number)처리를 하면 추가 점수 10점 > ((-20.2) + 11.3) * 1 (-20.2) 11.3 + * -8.9 왼쪽과 같이 음수 처리를 하면 추가 점수 10점 Data Structure