천주희 군산대학교 통계컴퓨터과학과 정보과학기술 연구실

Slides:



Advertisements
Similar presentations
TWO STEP EQUATIONS 1. SOLVE FOR X 2. DO THE ADDITION STEP FIRST
Advertisements

You have been given a mission and a code. Use the code to complete the mission and you will save the world from obliteration…
Advanced Piloting Cruise Plot.
Feichter_DPG-SYKL03_Bild-01. Feichter_DPG-SYKL03_Bild-02.
Copyright © 2003 Pearson Education, Inc. Slide 1.
Copyright © 2003 Pearson Education, Inc. Slide 1 Computer Systems Organization & Architecture Chapters 8-12 John D. Carpinelli.
Chapter 1 The Study of Body Function Image PowerPoint
1 Copyright © 2013 Elsevier Inc. All rights reserved. Appendix 01.
Chapter 1 Image Slides Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
Chapter 3: Linked List Tutor: Angie Hui
Jeopardy Q 1 Q 6 Q 11 Q 16 Q 21 Q 2 Q 7 Q 12 Q 17 Q 22 Q 3 Q 8 Q 13
Jeopardy Q 1 Q 6 Q 11 Q 16 Q 21 Q 2 Q 7 Q 12 Q 17 Q 22 Q 3 Q 8 Q 13
Title Subtitle.
My Alphabet Book abcdefghijklm nopqrstuvwxyz.
DIVIDING INTEGERS 1. IF THE SIGNS ARE THE SAME THE ANSWER IS POSITIVE 2. IF THE SIGNS ARE DIFFERENT THE ANSWER IS NEGATIVE.
FACTORING ax2 + bx + c Think “unfoil” Work down, Show all steps.
Addition Facts
Year 6 mental test 5 second questions
ZMQS ZMQS
Break Time Remaining 10:00.
Chapter 17 Linked Lists.
Chapter 4 Linked Lists. © 2005 Pearson Addison-Wesley. All rights reserved4-2 Preliminaries Options for implementing an ADT List –Array has a fixed size.
Linked Lists.
Data Structures: A Pseudocode Approach with C
Data Structures ADT List
1 CSE1301 Computer Programming: Lecture 27 List Manipulation.
Data Structures Using C++
1 CompSci 105 SS 2005 Principles of Computer Science Lecture 11: Linked Lists Lecturer: Santokh Singh Assignment 2 due tomorrow, i.e. Friday 21 Jan 2005.
LIST PROCESSING.
FIFO Queues CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1.
ABC Technology Project
1 DATA STRUCTURES. 2 LINKED LIST 3 PROS Dynamic in nature, so grow and shrink in size during execution Efficient memory utilization Insertion can be.
CSCI2100B Linked List Jeffrey
1 Undirected Breadth First Search F A BCG DE H 2 F A BCG DE H Queue: A get Undiscovered Fringe Finished Active 0 distance from A visit(A)
VOORBLAD.
15. Oktober Oktober Oktober 2012.
1 Breadth First Search s s Undiscovered Discovered Finished Queue: s Top of queue 2 1 Shortest path from s.
1 public class Newton { public static double sqrt(double c) { double epsilon = 1E-15; if (c < 0) return Double.NaN; double t = c; while (Math.abs(t - c/t)
Factor P 16 8(8-5ab) 4(d² + 4) 3rs(2r – s) 15cd(1 + 2cd) 8(4a² + 3b²)
Squares and Square Root WALK. Solve each problem REVIEW:
Basel-ICU-Journal Challenge18/20/ Basel-ICU-Journal Challenge8/20/2014.
We are learning how to read the 24 hour clock
1..
© 2012 National Heart Foundation of Australia. Slide 2.
Lets play bingo!!. Calculate: MEAN Calculate: MEDIAN
Understanding Generalist Practice, 5e, Kirst-Ashman/Hull
Chapter 5 Test Review Sections 5-1 through 5-4.
GG Consulting, LLC I-SUITE. Source: TEA SHARS Frequently asked questions 2.
Addition 1’s to 20.
25 seconds left…...
Januar MDMDFSSMDMDFSSS
Week 1.
Analyzing Genes and Genomes
We will resume in: 25 Minutes.
©Brooks/Cole, 2001 Chapter 12 Derived Types-- Enumerated, Structure and Union.
Clock will move after 1 minute
Intracellular Compartments and Transport
PSSA Preparation.
Essential Cell Biology
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 13 Pointers and Linked Lists.
Select a time to count down from the clock above
Murach’s OS/390 and z/OS JCLChapter 16, Slide 1 © 2002, Mike Murach & Associates, Inc.
양승혁 군산대학교 통계컴퓨터과학과 정보과학기술 연구실
XML 8.1~8.6 절 DOM 으로 문서 주무르기 서국화 군산대학교 통계컴퓨터과학과 정보과학기술 연구실
Chapter 10. 구조체와 리스트 처리 10.1 자기참조 구조체
Data Structure1 4. Application A list of award-winning pictures and their directors Three major functions  Print instruction  Build the list  Process.
Chapter 5. General Linear List Internet Computing KUT Youn-Hee Han.
Presentation transcript:

천주희 wngml1205@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.04.06 자료구조 Chap 4. 리스트 천주희 wngml1205@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.04.06

목차 리스트 추상 데이터 타입 배열로 구현된 리스트 연결 리스트 연결리스트 소개 단순 연결 리스트 원형 연결 리스트 이중 연결 리스트 IST (Information Sciences & Technology) Laboratory

리스트 추상 데이터 타입 (1/3) 리스트 자료를 정리하는 방법으로 항목들은 순서나 위치를 가짐 L = (item0, item1, item2, … ,item (n-1) → 한 주의 요일 : (일요일,월요일,…,금요일,토요일) → 한글 자음의 모임: (ㄱ,ㄴ,ㄷ,…,ㅎ) IST (Information Sciences & Technology) Laboratory

리스트 추상 데이터 타입 (2/3) 리스트 ADT 객체: n개의 element 형으로 구성된 순서 있는 컬렉션 연산: add_last(list,item) →맨 끝에 요소 추가 add_first(list,item) →맨 앞에 요소 추가 add(list,pos,item) →pos 위치에 요소 추가 delete(list,pos) →pos의 위치 요소를 item로 제거 replace(list,pos,item) →pos의 위치 요소를 item로 대체 is_in_list(list,item) →item이 리스트 안에 있는지 여부 get_entry(list,pos) →pos 위치 요소 반환 get_length(list) →리스트 길이 구함 is_empty(list) →리스트가 비었는지 검사 is_full(list) →리스트가 꽉 찼는지 검사 display(list) →리스트의 모든 요소 표시 IST (Information Sciences & Technology) Laboratory

리스트 추상 데이터 타입 (3/3) 리스트 ADT a b d e c Add_last(list1,a) Add_last(list1,b) b add(list1,1,d) d c delete(list1,2) add(list1,2,c) replace(list1,1,e) e IST (Information Sciences & Technology) Laboratory

배열로 구현된 리스트 (1/4) 배열 구현 간단 배열의 크기 고정(저장 공간 낭비 및 부족) 삽입 .삭제 시 오버헤드 발생 A B C D E 1 2 3 4 5 6 7 8 9 A B D E 1 2 3 4 5 6 7 8 9 C A B C D E 1 2 3 4 5 6 7 8 9 N IST (Information Sciences & Technology) Laboratory

배열로 구현된 리스트 (2/3) 배열 삽입 함수 A B C D E 1 2 3 4 5 N Position length-1 1 2 3 4 5 N Position length-1 // position: 삽입하고자 하는 위치 // item: 삽입하고자 하는 자료 void add(ArrayListType *L, int position, element item) { if( !is_full(L) && (position >= 0) && (position <= L->length) ){ int i; for(i=(L->length-1); i>=position;i--) L->list[i+1] = L->list[i]; L->list[position] = item; L->length++; } typedef int element; typedef struct { element list[MAZ_LOST_SIZE]; int length; } ArrayListType; IST (Information Sciences & Technology) Laboratory

배열로 구현된 리스트 (3/3) 배열 삭제 함수 A B C D E 1 2 3 4 5 position length-1 // position: 삭제하고자 하는 위치 // 반환값: 삭제되는 자료 element delete(ArrayListType *L, int position) { int i; element item; if( position < 0 || position >= L->length ) error("위치 오류"); item = L->list[position]; for(i=position; i<(L->length-1);i++) L->list[i] = L->list[i+1]; L->length--; return item; } IST (Information Sciences & Technology) Laboratory

연결 리스트 (1/3) 연결 리스트 물리적으로 흩어져 있는 자료들을 서로 연결하여 하나로 묶는 방법 구현 복잡 물리적으로 흩어져 있는 자료들을 서로 연결하여 하나로 묶는 방법 구현 복잡 삽입, 삭제 효율적 크기 제한 x A B C D E A B C D E A B C D E N IST (Information Sciences & Technology) Laboratory

연결 리스트 (2/3) 연결 리스트 구조 노드 = 데이터 필드 + 링크 필드 헤드 포인터 : 연결 리스트 첫 번째 노드를 가리키는 변수 노드의 동적 생성 data link NULL 헤드 포인터 NULL 헤드 포인터 동적 생성 운영체제 요구 IST (Information Sciences & Technology) Laboratory

연결 리스트 (3/3) 연결 리스트 종류 단순 연결 리스트 NULL 원형 연결 리스트 이중 연결 리스트 헤드 포인터 IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (1/10) 단순 연결 리스트 삽입 알고리즘 insert_node(L, before, new) 헤드포인터 10 20 NULL 30 50 40 10 30 20 before after new 10 30 20 before after new insert_node(L, before, new) if L = NULL then L←new else new.link←before.link before.link←new IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (2/10) 단순 연결 리스트 구현 p1 노드 동적 생성 : 동적 메모리 할당 typedef int element; typedef struct ListNode { element data; struct ListNode *link; } ListNode; data link ListNode *p1; p1 = (ListNode *)malloc(sizeof(ListNode)); p1 data link IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (3/10) 단순 연결 리스트 p1 p1 p1 단순 연결 리스트가 만들어지는 과정 free(p1) data link ListNode *p1; p1 = (ListNode *)malloc(sizeof(ListNode)); p1->data = 10; p1->link = NULL; p1 10 NULL ListNode *p2; p2 = (ListNode *)malloc(sizeof(ListNode)); p2->data = 20; p2->link = NULL; p1->link = p2; p1 10 20 NULL free(p1) free(p2) 주의 사항! 동적 메모리 사용이 끝날 경우 반드시 메모리 헤체 해줄 것 ! IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (4/10) 단순 연결 리스트 삽입 연산 Head가 NULL인 경우 P가 NULL인 경우 새로운 노드를 리스트 맨 앞에 삽입 Head와 p가 NULL이 아닌 경우 new_node의 link에 p->link값을 복사한 뒤, p->link가 new_node를 가리키도록 함 Phead : 헤드 포인터 head에 대한 포인터 p : 삽입될 위치의 선행노드를 가리키는 포인터 new_node : 새로운 노드를 가리키는 포인터 new_node NULL p (1) (2) head head new_node NULL head new_node NULL IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (5/10) 단순 연걸 리스트 삽입 연산 *phead : phead가 가리키는 위치의 내용 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; else { // p 다음에 삽입 new_node->link = p->link; p->link = new_node; *phead : phead가 가리키는 위치의 내용 **phead : *p가 가리키는 위치의 내용 IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (6/10) 단순 연걸 리스트 삭제 연산 P가 NULL인 경우 P가 NULL이 아닌 경우 연결 리스트의 첫 번째 노드 삭제 헤드 포인터를 변경하고 remove 노드가 차지하고 있는 공간을 시스템에 반환 P가 NULL이 아닌 경우 p의 링크가 remove 다음 노드를 가리키도록 변경 list NULL p removed list NULL removed IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (7/10) 단순 연결 리스트 삭제 연산 Phead : 헤드 포인터에 대한 포인터 p : 삭제될 노드의 선행 노드 removed : 삭제될 노드 void remove_node(ListNode **phead, ListNode *p, ListNode *removed) { if( p == NULL ) *phead = (*phead)->link; else p->link = removed->link; free(removed); } IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (7/10) 단순 연결 리스트 방문 연산 리스트 상의 노드를 순차적으로 방문 반복과 순환기법을 모두 사용가능 void display(ListNode *head) { ListNode *p=head; while( p != NULL ){ printf("%d->", p->data); p = p->link; } printf("\n"); <반복> void display_recur(ListNode *head) { ListNode *p=head; if( p != NULL ){ printf("%d->", p->data); display_recur(p->link); } <순환> IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (8/10) 단순 연결 리스트 탐색 연산 특정한 데이터 값을 갖는 노드를 찾는 연산 head NULL p ListNode *search(ListNode *head, int x) { ListNode *p; p = head; while( p != NULL ){ if( p->data == x ) return p; // 탐색 성공 p = p->link; } return p; // 탐색 실패일 경우 NULL 반환 IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (9/10) 단순 연결 리스트 합병 연산 두개의 리스트 L1과 L2를 하나로 만드는 연산 head1 이나 head2 가 NULL인 경우를 반드시 처리해주어야함 ListNode *concat(ListNode *head1, ListNode *head2) { ListNode *p; if( head1 == NULL ) return head2; else if( head2 == NULL ) return head1; else { p = head1; while( p->link != NULL ) p = p->link; p->link = head2; return head1; } head1 NULL head2 IST (Information Sciences & Technology) Laboratory

단순 연결 리스트 (10/10) 단순 연결 리스트 역순 연산 리스트를 역순으로 만드는 연산 ListNode *reverse(ListNode *head) { // 순회 포인터로 p, q, r을 사용 ListNode *p, *q, *r; p = head; // p는 역순으로 만들 리스트 q = NULL; // q는 역순으로 만들 노드 while (p != NULL){ r = q; // r은 역순으로 된 리스트. r은 q, q는 p를 차례로 따라감 q = p; p = p->link; q->link =r; // q의 링크 방향을 바꿈 } return q; // q는 역순으로 된 리스트의 헤드 포인터 head NULL r q p IST (Information Sciences & Technology) Laboratory

원형 연결 리스트 (1/2) 원형 연결 리스트 마지막 노드의 링크가 첫 번째 노드를 가리키는 리스트 노드의 삽입과 삭제가 단순 연결 리스트보다 용이 삽입 함수 void insert_first(ListNode **phead, ListNode *node) { if( *phead == NULL ){ *phead = node; node->link = node; } else { node->link = (*phead)->link; (*phead)->link = node; head NULL … Phead : 리스트의 헤드 포인터의 포인터 p : 선행 노드 node : 삽입될 노드 head A B NULL C D … E node (1) (2) IST (Information Sciences & Technology) Laboratory

원형 연결 리스트 (2/2) 원형 연결 리스트 삽입 함수 void insert_last(ListNode **phead, ListNode *node) { if( *phead == NULL ){ *phead = node; node->link = node; } else { node->link = (*phead)->link; (*phead)->link = node; head A B NULL C D … E node (2) (1) (3) IST (Information Sciences & Technology) Laboratory

헤드노드+이중 연결 리스트+원형 연결 리스트 이중 연결 리스트 (1/3) 이중 연결 리스트 하나의 노드가 선행 노드와 후속 노드에 대한 두 개의 링크를 가지는 리스트 공간을 많이 차지하고 고드가 복잡해짐 헤드노드 실제 이중 연결 리스트 헤드노드+이중 연결 리스트+원형 연결 리스트 IST (Information Sciences & Technology) Laboratory

이중 연결 리스트 (2/3) 헤드 노드 이중 연결 리스트 노드 구조 데이터를 가지지 않고 단지 삽입, 삭제 코드를 간단하게 할 목적으로 만들어진 노드 헤드 포인터와의 구별 공백상태에서 헤드 노드만 존재 이중 연결 리스트 노드 구조 헤드노드 typedef int element; typedef struct DlistNode { element data; struct DlistNode *llink; struct DlistNode *rlink; } DlistNode; llink data rlink IST (Information Sciences & Technology) Laboratory

이중 연결 리스트 (3/3) 이중 연결 리스트 삽입 연산 삭제 연산 (1) (2) (3) (4) before new_node // 노드 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; } (1) (2) (3) (4) before new_node // 노드 removed를 삭제한다. void dremove_node(DlistNode *phead_node, DlistNode *removed) { if( removed == phead_node ) return; removed->llink->rlink = removed->rlink; removed->rlink->llink = removed->llink; free(removed); } IST (Information Sciences & Technology) Laboratory

Yang_ka@kunsan.ac.kr 군산대학교 정보통계학과 정보과학기술 연구실 2012.01.03 감사합니다 Yang_ka@kunsan.ac.kr 군산대학교 정보통계학과 정보과학기술 연구실 2012.01.03 천주희 wngml1205@kunsan.ac.kr 군산대학교 정보통계학과 정보과학기술 연구실