연결리스트 (Linked List) 충북대학교 컴퓨터공학과 서 영 훈.

Slides:



Advertisements
Similar presentations
언어의 자서전 소단원 (1) 단원. 언어의 특성 기호성 자의성 사회성 규칙성 창조성 역사성.
Advertisements

중세시대의 의복 학번 & 이름.
임상시험 규정 (최근 변경 사항 중심으로) -QCRC 보수 교육 과정 전달 교육
ESOCOM – IPIX 고정IP서비스 제안서 Proposer ㈜이소컴.
초화류 종자 시장 규모 100억원 이상(추정, 생산액의 10%정도 차지)
(14권) 분류 번호 서 명 주 제 수 신 인 장소 / 저자 저술연대 친 서 1 테살로니카 전 진보에 대한 찬사 종말에 대한 기대 테살로니카의 그리스도인 코린토 50-52년 2 테살로니카 후 예수님의 재림은 아직 멀었다 52년경(?) 3 갈라티아 ○ 그리스도인이.
제 8 장 시각적 사고와 스케치 학습목표: 학습내용: 시각적 사고를 하는 능력 삼차원 물체를 스케치하는 능력 시각화의 중요성
제 11 장 구조체.
[ 단원 12 ] 파일처리 부산대학교 남 태 우.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
8. 파일 인덱스: 탐색트리 (Search Tree)
Internet Computing KUT Youn-Hee Han
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
01 화일의 기본 개념 02 화일 저장장치 03 화일 입출력 제어 04 순차화일 05 화일의 정렬 06 화일의 합병
제 8 장  파서 생성기 YACC 사용하기.
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2011
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
제 2 장 배열과 스트링.
Part 12 구조체와 공용체 ©우균, 창병모 ©우균, 창병모.
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
Internet Computing KUT Youn-Hee Han
Internet Computing KUT Youn-Hee Han
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
Chapter 03 배열, 구조체, 포인터.
처음으로 배우는 C 프로그래밍 제2부 기초 제5장 반복문.
제 4 장 L i s t.
head data link data link data link NULL a b c
자료 구조: Chapter 3 (2)구조체, 포인터
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
Chapter 9 – 구조형과 리스트 처리 Outline 9.1 자신 참조 구조형 9.2 선형 연결 리스트 9.3 리스트 연산
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
[INA240] Data Structures and Practice
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
효율적인 포인터 오류 검증 이욱세 한양대학교 컴퓨터공학과
운영체제 (Operating Systems)
Chapter 11 Strings.
14주차.
4장 제어문 선택문: if 문, if – else 문, switch 문
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
제어문 & 반복문 C스터디 2주차.
4장 - PHP의 표현식과 흐름 제어-.
Byte Alignment ㈜ 웰컴정보시스템 김 정 은.
C 프로그래밍 기초.
2 배열과 구조.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
Lecture 7 복잡한 구조 프로그래밍 프로그램 짤 때의 마음가짐 invariant list set
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
CHAP 12 : 탐색.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
adopted from KNK C Programming : A Modern Approach
토론을 위한 질문 배열의 이름에는 무엇이 저장되는가? C언어에서 배열 추상데이터의 store는 어떻게 구현 되는가?
알고리즘(Algorithm) 유비쿼터스 컴퓨팅학과 교수 송 창근
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
▶ 평생교육 기획과 운영 평생교육 프로그램 설계 및 실행 평생교육 프로그램 설계 및 실행 평생교육사 교육과정.
성전기공식(안) 식 순 1. 기공미사 2. 기 공 식 3. 축 하 연 천주교 수원교구 퇴촌성당.
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
(Ⅰ) 독서와 언어의 본질 언어의 본질 1 2 [고등 국어] – 독서와 문법 독서의 본질 (1) 독서의 특성
Traveling Salesman Problem – 개요 (1/2)
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
List, ArrayList, Vector, LinkedList 가 있습니다
3b장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
배열.
Presentation transcript:

연결리스트 (Linked List) 충북대학교 컴퓨터공학과 서 영 훈

배열 vs. 연결리스트 (1) 배열 배열 선언 및 메모리 할당 Homogeneous fixed-size elements에 적합 Element access: efficient (direct access) Location of L[i] =  + (I – LB) * E where  is the beginning address of array L, LB is lower bound of subscript, and E is the size of an element Insertion and deletion of element: expensive 실행 효율은 좋지만, 메모리가 낭비될 가능성이 있음 배열 선언 및 메모리 할당 int grade[5]; grade[0] grade[1] grade[2] grade[3] grade[4] 응용컴퓨터프로그래밍

배열 및 연결리스트 (2) 연결리스트 (Linked List) 연결리스트의 예 Variable size elements에 적합 필요한 만큼만 메모리 사용 (메모리가 낭비될 가능성이 없음) 하지만 포인터 저장 공간이 추가로 필요함 Element access: inefficient (sequential access) Insertion and deletion of element: easy Flexible: Tree나 Graph 같은 자료구조를 개념 형태로 표현 가능함 연결리스트의 예 연결리스트에 “Mary” 노드를 삽입하는 예제 Bob first John Tom pre cur Mary newrec 응용컴퓨터프로그래밍

연결리스트를 이용한 삽입 정렬 (1) 이름을 오름차순(ascending order)으로 정렬 자료구조 선언 John, Bob, Tom, Mary 순서로 자료가 입력된다고 가정 자료구조 선언 struct NameRec { char name[20]; struct NameRec * next; }; struct NameRec *first; // 연결리스트의 맨 처음을 가리키는 포인터 struct NameRec *newrec; // 새로 만들어지는 노드를 가리키는 포인터 struct NameRec *pre, *cur; // 삽입, 삭제 연산을 위한 포인터 응용컴퓨터프로그래밍

연결리스트를 이용한 삽입 정렬 (2) 초기화 새로운 노드를 만드는 연산 first = NULL; // 처음에는 first가 가리키는 노드가 없음 새로운 노드를 만드는 연산 새로운 노드를 만드는 연산 (malloc) newrec = malloc(sizeof(struct NameRec)); 이름값 지정(이름이 “John”일 경우) strcpy(newrec->name, “John”); 스트링이기 때문에 strcpy를 이용해야 함 포인터 필드 값 지정 newrec->next = NULL; // 삽입연산을 진행할 때는 optional John newrec 응용컴퓨터프로그래밍

연결리스트를 이용한 삽입 정렬 (3) 리스트에 John 삽입 리스트에 Bob 노드 삽입 if (first == NULL) first = newrec; 리스트에 Bob 노드 삽입 이름이 Bob인 노드 생성 (malloc, strcpy 함수 이용) newrec = malloc(sizeof(struct NameRec)); strcpy(newrec->name, “Bob”); 새로운 노드가 들어갈 위치 결정 cur = first; while (strcmp(newrec->name, cur->name) > 0) { pre = cur; cur = cur->next; } John first Bob newrec John first cur 응용컴퓨터프로그래밍

연결리스트를 이용한 삽입 정렬 (4) 리스트에 Bob 노드 삽입 (계속) 리스트에 Tom 노드 삽입 결정된 위치에 노드 삽입 if (cur == first) { newrec->next = first; first = newrec; } 리스트에 Tom 노드 삽입 이름이 Tom인 노드 생성 newrec = malloc(sizeof(struct NameRec)); strcpy(newrec->name, “Tom”); Bob first John Tom newrec 응용컴퓨터프로그래밍

연결리스트를 이용한 삽입 정렬 (5) 리스트에 Tom 노드 삽입 (계속) 새로운 노드가 들어갈 위치 결정 cur = first; while (strcmp(newrec->name, cur->name) > 0) { pre = cur; cur = cur->next; if (cur == NULL) break; } Bob first John Tom newrec cur Bob first John pre cur Bob first John pre cur = NULL 응용컴퓨터프로그래밍

연결리스트를 이용한 삽입 정렬 (6) 리스트에 Tom 노드 삽입 (계속) 리스트에 Mary 노드 삽입 결정된 위치에 노드 삽입 pre->next = newrec; newrec->next = cur; 리스트에 Mary 노드 삽입 이름이 Mary인 노드 생성 newrec = malloc(sizeof(struct NameRec)); strcpy(newrec->name, “Mary”); Bob first John Tom Mary newrec 응용컴퓨터프로그래밍

연결리스트를 이용한 삽입 정렬 (7) 리스트에 Mary 노드 삽입 (계속) 새로운 노드가 들어 갈 위치 결정 cur = first; while (strcmp(newrec->name, cur->name) > 0) { pre = cur; cur = cur->next; if (cur == NULL) break; } Bob first John Tom cur Mary newrec Bob first John Tom pre cur Bob first John Tom pre cur 응용컴퓨터프로그래밍

연결리스트를 이용한 삽입 정렬 (8) 리스트에 Mary 노드 삽입 (계속) 결정된 위치에 노드 삽입 pre->next = newrec; newrec->next = cur; Mary newrec Bob first John Tom pre cur 응용컴퓨터프로그래밍

연결리스트를 이용한 삽입 정렬 (9) 전체 알고리즘 first = NULL; while (scanf(“%s”, newName) != EOF) { newrec = malloc(sizeof(struct NameRec)); strcpy(newrec->name, newName); cur = first; while (cur != NULL) { if (strcmp(newrec->name, cur->name) > 0) { pre = cur; cur = cur->next; } else break; if (cur = first) { newrec->next = first; first = newrec; } else { pre->next = newrec; newrec->next = cur; } 응용컴퓨터프로그래밍

Bob first John pre cur 응용컴퓨터프로그래밍