데이타구조
2016-03-22
배열과 리스트
공통점과 차이점
과제2 (Due: 3/28일 월요일 밤)
... (과제 1번은 2/21일 월요일 밤까지였습니다)
이번 수업에서 다룬 NULL로 끝나는 연결 리스트에 대해
리스트의 맨 끝에 원소를 하나 추가하는 프로그램 작성
순서를 거꾸로 뒤집은 리스트를 만드는 프로그램 작성
지난 과제1번과 마찬가지 방식으로 진행
이번 과제는 main함수 이외에 다른 함수 작성 안해도 됩니다.
Google Drive 자신의 공유폴더에
hw2.cpp
파일명으로 제출
반드시 컴파일되는지 확인. 컴파일 에러나면 0점.
홈페이지에 과제를 시작할 수 있도록 hw2.cpp 파일을 제공하니 그 파일을 수정하는 방식으로 과제를 하고 제출하면 됩니다
과제 제출 안내
Google Drive 공유 폴더를 통해 (종이 X, 메일 X)
[새로 만들기]
버튼을 눌러
DS16<이름><학번> 폴더를 만들고 (예: DS16김연아123456)
만들어진 폴더를 우클릭
하여
폴더 공유설정으로 kyagrd@gmail.com 에게 공유 (편집권한)
Google 메일 계정만 있으면 Google Drive 서비스 이용 가능
Google 메일 계정은 무료로 만들 수 있으며
참고로 안드로이드 스마트폰 사용자는 누구나 이미 보유
배열과 리스트 공통점
여러 개의 데이타를 한줄로 나열한 구조
어떤 데이타를 가리키는 포인터가 있을 때
그 바로 다음 데이타를 가리키는 포인터를 쉽게
O(1) 시간복잡도 안에 알 수 있다
배열은 p+1 리스트는 p->next
방금 위에 같은 내용을 있어보이게 말하면
앞에서부터 순차 접근(Forward Sequential Access) 지원
지난 금요일 수업 시간에 이런 공통점을
공통된 인터페이스로 만들어보려는
예제 코드를 잠깐 살펴보았다
배열
임의 접근(Random Access)
아무 위치에나 O(1) 접근
연속적 메모리 공간 사용
크기(길이)가 정해져 있음
맨 앞에 원소 추가 O(n)
맨 뒤에 원소 추가 O(1)
인덱스 위치 k에 삽입
O(n-k)
리스트
앞에서부터 순차 접근(Forward Sequential Access)
크기 미리 지정할 필요 없고 않고 필요에 따라 확장
맨 앞에 원소 추가 O(1)
맨 뒤에 원소 추가 O(n)
포인터가 가리키는 위치에 새로운 데이타 삽입 O(k)
포인터가 가리키는 바로
다음 위치에 새로운 데이타 삽입 O(1)
차이점
(무작정 외우지 말고 기본 가정 이해
수업시간에 그림과 코드로 설명)
추상 데이타 타입
Sequence를 만들어보자
int size(void) // 길이
PTR begin(void) // 시작을 가리키는 포인터
PTR end(void) // 맨 끝 하나 다음을 가리키는 포인터
PTR next(PTR) // 바로 다음 포인터
PTR push_front(DATA) // 맨 앞에 삽입
PTR push_back(DATA) // 맨 뒤에 삽입
PTR insert_next(PTR, DATA) // 바로 다음 위치에 삽입
PTR insert(PTR, DATA) // 현재 포인터 위치에 삽입
Made with Slides.com