Chapter 4. LISTS

Similar documents
Chapter 4. LISTS

chap 5: Trees

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

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

11장 포인터

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

Chapter 4. LISTS

슬라이드 1

06장.리스트

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

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

Chap 6: Graphs

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

03_queue

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

Algorithms

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

untitled

untitled

untitled

Chap 6: Graphs

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Microsoft PowerPoint - 자료구조2008Chap06

중간고사 (자료 구조)

슬라이드 1

Chap 6: Graphs

PowerPoint 프레젠테이션

C 언어 강의노트

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

Microsoft PowerPoint - 07-chap05-Stack.ppt

11장 포인터

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

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

PowerPoint 프레젠테이션

03장.스택.key

<4D F736F F F696E74202D FBFACB0E120C0DAB7E1B1B8C1B6205BC8A3C8AF20B8F0B5E55D>

chap01_time_complexity.key

Microsoft PowerPoint - ch07 - 포인터 pm0415

chap x: G입력

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

슬라이드 1

설계란 무엇인가?

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

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

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>


슬라이드 1

ABC 10장

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

1장. 리스트

1장. 유닉스 시스템 프로그래밍 개요

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

Microsoft PowerPoint - 제11장 포인터

untitled

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - chap-11.pptx

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

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

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

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

Microsoft PowerPoint - chap4_list

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

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

슬라이드 1

K&R2 Reference Manual 번역본

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

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

Microsoft PowerPoint - 제3장-배열.pptx

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

Microsoft PowerPoint - chap06-2pointer.ppt

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

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

슬라이드 1

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

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

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

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

CompareAndSet(CAS) 함수는 address 주소의값이 oldvalue 인지비교해서같으면 newvalue 로 바꾼다. 소프트웨어 lock 을사용하는것이아니고, 하드웨어에서제공하는기능이므로더빠르고 간편하다. X86 에서는 _InterlockedCompareEx

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

untitled

untitled

Chapter #01 Subject

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Frama-C/JESSIS 사용법 소개

중간고사

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

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

Microsoft PowerPoint - chap06-1Array.ppt

Algorithms

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

4장

제 1 장 기본 개념

PowerPoint Template

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

Transcription:

6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립 예 : 0 4, 3 1, 6 10, 8 9, 7 4, 6 8, 3 5, 2 11, 11 0 동치클래스 : {0, 2, 4, 7, 11; {1, 3, 5; {6, 8, 9, 10 4 장. 리스트 (Page 1)

동치클래스검색알고리즘 1. 동치항 <i, j> 를입력한후저장 2. 원소 0 부터시작하여 0 의동치항 <0, j> 항들을검색한후, j 를 0 과동일한클래스에포함 Transitivity 속성에의해 <j, k> 항의원소 k 도 0 과동일한클래스에포함됨 이과정을반복하여 0 을포함하는모든원소를발견 3. 클래스에포함되지않은다른원소들에대해단계 2 를반복 4 장. 리스트 (Page 2)

동치클래스검색을위한자료구조 (1) 변수선언 m: 입력된동치항의수 n: 원소의수 동치항의구현방법 배열 : pairs[n][n] <i, j> 가입력될경우, pairs[i][j] 와 pairs[j][i] 를 1 로설정 원소의수에비해동치항의수가적을경우, 메모리낭비 n 개의연결리스트 : seq[n] <i, j> 가입력될경우 노드 j 를 seq[i] 가가리키는리스트에추가 노드 i 는 seq[j] 가가리키는리스트에추가 4 장. 리스트 (Page 3)

예 : 동치항의입력이완료된후의리스트 seq [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] data link 11 3 11 5 7 3 8 4 6 8 6 0 ^ ^ ^ ^ ^ ^ data link 4 1 0 10 9 2 ^ ^ ^ ^ ^ ^ 4 장. 리스트 (Page 4)

동치클래스검색을위한자료구조 (2) 일차원 boolean 배열 out[n] out[i] = TRUE: 원소 i 를출력하여야함. ( 초기값 ) out[i] = FALSE: i 가이미출력되어다시출력할필요없음. 리스트표현을이용한동치클래스검색 Step 1: 동치항을입력받아 seq[] 를이용한리스트구성 Step 2: out[i] = TRUE 인첫번째원소 i, 0 i < n, 를선택하여 seq[i] 리스트를스캔하면서리스트의원소들을출력 seq[i] 의원소중에서 out[] 배열의값이 TRUE 인원소들의리스트들을현재스캔을완료한후스캔하여야함. (Stack 이필요 ) Stack 을구현하기위하여해당노드의 link 필드를 stack 의다음원소를가리키는포인터로변경 4 장. 리스트 (Page 5)

Program 4.21: 초기동치알고리즘 void equivalence ( ) { initialize; while (there are more pairs) { read the next pair < i, j >; process this pair; initialize the output; do output a new equivalence class; while ( not done ); 4 장. 리스트 (Page 6)

Program 4.22: 수정된동치알고리즘 void equivalence() { initialize seq[] to NULL and out[] to TRUE; while ( there are more pairs ) { read the next pair < i, j >; put j on the seq[i] list; put i on the seq[j] list; for (i = 0; i < n; i++) if (out[i]) { out[i] = FALSE; output this equivalence class; 4 장. 리스트 (Page 7)

Program 4.23: 최종동치알고리즘 (1) #include <stdio.h> #include <alloc.h> #define MAX_SIZE 24 #define IS_FULL(ptr) (!(ptr)) #define FALSE 0 #define TRUE 1 struct node { int data; struct node *link; ; // 정수형의데이터가입력된다고가정 void main(void) { short int out[max_size]; struct node *seq[max_size], *x, *y, *top; int i, j, n; printf("enter the size (<= %d) ", MAX_SIZE ); scanf("%d", &n); 4 장. 리스트 (Page 8)

Program 4.23: 최종동치알고리즘 (2) for (i = 0; i < n; i++) // seq[] 와 out[] 배열을초기화 { out[i] = TRUE; seq[i] = NULL; /* Phase 1: Input the equivalence pairs: */ printf("enter a pair of numbers (-1-1 to quit): "); scanf("%d%d", &i, &j); while (i >= 0) { // 음수가입력되면리스트생성종료 x = (struct node *) malloc(sizeof(struct node)); if (x == NULL) { fprintf(stderr, "The memory is full"); exit(1); x data = j; x link = seq[i]; seq[i] = x; // j를 i 리스트의앞에추가 x = (struct node *) malloc(sizeof(struct node)); if (x == NULL) { fprintf(stderr, "The memory is full"); exit(1); x data = i; x link = seq[j]; seq[j] = x; // i를 j 리스트의앞에추가 printf("enter a pair of numbers (-1-1 to quit): "); scanf("%d%d", &i, &j); 4 장. 리스트 (Page 9)

Program 4.23: 최종동치알고리즘 (3) for (i = 0; i < n; i++) /* Phase 2: output the equivalence classes */ if (!out[i]) continue; printf(" \ n New class: %5d ", i ); // 새로운클래스출력시작 out[i] = FALSE; // i를출력하였음. x = seq[i]; top = NULL; // 스택초기화 for ( ; ; ) { // 클래스의나머지원소를찾자 while (x) { // 리스트를스캔 j = x data; if (out[j]) { // j가아직출력되지않았다면 printf("%5d", j ); out[j] = FALSE; // j를출력한후, y = x link; x link = top; top = x; x = y; // push() else x = x link; if (!top) // 현재클래스의모든원소를출력하였음. break; x = seq[top data]; top = top link; // pop() 4 장. 리스트 (Page 10)

예 : 스택의삽입과삭제과정 seq [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] top y data link data link 11 3 11 5 7 3 8 4 6 8 6 0 ^ ^ ^ ^ ^ ^ ^ top 4 1 0 10 9 2 ^ ^ ^ ^ ^ ^ top 4 장. 리스트 (Page 11)

동치알고리즘의분석 m: 입력된동치항의수, n: 원소의수 초기화및동치항의입력단계 : O(m+n) 동치클래스출력단계 : O(m+n) 각노드는기껏해야한번스택에저장 2*m 개의노드가존재하며, for loop 는 n 번실행 O(2m) O(n) 전체적인시간복잡도 = O(m+n) 4 장. 리스트 (Page 12)

문제 1 data 필드와 link 필드를갖는노드들로구성된아래연결리스트에서 data 필드가 b 인노드를삭제하는 C 프로그램의부분은? 단, first 는리스트를가리키는포인터이며, temp 는 first 와동일한타입의포인터이다. [10] 1 temp = first; first = first->link; free(temp); 2 first = first link; temp = first; free(temp); 3 temp = first link; first link = first link link; free(temp); 4 first link = first link link; temp = first link; free(temp); 5 temp = first link; free(temp); first link = first link link; 13

문제 2 다음은원형연결리스트 (circular linked list) 에서 data 필드값이 0 보다작은노드들의개수를반환하는함수이다. A 와 B 에들어갈내용은무엇인가? [10] struct node { intdata; struct node *next; ; int compute_sum(struct node *ptr) { struct node *p = ptr next; int count = (ptr data < 0)? 1 : 0; for ( A ) if ( B ) count++; return count; 4 장. 리스트 (Page 14)

문제 3 다음은이중연결리스트 (doubly linked list) 에서 temp 가가리키는노드를 ptr 이가리키는노드의왼쪽에삽입하는알고리즘의일부이다. A 와 B 에들어갈문장은무엇인가? 단, ptr 의이전노드와다음노드는 NULL 이아니다. [10] before next 100 200 temp 150 ptr temp next = ptr; A ; B ; ptr before = temp; 4 장. 리스트 (Page 15)

문제 4 이중연결리스트에서노드 p 의다음 (next) 노드가 q 이고노드 q 의이전 (prev) 노드가 p 인경우, 인접한 p, q 노드의위치를서로바꾸기위하여아래연산들이필요하다. 어떤순서로실행되어야하는가? ( 단, p, q 노드는모두연결리스트의처음노드나마지막노드가아니라고가정한다 ) [10] 1 p prev = q; 2 p prev next = q; 3 p next = q next; 4 q next = p; 5 q next prev = p; 6 q prev = p prev; 4 장. 리스트 (Page 16)

문제 5 두개의단순연결리스트 x, y 의후위노드 ( 음영부분 ) 들을서로스왑 (swap) 하고자한다. 후위노드들의 next 는 NULL 이아니라고가정할때, 아래 A 와 B 의 box 를채우시오. [10] x... x... y... y... struct node { int data; struct node *next; ; struct node *swap_next_node(struct node *x, struct node *y) { struct node *tmp; tmp = x next next; A ; tmp = x next; B ; 4 장. 리스트 (Page 17)