데이타구조

2016-03-29

 

퀴즈2 풀이, 과제1 풀이

과제 제출 안내

  • Google Drive 공유 폴더를 통해 (종이 X, 메일 X)
  • [새로 만들기] 버튼을 눌러
    DS16<이름><학번> 폴더를 만들고 (예: DS16김연아123456)
    만들어진 폴더를 우클릭하여
    폴더 공유설정으로 kyagrd@gmail.com 에게 공유 (편집권한)
  • Google 메일 계정만 있으면 Google Drive 서비스 이용 가능 
  • Google 메일 계정은 무료로 만들 수 있으며
    참고로 안드로이드 스마트폰 사용자는 누구나 이미 보유

과제3 예고

  1. list* copy(list* l)
    // l과 같은 데이타를 같은 순서로 가진 새로운 리스트 생성
  2. list* append(list* l1, list* l2)
    // l1 다음에 l2를 이어붙인 새로운 리스트 생성
  3. tree의 데이타를 list에 복사하기
    • list* inorder(tree* t)
    • list* preorder(tree* t)
    • list* postorder(tree* t)

퀴즈2 정답 공개

  • 문제1. O(n) 길이 n인 리스트 끝에 길이 n인 리스트 연결
  • 문제2. O(n) 배열의 맨 앞에 삽입
  • 문제3. (a) 배열 int a[3][4][5]의 메모리 배치는
                     int b[4][5]같은 배열이 3번 반복되는 구조
               C/C++의 배열은 열 우선 순서(row-major order)
               교과서 2.6절, 2.2.2절 참고
  • 문제4.
    list* l = new list({3, NULL});
    l->next = l;
    // 원형 리스트(circular list) 책 4.4.4절 참고
3
l

퀴즈2-문제2번 관련

  • 배열의 어떤 위치를 가리키는 포인터가 있다고 하자
    • 이 배열의 맨 앞에 새로운 데이타를 삽입하면
      기존의 포인터가 가리키던 곳에 있는 데이타는
      더 이상 원래 가리키던 것이 아니다 (포인터 무효화)
  • 리스트의 어떤 위치를 가리키는 포인터가 있다고 하면
    • 리스트의 맨 앞에 새로운 원소를 삽입하더라도
      기존 포인터가 가리키던 데이타가 그대로 유지된다
      (포인터가 계속 유효함. 안정적 stable)

데이타구조

By 안기영 (Ahn, Ki Yung)