데이타구조

2016-03-22

 

배열과 리스트

공통점과 차이점

과제2 (Due: 3/28일 월요일 밤)

  1. ... (과제 1번은 2/21일 월요일 밤까지였습니다)

  2. 이번 수업에서 다룬 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) // 현재 포인터 위치에 삽입

데이타구조

By 안기영 (Ahn, Ki Yung)