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

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

1장. 리스트

슬라이드 1

06장.리스트

슬라이드 1

슬라이드 1

슬라이드 1

슬라이드 1

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

슬라이드 1

4장

Microsoft PowerPoint - 06-List.ppt

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

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

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

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

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

11장 포인터

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

슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

Chapter 4. LISTS

chap 5: Trees

Chapter 4. LISTS

슬라이드 1

중간고사 (자료 구조)

Chapter 4. LISTS

03_queue

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

Microsoft PowerPoint - chap4_list

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

C 언어 강의노트

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

Algorithms

untitled

Microsoft PowerPoint - 자료구조2008Chap06

슬라이드 1

Microsoft PowerPoint - 08-chap06-Queue.ppt

<4D F736F F F696E74202D FBFACB0E120C0DAB7E1B1B8C1B6205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

Microsoft PowerPoint - 08-Queue.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

설계란 무엇인가?

PowerPoint 프레젠테이션

Chap 6: Graphs

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

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

untitled

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

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

Microsoft PowerPoint - chap-11.pptx

슬라이드 1

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Microsoft PowerPoint - 제3장-배열.pptx

Microsoft PowerPoint - 제11장 포인터

02장.배열과 클래스

01_List

슬라이드 1

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

Microsoft PowerPoint - 07-chap05-Stack.ppt

슬라이드 1

chap01_time_complexity.key

PowerPoint 프레젠테이션

슬라이드 1

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

슬라이드 1

PowerPoint Template

Microsoft PowerPoint - 제4장-스택과큐.pptx

PowerPoint 프레젠테이션

슬라이드 1

K&R2 Reference Manual 번역본

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

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

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

본 강의에 들어가기 전

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

중간고사

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

Frama-C/JESSIS 사용법 소개

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

11장 포인터

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

Microsoft PowerPoint - Chapter14_17.pptx

슬라이드 1

Microsoft PowerPoint - Lesson14.pptx

Microsoft PowerPoint - Lesson14.pptx

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

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

BMP 파일 처리

Microsoft PowerPoint - chap06-2pointer.ppt

04장.큐

ABC 10장

Transcription:

리스트에대한설명중틀린것은 구조체도리스트의요소가될수있다 리스트의요소간에는순서가있다 리스트는여러가지방법으로구현될수있다 리스트는집합과동일하다 다음은순차적표현과연결된표현을비교한것이다 설명이틀린것은 연결된표현은포인터를가지고있어상대적으로크기가작아진다 연결된표현은삽입이용이하다 순차적표현은연결된표현보다액세스시간이많이걸린다 연결된표현으로작성된리스트를 개로분리하기가쉽다 다음은연결리스트에서있을수있는여러가지경우를설명했는데잘못된항목은 정적인데이터보다는다양하고변화있는데이터에서효과적인방법이다 모든노드는데이터와링크 포인터 를가지고있어야한다 연결리스트에서사용한기억장소는다시사용할수없다 데이터들이메모리상에흩어져서존재할수있다 삽입과삭제작업이자주발생할때실행시간이가장많이소요되는자료구조는 배열로구현된리스트 단순연결리스트 원형연결리스트 이중연결리스트 다음중 포인터 가존재하지않는구조는어느것인가 단순연결리스트 원형연결리스트 이중연결리스트 헤더노드를가지는단순연결리스트

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를가리킨다고할때다음수식중 참인것은 last == NULL last->data == NULL last->link == NULL last->link->link == NULL 단순연결리스트의노드들을노드포인터 p 로탐색하고자한다 p 가현재가 리키는노드에서다음노드로가려면어떻게하여야하는가 p++; p--; p=p->link; p=p->data; 단순연결리스트의관련함수 f 가헤드포인터 head 를변경시켜야한다면 함수파라미터로무엇을받아야하는가 head &head *head head->link; 라는공백상태의리스트가있다고가정하자 이리스트에대하여다음과같 은연산들이적용된후의리스트의내용을그려라 add_first(a, "first"); add(a, 1, "second"); add_last(a,"third"); add(a,2,"fourth"); add(a,4,"fifth"); delete(a,2); delete(a,2); replace(a, 3, "sixth");

배열을이용하여구현한리스트의경우 리스트의연산중일부연산만구현 되어있다 본문의코드를참조하여리스트 의나머지연산들도구현하여 보라 #include <stdio.h> #include <stdlib.h> #define MAX_LIST_SIZE 100 배열의최대크기 #define TRUE 1 #define FALSE 0 typedef int element; typedef struct int list[max_list_size]; 배열정의 int length; 현재배열에저장된자료들의개수 ArrayListType; 오류처리함수 void error(char *message) fprintf(stderr,"%s\n",message); exit(1); 리스트초기화 void init(arraylisttype *L) L->length = 0; 리스트가비어있으면 1 을반환 그렇지않으면 0 을반환 int is_empty(arraylisttype *L) return L->length == 0;

리스트가가득차있으면 1 을반환 그렇지많으면 1 을반환 int is_full(arraylisttype *L) return L->length == MAX_LIST_SIZE; 리스트출력 void display(arraylisttype *L) int i; for(i=0;i<l->length;i++) printf("%d\n", L->list[i]); 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++; void add_first(arraylisttype *L, element item) add(l,0,item); void add_last(arraylisttype *L, element item) add(l,l->length,item); 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; void clear(arraylisttype *L) L->length=0; void replace(arraylisttype *L, int position, element item) L->list[position]=item; int is_in_list(arraylisttype *L, element item) int i; for(i=0; i<(l->length);i++) if(l->list[i]==item) return TRUE; return FALSE; element get_entry(arraylisttype *L, int position) if( position < 0 position >= L->length ) error(" 위치오류 "); return L->list[position]; main() ArrayListType list1; ListType 를정적으로생성하고 ListType 를가리키는 포인터를함수의파라미터로전달한다. init(&list1); add_first(&list1, 10); add_first(&list1, 20); add_last(&list1, 30); display(&list1); 단순연결리스트에서삭제함수 delete 함수는사실은헤드포인터와선행노

드포인터의 개의파라미터만있으면작성이가능하다 이들두파라미터만을 사용하여다시작성하라 phead : 헤드포인터에대한포인터 p: 삭제될노드의선행노드 void remove_node( ListNode **phead, ListNode *p ) ListNode *removed; if( p == NULL ) removed = (*phead); *phead = (*phead)->link; else removed=p->link; p->link = removed->link; free(removed); 단순연결리스트에정수가저장되어있다 단순연결리스트의모든데이터 값을더한합을출력하는프로그램을작성하시오 int sum( ListNode *head ) ListNode *p=head; int sum=0; while( p!= NULL ) sum += p->data; p = p->link; return sum; 단순연결리스트에서특정한데이터값을갖는노드의개수를계산하는함수 를작성하라 int count( ListNode *head, int x ) ListNode *p=head;

int count=0; while( p!= NULL ) if( p->data == x ) count++; p = p->link; return count; 단순연결리스트에서의탐색함수를참고하여특정한데이터값을갖는노드 를삭제하는함수를작성하라 void search_remove(listnode **phead, int x) ListNode *p, *prev=null; p = *phead; while( p!= NULL ) if( p->data == x ) remove_node(phead, prev, p); if( prev!= NULL ) p=prev->link; else p=*phead; else prev=p; p = p->link; 단순연결리스트의헤드포인터가주어져있을때첫번째노드에서부터하 나씩건너서있는노드를전부삭제하는함수를작성하라 즉홀수번째있는노 드들이전부삭제된다 홀수번째노드삭제 void remove_odd(listnode **phead) ListNode *p, *prev=null; int count=0; p = *phead; while( p!= NULL ) if( (count%2)!=0 ) remove_node(phead, prev, p);

if( prev!= NULL ) p=prev->link; else p=*phead; else prev=p; p = p->link; count++; 두개의단순연결리스트 가주어져있을경우 alternate 함수를작 성하라 alternate 함수는 와 로부터노드를번갈아가져와서새로운리스 트 를만드는연산이다 만약입력리스트중에서하나가끝나게되면나머지 노드들을전부 로옮긴다 함수를구현하여올바르게동작하는지테스트하라 작성된함수의시간복잡도를구하라 A a1 a2 a3 NULL A a4 NULL NULL B b1 b2 b3 NULL B b4 NULL NULL C a1 b1 a2 NULL C b2 NULL NULL void insert_node_last(listnode **phead, element item) ListNode *new_node = create_node(item, NULL); if( *phead == NULL ) *phead = new_node; else ListNode *p = *phead; while(p->link!= NULL) p = p->link; p->link = new_node; ListNode *alternate(listnode *list1, ListNode *list2)

ListNode *list3=null; ListNode *p1, *p2, *p3=null; if( list1 == NULL ) return list2; else if( list2 == NULL ) return list1; else p1 = list1; p2 = list2; while(( p1!= NULL ) ( p2!= NULL )) if( p1!= NULL ) insert_node_last(&list3, p1->data); p1=p1->link; if( p2!= NULL ) insert_node_last(&list3, p2->data); p2=p2->link; return list3;