16
소프트웨어학과 원성현 교수 1 자료구조 강의노트 교재 : C배우는 쉬운 자료구조(개정판) 출판사 : 한빛미디어(20113발행) 저자 : 이지영

자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 1

자료구조 강의노트

교재 : C로 배우는 쉬운 자료구조(개정판) 출판사 : 한빛미디어(2011년 3월 발행) 저자 : 이지영

Page 2: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 49

5장 연결 자료구조

Page 3: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 50

1. 연결 자료구조

• 배열을 이용한 순차 리스트의 문제점 • 크기가 고정되어 데이터 수의 변동에 대처하지 못함 • 데이터 삽입과 삭제를 위해 다른 데이터의 이동이 필요하고 이에 따른 시간 지연 발생

• 메모리 할당 기법 • 정적 메모리 할당

• 변수와 배열처럼 프로그램이 실행되기 전 해당되는 크기만큼의 기억 공간을 미리 확보하는 방식 • 정적 메모리 할당은 메모리를 비효율적으로 사용할 수 있음

• 동적 메모리 할당 • 프로그램이 실행되는 도중 필요한 만큼의 메모리 공간을 확보하는 방식. • malloc(), sizeof(), free() 등의 함수를 사용

• 동적 메모리 할당 기법을 이용하여 데이터의 논리적 순서와 물리적 순서가 일치하지 않아도 되는 새로운 데이터 구조의 필요성 제기

순차 리스트의 문제점

Page 4: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 51

• 노드(node)란? • 저장해야 할 데이터와 다음 데이터의 주소 데이터를 동시에 저장할 수 있는 기억 공간의 단위

• 노드 구조 • 현재 저장해야 할 데이터를 저장하는 필드(data field)와 다음 데이터의 주소 데이터를 저장하는 필드(link field) 등 최소한 2개의 필드를 갖는 구조체가 필요함 • 구조체로 쓰는 이유는 데이터 필드는 저장해야 할 데이터의 종류에 따라 정수형, 실수형, 문자형 등이 될 수 있고, 링크 필드는 주소 데이터를 저장해야 하므로 반드시 포인터 변수여야 하므로 서로 다른 데이터 타입을 저장할 수 있는 구조체가 필수임

노드

data link

• 필드의 이름은 어떤 것으로 하든 상관없음 • 데이터가 2개 필요하면 데이터 필드는 2개 만듬

• 필드의 이름은 어떤 것으로 하든 상관없음 • 지시할 데이터가 2개면 링크 필드도 2개 만듬

typedef struct Node { char data[4]; struct Node *link; };

Page 5: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 52

• 연결 리스트(linked list) • 데이터의 논리적 순서와 물리적 순서가 굳이 일치되지 않아도 상관없도록 모든 데이터는 자신의 다음 데이터가 있는 주소 데이터를 가질 수 있도록 만든 데이터 구조

월 화 수 목 금 토 일

[0] 월

[1]

[2]

[3]

[4]

[5]

[6]

요일의 논리적 순서(순차 리스트)

월 화 수 목 금 토 일

요일의 논리적 순서(연결 리스트)

N

요일의 물리적 순서(순차 리스트) 요일의 물리적 순서(연결 리스트)

Page 6: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 53

2. 단순 연결 리스트

• 삽입 절차 • 데이터를 저장할 새로운 노드 생성 • 새로운 노드에 저장해야 할 데이터 저장 • 삽입되어야 할 위치 앞 노드의 링크 필드값을 새로운 노드의 링크 필드에 저장 • 삽입되어야 할 위치 앞 노드의 링크 필드가 새로운 노드를 가리키도록 설정

단순 연결 리스트에서의 삽입 연산

data link

월 200

100

data link

금 300

200

data link

일 null

300

data link

150

new

data link

월 150

100

data link

금 300

200

data link

일 null

300

data link

수 200

150

new

Page 7: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 54

• 삭제 절차 • 삭제할 노드의 데이터를 다른 곳으로 복사

• 혹시 발생할 수 있는 상황에 대비하기 위함 • 삭제할 노드의 앞 노드(선행 노드) 탐색 • 삭제할 노드의 링크 필드 값을 선행 노드의 링크 필드에 저장 • free()를 호출하여 삭제된 노드가 사용하던 기억공간을 운영체제에 반납

단순 연결 리스트에서의 삭제 연산

data link

월 150

100

data link

금 300

200

data link

일 null

300

data link

수 200

150

link

월 200

100

data link

금 300

200

data link

일 null

300

data

Page 8: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 55

단순 연결 리스트의 삽입 알고리즘

• 첫번째 노드로 삽입하기 • 교재 195쪽 알고리즘 5-3 참조

• 중간 노드로 삽입하기 • 교재 196쪽 알고리즘 5-4 참조

• 마지막 노드로 삽입하기 • 교재 198쪽~199쪽 알고리즘 5-5 참조

단순 연결 리스트의 삭제 알고리즘

• 교재 200쪽~201쪽 알고리즘 5-6 참조

Page 9: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 56

3. 원형 연결 리스트

• 원형 연결 리스트(circular linked list) • 단순 연결 리스트의 마지막 노드의 링크 필드가 첫 번째 노드를 가리키도록 한 연결 리스트

• 원형 연결 리스트가 필요한 이유 • 단순 연결 리스트는 시작 노드를 출발하여 링크를 따라 마지막 노드까지 이동하면 순회가 종료되지만 원형 연결 리스트는 계속 반복 수행할 수 있음

원형 연결 리스트

data link

월 150

100

data link

금 300

200

data link

일 100

300

data link

수 200

150

Page 10: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 57

원형 연결 리스트의 삽입 알고리즘

data link

월 150

100

data link

금 300

200

data link

일 100

300

data link

수 200

150

new new

CL

• 첫번째 노드로 삽입하기 • 교재 214쪽 알고리즘 5-8 참조

• 중간 노드로 삽입하기 • 교재 217쪽 알고리즘 5-9 참조

Page 11: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 58

원형 연결 리스트의 삭제 알고리즘

data link

월 200

100

data link

금 300

200

data link

일 100

300

data link

수 200

150 old pre CL

• 교재 219쪽 알고리즘 5-10 참조

Page 12: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 59

4. 이중 연결 리스트

• 이중 연결 리스트(doubly linked list) • 단순 연결 리스트나 원형 연결 리스트는 현재 노드의 바로 앞 선행 노드로 이동할 수 없음 • 이러한 문제점을 해결하기 위해 모든 노드는 선행 노드와 후행 노드 모두를 가리키는 2개의 링크 필드를 갖도록 하는 것을 이중 연결 리스트라고 함

이중 연결 리스트

data rlink

월 150

100

금 300

200

300

수 200

150

llink

100 200 150

data rlink llink data rlink llink data rlink llink

data rlink

• 필드의 이름은 어떤 것으로 하든 상관없음 • 선행 노드를 가리킴

• 필드의 이름은 어떤 것으로 하든 상관없음 • 후행 노드를 가리킴

typedef struct Dnode { struct Dnode *llink; char data[5]; struct Dnode *rlink; };

llink

Page 13: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 60

이중 연결 리스트의 삽입 알고리즘

data rlink

월 150 금 300 일 수 180

llink

100 200 180

data rlink llink data rlink llink data rlink llink

100 200 300 150

new

목 200 150

new

180

180

pre

DL

• 교재 226쪽 알고리즘 5-11 참조

Page 14: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 61

이중 연결 리스트의 삭제 알고리즘

data rlink

월 200 금 300 일 수 200

llink

100 200 100

data rlink llink data rlink llink data rlink llink

100 200 300 150

data rlink

월 150 금 300 일 수 200

llink

100 200 150

data rlink llink data rlink llink data rlink llink

100 200 300 150 old

old

DL

DL

• 교재 230쪽 알고리즘 5-12 참조

Page 15: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 62

5. 다항식의 연결 자료구조 표현

• 연결 리스트를 이용한 다항식의 표현 • 다항식의 계수, 지수 그리고 링크 필드 등 총 3개의 필드를 갖는 구조체 정의 • 각 노드에 하나의 항을 표현 • 각 노드에 표현된 항끼리 연산 • 연산 결과 항이 없어지는 경우는 노드도 삭제

연결 리스트를 이용한 다항식의 표현

지수 링크

expo link

typedef struct Node { float coef; int expo; struct Node *link; };

계수

coef

3x4+x3+2x+1

expo link

4 1 0 null 3 3

coef

1 1 2

expo link coef expo link coef expo link coef

Page 16: 자료구조 강의노트 - KOCWcontents.kocw.net/KOCW/document/2015/cup/weonsunghyun2/5.pdf · 연결 자료구조 표현 • 연결 리스트를 이용한 다항식의 표현 •

소프트웨어학과 원성현 교수 63

다항식 연결자료구조의 삽입

4x3+3x2+5x

expo link

3 1 0 null 2 4

coef

3 2 5

expo link coef expo link coef expo link coef

new 2x0

• 교재 233쪽 알고리즘 5-13 참조

다항식끼리의 덧셈 알고리즘

• 교재 238쪽 알고리즘 5-14 참조