Algorithms

Similar documents
<4D F736F F F696E74202D FBFACB0E120C0DAB7E1B1B8C1B6205BC8A3C8AF20B8F0B5E55D>

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

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

슬라이드 1

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

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

06장.리스트

11장 포인터

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

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

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

1장. 리스트

Chapter 4. LISTS

C++ Programming

Chapter 4. LISTS

C 언어 강의노트

Chapter 4. LISTS

Microsoft PowerPoint - 자료구조2008Chap06

chap 5: Trees

Microsoft PowerPoint - chap4_list

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

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

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

슬라이드 1

슬라이드 1

Algorithms

슬라이드 1

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

4장

Microsoft PowerPoint - ch08_큐 [호환 모드]

C++ Programming

슬라이드 1

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

Microsoft PowerPoint - 06-List.ppt

03_queue

슬라이드 1

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - 08-Queue.ppt

Microsoft PowerPoint - 08-chap06-Queue.ppt

슬라이드 1

슬라이드 1

중간고사 (자료 구조)

PowerPoint 프레젠테이션

슬라이드 1

KNK_C_05_Pointers_Arrays_structures_summary_v02

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

02장.배열과 클래스

01_List

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

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-2pointer.ppt

Algorithms

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

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

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

슬라이드 1

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

chap 5: Trees

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

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

Microsoft PowerPoint - 제11장 포인터

K&R2 Reference Manual 번역본

Microsoft PowerPoint - 07_(C_Programming)_(Korean)_Composite_Data_Types

Microsoft PowerPoint - chap06-1Array.ppt

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

ABC 10장

PowerPoint 프레젠테이션

Chap 6: Graphs

PowerPoint Template

Microsoft PowerPoint - 제3장-배열.pptx

슬라이드 1

11장 포인터

기초컴퓨터프로그래밍

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

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

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

슬라이드 1

2002년 2학기 자료구조

슬라이드 1

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

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

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

e-비즈니스 전략 수립

슬라이드 1

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

설계란 무엇인가?

Chap 6: Graphs

C 언어 이론

제 11 장 다원 탐색 트리

7장

Microsoft PowerPoint - chap-11.pptx

untitled

PowerPoint 프레젠테이션

Chap 6: Graphs

4장. 순차자료구조

Transcription:

자료구조 & 알고리즘 리스트 (List) Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com

목 차 선형리스트 연결리스트 2

선형리스트 선형리스트 선형리스트의개념 선형리스트의구현 연결리스트 3

선형리스트개념 리스트 (List) 목록, 대부분의목록은도표 (Table) 형태로표시 추상자료형리스트는이러한목록또는도표를추상화한것 가족이름리스트 좋아하는음식리스트 오늘의할일리스트 서두옥 김치찌개 자료구조수업 이승희 크림스파게티 보고서작성 서하은 불고기피자 드라마시청 서영은 잡채 청소하기......... 4

선형리스트개념 (cont d) 선형리스트 (Linear List) 순서리스트 (Ordered List) 리스트에서나열한원소들간에순서를가지고있는리스트 원소들간의논리적인순서와물리적인순서가같은구조 ( 순차자료구조 ) 가족이름리스트좋아하는음식리스트오늘의할일리스트 1 서두옥 1 김치찌개 1 자료구조수업 2 이승희 2 크림스파게티 2 보고서작성 3 서하은 3 불고기피자 3 드라마시청 4 서영은 4 잡채 4 청소하기 5

선형리스트개념 (cont d) 선형리스트 (cont d) 선형리스트에서의원소삽입 원소삽입전 0 1 2 3 4 5 6 10 20 40 50 60 70 0 1 2 3 4 5 6 원소삽입후 10 20 40 50 60 70 0 1 2 3 4 5 6 10 20 30 40 50 60 70 원소 30 삽입 6

선형리스트개념 (cont d) 선형리스트 (cont d) 선형리스트에서의원소삭제 원소삭제전 0 1 2 3 4 5 6 10 20 30 40 50 60 70 0 1 2 3 4 5 6 원소삭제후 10 20 40 50 60 70 원소 30 삭제 0 1 2 3 4 5 6 10 20 40 50 60 70 7

1 차원배열의순차표현 선형리스트의구현 1 차원배열은인덱스를하나만사용하는배열 과목국어영어수학총점 점수 70 80 90 240 arr int arr[4] = {70, 80, 90, 240}; [0] [1] [2] [3] 70 80 90 240 0x0012ff70 0x0012ff74 0x0012ff78 0x0012ff7b... 70 80 90 240... [ 학생성적의선형리스트의논리구조 ] [ 학생성적의선형리스트의물리구조 ] 8

선형리스트의구현 (cont d) 2 차원배열의순차표현 행과열의구조로나타내는배열 메모리에저장될때에는 1 차원의순서로저장 학생 과목 국어영어수학총점 1 70 80 90 240 2 50 60 70 180 3 60 70 80 210 int score[3][4] = { }; {70, 80, 90}, {50, 60, 70}, {60, 70, 80} 9

연결리스트 선형리스트 연결리스트 연결자료구조 단순연결리스트 원형연결리스트 이중연결리스트 10

연결자료구조 순차선형리스트의문제점 리스트가순서를유지해야하므로원소들의삽입과삭제가 어렵다. 삽입연산이나삭제연산후에연속적인물리주소를유지하기위해서원소들을 이동시키는추가적인작업과시간이소요된다. 원소들의이동작업으로인한오버헤드가발생 원소의개수가많고삽입과삭제연산이많이발생하는경우더많이발생한다. 메모리사용의비효율성 최대한의크기를가진배열을처음부터준비해두어야하기때문에기억장소의 낭비를초래할수있다. 11

연결리스트 (Linked List) 연결자료구조 (cont d) 순차자료구조에서의연산시간에대한문제와저장공간에대한 문제를개선한자료표현방법 연결자료구조 (Linked Data Structure) t 비순차자료구조 (Nonsequential Data Structure) 데이터아이템을줄줄이엮은 (Link, Chain) 것 노드 (Node) : < 원소, 주소 > 단위로저장 데이터필드 (data field) : 원소의값을저장 링크필드 (link field) : 노드의주소를저장 data 데이터 link 링크 12

자기참조구조체 연결자료구조 (cont d) 자신의구조체자료형을가리키는포인터멤버를가질수있다. struct { }; char int float _score struct _score name[12]; kor, eng, math, tot; ave; *link; typedef struct _score SCORE; link 멤버는자신과같은구조의구조체주소를저장하고있다가필요시저장된주소의구조체에접근하는것을목표로한다. 13

연결자료구조 (cont d) 자기참조구조체 (cont d) 구조체노드의생성 SCORE *head, *new_node; // struct score *head, *new_node; head = NULL; // SCORE 크기의메모리할당 new_node = (SCORE *)malloc(sizeof(score)); if(new_node == NULL) { printf( 메모리할당실패!!! \n ); exit(100); } new_node name kor eng math tot ave NULL 14

단순연결리스트 단순연결리스트 (Singly linked List) 연결리스트 선형연결리스트 (linear linked list) 단순연결선형리스트 (i (singly linked likdlinear list) typedef struct _node { int data; struct _node *link; }NODE; NODE *head; head 50 20 NULL 15

단순연결리스트 (cont d) 단순연결리스트삽입알고리즘 리스트의첫번째노드삽입알고리즘 insertfirstnode(head, data) new_node makenode(data); // 삽입할노드의메모리할당및초기화 new_node.link = head; head new_node; end insertfistnode() 번지 2000 번지 3000 번지 head X 2000 3000 NULL 9000 9000 번지 new_node 9000 data NULL 16

단순연결리스트 (cont d) 단순연결리스트삽입알고리즘 (cont d) 리스트의중간노드삽입알고리즘 head NULL insertmiddlenode(head, pre, data) 9000 new_node makenode(data); if (head = NULL) then new_node 9000 9000 번지 data NULL head new; else { new_node.link pre.link; pre.link new_node; } end insertmiddlenode() 17

단순연결리스트 (cont d) 단순연결리스트삽입알고리즘 (cont d) 중간노드로삽입하는과정 : 리스트가빈리스트가아닐때... 1) 리스트에서새로운노드 (new_node) 가삽입될이전노드 (pre) 의위치를탐색 2) 각노드의링크필드수정 head 번지 2000 번지 3000 번지 2000 9000 X 3000 NULL pre 9000 번지 new_node 9000 data NULL 2000 18

단순연결리스트 (cont d) 단순연결리스트삽입알고리즘 (cont d) 리스트의마지막노드삽입알고리즘 insertlastnode(head, data) new_node makenode(data); if (head = NULL) then else { head new_node; temp head; while (temp.link!= NULL) do temp temp.link; } end insertlastnode() temp.link new_node; 19

단순연결리스트 (cont d) 단순연결리스트삽입알고리즘 (cont d) 마지막노드로삽입하는과정 : 리스트가빈리스트가아닐때... 1) 리스트의마지막노드를탐색 2) 리스트의마지막노드 (temp) 가새로운노드 (new_node) 를가리키게한다. 번지 2000 번지 3000 번지 head 2000 3000 NULL 9000 temp temp 3000 9000 번지 new_node 9000 data NULL 20

단순연결리스트 (cont d) 단순연결리스트삭제알고리즘 리스트에서조건을만족하는노드삭제알고리즘 deletenode(head, data) if (head = NULL) then error; else { temp head; while (temp!= NULL) { if (temp.data = data) then { if (temp = head) then deletefirstnode(); else if (temp = NULL) then deletelastnode(); tn d else deletemiddlenode(); } pre temp; temp temp.link; } } end deletenode() 21

단순연결리스트 (cont d) 단순연결리스트삭제알고리즘 (cont d) 리스트의첫번째노드를삭제 삭제할노드 (old) 의다음노드 (old.link) 를 head 로연결한다. 번지 2000 번지 3000 번지 4000 번지 head X 2000 3000 4000 NULL 2000 메모리해제 temp 22

단순연결리스트 (cont d) 단순연결리스트삭제알고리즘 (cont d) 리스트의중간노드를삭제 삭제할노드 (old) 탐색후다음노드 (old.link) 를이전노드 (pre) 의다음노드 (pre.link) 로연결한다. 번지 2000 번지 3000 번지 4000 번지 head 2000 3000 X 4000 NULL 4000 메모리해제 temp temp 3000 pre 2000 23

단순연결리스트 (cont d) 단순연결리스트삭제알고리즘 (cont d) 리스트의마지막노드를삭제 삭제할노드 (old) 탐색후이전노드 (pre) 의링크필드 (pre.link) 를 NULL 로만든다. 번지 2000 번지 3000 번지 4000 번지 head 2000 3000 4000 NULL X NULL 메모리해제 temp temp 4000 pre 3000 24

단순연결리스트 (cont d) 단순연결리스트탐색알고리즘 리스트에서조건을만족하는데이터를가진노드탐색알고리즘 searchnode(head, data) temp head; while (temp!= NULL) do { } if (temp.data = data) then return temp; temp temp.link; if (temp = NULL) then return NULL; end searchnode() 25

원형연결리스트 원형연결리스트 (Circular linked List) 단순연결리스트에서마지막노드가리스트의첫번째노드를가리키게하여구조를원형으로만든연결리스트 번지 2000 번지 3000 번지 4000 번지 head 2000 3000 4000 26

이중연결리스트 이중연결리스트 (Doubly linked List) 원형연결리스트의문제점 현재노드의바로이전노드를접근하려면전체리스트를한바퀴순회해야한다. typedef struct _dnode { struct _dnode int struct _dnode }DNODE; *Llink; data; *Rlink; DNODE *head; head NULL NULL 27

이중연결리스트 (cont d) 이중연결리스트삽입알고리즘 리스트의첫번째노드로삽입 insertfirstnode(head, data) new_node makenode(data); head NULL 9000 9000 번지 if (head = NULL) then head = new_node; new_node 9000 NULL data NULL else { head.llink = new_node; new_node.rlink = head; head = new_node; } end insertfirstnode() 28

이중연결리스트 (cont d) 이중연결리스트삽입알고리즘 (cont d) 리스트의첫번째노드로삽입 : 빈리스트가아닐경우... 9000 번지 2000 번지 3000 번지 head X NULL 2000 3000 2000 NULL 9000 9000번지 new_node 9000 NULL data NULL 29

이중연결리스트 (cont d) 이중연결리스트삽입알고리즘 (cont d) 리스트의중간노드로삽입 insertmiddlenode(head, temp, data) new_node makenode(data); if (head = NULL) then head = new_node; else { new_ Node.Llink = temp.llink; new_node.rlink = temp; temp.llink.rlink = new_node; temp.link = new_node; } end insertmiddlenode() 30

이중연결리스트 (cont d) 이중연결리스트삽입알고리즘 (cont d) 리스트의중간노드로삽입 : 빈리스트가아닐경우... head 번지 9000 9000 2000번지 3000번지 NULL 2000 X X 3000 2000 NULL 2000 temp 9000 번지 new_node 9000 NULL data NULL 2000 31

이중연결리스트 (cont d) 이중연결리스트삽입알고리즘 (cont d) 리스트의중간노드로삽입 : 빈리스트가아닐경우... 번지 2000 번지 3000 번지 head NULL 2000 3000 2000 NULL temp 9000 번지 new_node 9000 NULL data NULL 32

이중연결리스트 (cont d) 이중연결리스트삽입알고리즘 (cont d) 리스트의마지막노드로삽입 insertlastnode(head, data) new_node makenode(data); if (head = NULL) then head = new_node; else { temp = head; while (temp.rlink!= NULL) temp = temp.rlink; temp.rlink = new_node; new_node.llink = temp; } end insertlastnode() 33

이중연결리스트 (cont d) 이중연결리스트삽입알고리즘 (cont d) 리스트의마지막노드로삽입 번지 2000 번지 3000 번지 9000 head NULL 2000 3000 2000 NULL temp temp 3000 9000 번지 new_node 9000 NULL data NULL 3000 34

이중연결리스트 (cont d) 이중연결리스트삭제알고리즘 리스트에서조건을만족하는노드삭제알고리즘 deletenode(head, data) if (head = NULL) then error; else { temp head; while (temp!= NULL) { if (temp.data = data) then break; temp temp.link; } if (temp = head) then deletefirstnode(); else if (temp = NULL) then deletelastnode(); else deletemiddlenode(); } end deletenode() 35

이중연결리스트 (cont d) 이중연결리스트삭제알고리즘 (cont d) 리스트의첫번째노드를삭제 head 번지 2000 번지 3000 번지 NULL 2000 3000 2000 NULL NULL 메모리해제 temp 36

이중연결리스트 (cont d) 이중연결리스트삭제알고리즘 (cont d) 리스트의중간노드를삭제 번지 2000번지 3000번지 head NULL 2000 3000 2000 NULL 3000 메모리해제 temp temp 2000 37

이중연결리스트 (cont d) 이중연결리스트삭제알고리즘 (cont d) 리스트의마지막노드를삭제 번지 2000번지 3000번지 head NULL 2000 3000 2000 NULL NULL 메모리해제 temp temp 3000 38

이중연결리스트 (cont d) 이중연결리스트탐색알고리즘 리스트에서조건을만족하는데이터를가진노드탐색알고리즘 searchnode(head, data) temp head; while (temp!= NULL) do { } if (temp.data = data) then return temp; temp temp.rlink; if (temp = NULL) then return NULL; end searchnode() 39

참고문헌 [1] 이지영, C 로배우는쉬운자료구조, 한빛미디어, 2005. [2] 주우석, CᆞC++ 로배우는자료구조론, 한빛미디어, 2005. [3] 천인국, C C 언어로쉽게풀어쓴자료구조, 생능출판사, 2005. [4] 이재규, C 로배우는알고리즘 : 개념과기본알고리즘, 도서출판세화, 2007. [5] 문병로, 쉽게배우는알고리즘 : 관계중심의사고법, 한빛미디어, 2007. [6] 카사이아사오, 진명조역, C 언어로배우는알고리즘입문, 한빛미디어, 2006. [7] Kyle Loudon, 허욱역, Algorithms with C : C 로구현한알고리즘, 한빛미디어, 2006 [8] Wikipedia, http://www.wikipedia.org/. 이강의자료는저작권법에따라보호받는저작물이므로무단전제와무단복제를금지하며, 내용의전부또는일부를이용하려면반드시저작권자의서면동의를받아야합니다. Copyright Clickseo.com. All rights reserved. 40