중간고사 (자료 구조)

Similar documents
슬라이드 1

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

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

Chapter 4. LISTS

Chapter 4. LISTS

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

11장 포인터

Microsoft PowerPoint - ch07 - 포인터 pm0415

06장.리스트

chap 5: Trees

4장

슬라이드 1

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

1장. 리스트

Chapter 4. LISTS

슬라이드 1

11장 포인터

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

Microsoft PowerPoint - 06-List.ppt

슬라이드 1

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

02장.배열과 클래스

슬라이드 1

리스트연산, 검색 + 삽입 + 삭제 새로운항목을리스트의처음, 중간, 끝에추가. 기존의항목을리스트의임의의위치에서삭제. 모든항목을삭제. 기존항목을대치 (replace). 리스트가특정항목을가지고있는지를검색 (search). 리스트의특정위치의항목을반환. 리스트안의항목의개수를센

슬라이드 1

슬라이드 1

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

리스트구현방법 배열 (array) 을이용하는방법 구현이간단 삽입, 삭제동작에따른원소이동. 항목의개수제한, 정적기억공간할당. 메모리낭비, 오버플로우 연결리스트 (linked list) 를이용하는방법 구현이복잡 삽입, 삭제가효율적 크기가제한되지않음 Lecture 03_Li

1. 리스트개념 리스트 (list) 고정된길이의자료 ( 원소 ) 들을순차적으로나열해놓은집합을가르키는자료구조의추상적인개념 순서를가진항목들의모임 집합 (set) : 항목간의순서의개념이없음 리스트의예 요일 : ( 일요일, 월요일,, 토요일 ) 한글자음의모임 : (ᄀ,ᄂ,,ᄒ

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-2pointer.ppt

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

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

Microsoft PowerPoint - 제3장-배열.pptx

Microsoft PowerPoint - chap4_list

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Microsoft PowerPoint - 08-chap06-Queue.ppt

Microsoft PowerPoint - 08-Queue.ppt

PowerPoint 프레젠테이션

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

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

03_queue

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

<4D F736F F F696E74202D FBFACB0E120C0DAB7E1B1B8C1B6205BC8A3C8AF20B8F0B5E55D>

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

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

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

03장.스택.key

슬라이드 1

Chap 6: Graphs

Microsoft PowerPoint - 07-chap05-Stack.ppt

q 이장에서다룰내용 1 연결자료구조방식 2 단순연결리스트 3 원형연결리스트 4 이중연결리스트 3 다항식의연결자료구조표현 2

untitled

Algorithms

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

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Microsoft PowerPoint - chap-11.pptx

설계란 무엇인가?

Microsoft PowerPoint - 제11장 포인터

슬라이드 1

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

PowerPoint 프레젠테이션

C 언어 강의노트

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

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

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

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

Microsoft PowerPoint - 자료구조2008Chap06

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

C 언어 프로그래밊 과제 풀이

중간고사

슬라이드 1

chap x: G입력

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

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

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

4장

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

슬라이드 1

OCW_C언어 기초

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - ch07 - 포인터 pm0415

chap x: G입력

chap01_time_complexity.key

설계란 무엇인가?

05_tree

Microsoft PowerPoint - Chapter_09.pptx

ch15

슬라이드 1

PowerPoint Template

Data Structure

Microsoft Word - FunctionCall

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

Lab 5. 실습문제 (Double linked list)-1_해답.hwp

Transcription:

Data Structures 215 중간고사 문제에서명시적으로기술하지않은부분은교재의내용에근거함. 215. 1. 27. 1 다음용어에대하여간단하게설명하시오 ( 각 3 점 *1=3 점 ) 1 abstract data type 6 Circular linked list 2 recursion 3 time complexity 4 space complexity 5 Single linked lists 7 Double linked list 8 stacks 9 queues 1 postfix 1 자료구조와이를조작하는연산집합의묶어놓은타입 2 자기와동일한함수를호출 3 연산횟수 ( 또는연산에소요되는시간의길이 ) 4 연산에필요한메모리공간의크기 5 동일한정보를가진노드들을포인터로연결한데이터구조또는배열 (array) 에서중간데이터삽입 / 삭제시발생하는과도한 move 연산발생을제거하기위해만든노드들의연결구조 6 List 구조에서맨마지막노드가맨처음노드를가리키는구조 7 List 구조에서각노드가이전및이후노드를가리키는포인트를가지고있는구조, 즉각노드가이전노드를가리키는 left link pointer, 이후노드를가리키는 right link pointer 를유지하고있음 8 Last-in First-Out 특징을가지는자료구조 9 First-in First-Out 특징을가지는자료구조 1 연산자가관련된 2 개의피연산자뒤에나오는수식표현 2 다음빈칸에알맞은단어또는숫자를쓰시오. ( 각 3 점 *9=27 점 ) 1 하나의함수가호출할수있는 recursive call 의개수는 (stack 또는 stack memory) 이허용하는한도에의해결정된다. ( 주의 : 자료구조명칭이들어감 ) 2 float a[1] 으로선언된배열의시작주소를 1 번지라고할때, 배열의 1 번째 cell 의주소는 [14] 번지이다. ( 주의 : sizeof(float) => 4 를출력 ) 3 int a[5] =1,2,3,4,5; int *p=a; *p=5; p=p+3; *p=1; 문장이수행되면, 배열변수에포함된모든 cell 의내용은어떻게변경되나? 5,2,3,1,5,

4 int i=1; int *pi=&i; 의문장이수행된이후, 포인터변수를이용하여변수 i 의값을 2 으 로변경하는문장은 [ *pi=2 ] 이다. 5 int a[1]; 과동일하게 동적으로 정수 1 개를저장할수있는메모리를할당하는문장은 [int *p=(int*)malloc(sizeof(int)*1); ] 이다. (Hint: malloc() 함수를활용 ) 6 struct A int fa; int fb; a; struct A *p=&a; 라고할때, 변수 p 를이용하여멤버변수 fa 에 1 을할당하는문장은 [(*p).fa = 1; ] 이다. 7 단순연결리스트의노드에대한구조체를정의한 C 코드는 typdef struct ListNode element data; struct ListNode *link; ListNode; 이다. 단순연결리스트의노드들을노 드포인터 p 로탐색하고자한다. p 가현재가리키는노드에서다음노드로가기위한 C 코 드는 [p = p->link; ] 이다. 8 미로 (maze) 게임을구현하기위해서필요한자료구조는 [Stack, 스택 ] 이다. 9 은행창구에서고객들이들고나가는상황을시뮬레이션하기위해필요한자료구조는 [Queue, 큐 ] 이다. 3 다음 2 개의 C 언어코드에서시간복잡도를 BigOh 표기법으로각각작성하고그근거 를제시하시오. (1 점 ) ( 주의 : 좌측에있는 sub() 함수의시간복잡도는 O(n) 으로가정 ) for (i=1; i < n; i *= 2) sub(); // sub() 함수의시간복잡도 =O(n) void foo(int n) int i, j, k, r; for(i=; i<n; ++i) for (j=; j<n; ++j) for(r=; r<1; ++r) ++k; 좌측 : O(n*log 2n) => 반복문안에서 i 가 2 배증가하면서 n 까지증가함. k 번반복 한다고할때, i 값은 2 k 가되고, 그값이 n 과같다고한다면 k = log 2n 우측 : 대입 (i=): 1 회 + 비교 (i<n): (n+1) 회 + 덧셈 (++i): n 회 + 대입 (j=): n 회 + 비교 (j<n): n*(n+1) 회 + 덧셈 (++j): n*n 회 + 대입 (r=): n*n 회 + 비교 (r<1): n*n*11 회 + 대입 (++r): n*n*1 회 + 덧셈 (++k): n*n*1 = > O(n 2 )

4 다음함수를 recursive(1) 로호출하였을때, 화면에출력되는내용과최종적인함수의 반환값을구하시오. (1 점 ) int recursive(int n) printf( %d,, n); if (n<1) return -1; else return ( recursive(n-2) + 1 ); 화면출력 : 1, 8, 6, 4, 2, 반환값 : 4 5 다음을계산하는 recursive function 을작성하시오. (Note: 함수명은 sum ) (1 점 ) 1+2+3+ +n int sum(int n) if( n==1 ) return 1; else return (n + sum(n-1));

6 다음은단순연결리스트 (single linked list) 를위한데이터구조를보여주는 C 코드이다. 빈칸을완성하시오. (1 점 ) // phead: 리스트의헤드포인터의포인터 // p : 선행노드 // new_node : 삽입될노드 void insert_node(listnode **phead, ListNode *p, ListNode *new_node) if( *phead == NULL ) // 공백리스트인경우 new_node->link = NULL; *phead = new_node; else if( p == NULL ) // p 가 NULL 이면첫번째노드로삽입 [new_node->link = *phead;] *phead = new_node; else // p 다음에삽입 [new_node->link = p->link; ] p->link = new_node;

7 다음은 6 번문항의단순연결리스트에대한추상데이터타입 ListType 과관련함수 get_node_at( ) 를보여준다. get_node_at( ) 함수는리스트안에서입력인자 pos 위치에있는노드의주소값을반환한다. 빈칸내용을완성하시오. (Hint: 반복문을사용함 ) (1 점 ) => 8 다음은 double linked list 의데이터구조및이를통해구현한 double linked list 의 예를보여준다. 이 list 의적정한위치에새로운노드를삽입하는함수를완성하시오. (1 점 ) // 노드 new_node 를노드 before 의오른쪽에삽입한다. void dinsert_node(dlistnode *before, DlistNode *new_node) new_node->llink = before; new_node->rlink = before->rlink; [before->rlink->llink = new_node;] [before->rlink = new_node;]

9 다음은 stack 의 push 연산과 pop 연산을구현한코드이다. (15 점 ) 1 빈칸의코드를완성하시오. (5 점 ) 2 pop () 함수의시간복잡도를 BigOh 표기법으로작성하고, 그이유를설명하시오. (5 점 ) 시간복잡도는 O(1) 이다. 이는 pop() 함수가 stack 에저장되어있는데이 터개수에상관없이일정하게항상 top 에있는노드의데이터를반환하기 때문이다. 3 stack 에포함된모든노드를출력하는함수 stack_output( ) 를작성하시오. (5 점 ) int stack_output(linkedstacktype *s) StackNode *temp=s->top; while(temp!= NULL ) printf( %d\n, temp->item); temp = temp->link;

1 Palindrome 은앞에서나뒤에서나그철자가같은단어또는구를의미한다. 예를들어, reviver 는 palindrome 이다. 어떤단어나구가 palindrome 인지아닌지를 stack 을이용해서검사할수가있다. 7 번문제에서정의된 stack 을사용하여 palindrome 이면 1 를, 아니면 을 return 하는 C 함수를작성하시오. (Hint: 함수명은 palindrome 으로함. 문자열의길이를반환하는함수는 strlen() 임 ) (15 점 ) void main() char s[5]; int len, i; char ch; printf("enter the String\n"); scanf("%s", s); len = strlen(s); for (i = ; i<len/2;i++) // len 이홀수, 짝수상관없이절반을 push push(s[i]); if( len%2!= ) i++; // len 이홀수인경우, 정가운데문자 skip 하기위함 for ( ; i < len; i++) ch = pop(); if (ch == s[i]) continue; else printf("%s is not a palindrome\n", s); break; if (i == len) printf("%s is a palindrome\n", s);

11 Stack 을이용하여 infix 로표현된수식을계산하기위한프로그램은 2 단계과정을거쳐작업을수행한다. 교재내용에준거하여아래물음에답하시오. (4 점 *3=12 점 ) 1 Infix 로표현된수식 1*2/(3-1)+4*5 이 1 단계과정을거쳐 postfix 로변환된형태는? => 1 2 * 3 1 - / 4 5 * + 2 위에주어진수식 1*2/(3-1)+4*5 에서, 프로그램이 1 단계과정에서두번째 1 까지읽었을때, stack 의내용을쓰시오. => / ( - ( 맨오른쪽이 top) 3 (1) 항의문제에서제시한 postfix 형태의수식을계산하는 2 단계과정에서, 프로그램이두번째 * 연산자까지읽어서이를처리하였을때 stack 의내용을쓰시오. => 2 ( 맨오른쪽이 top) 12 아래와같은다항식을효과적으로저장하기위한자료구조를제시하시오. ( 아래문항에 답하면됨 ) (15 점 ) 1x 5 +6x+3 1 위와같은다항식을효과적으로저장하기위한 linked list 형태의자료구조를 C 언어문법에맞게작성하시오. ( 주의 : 하나의노드를정의하기위한자료구조타입 과 list 전체에대한메타데이터를저장하는자료구조타입을제시해야함 ) (1 점 ) 2 두개의다항식이주어졌을때, 이를더하는함수 poly_add() 의알고리즘을개략적 으로기술하시오. (5 점 ) 교재참조

13 행렬 (matrix) 를 2 차원배열을이용하여표현하는경우, 대부분의항들이 인희소행 렬 (sparse matrix) 의경우 ( 아래그림의 B 행렬 ) 메모리공간낭비가많아진다. 2 A 8 7 3 9 1 5 9 B 6 5 2 7 8 1 1 이를해결하기위한자료구조를제시하고설명하시오. ( 주의 : 제시하는자료구조를 C 언어의구조체문법에맞게표현하고, 주요부분을설명해야함 ) (1 점 ) typedef struct int row; => 행번호 int col; => 열번호 int value; => 해당행, 열에해당하는값 element; typedef struct SparseMatrix element data[max_terms]; int rows; => 행의개수 int cols; => 열의개수 int terms; => 항의개수 SparseMatrix; => 행렬에존재하는 < 행, 열, 값 > 들을저장하는배열 2 위에서제시한자료구조를가지고행렬데이터를표현할때, 덧셈연산을수행하는함수의알고리즘을작성하시오. ( 주의 : 해당알고리즘의핵심적인내용을우리말로기술하기바람 ) (5 점 ) 교재참조