1 / 27

Pointer & Linked List

Pointer & Linked List. 1. Pointer. 포인터란 ?. 포인터와 포인터 변수 메모리의 주소 값을 저장하기 위한 변수 " 포인터 " 를 흔히 " 포인터 변수 " 라 한다 . 주소 값과 포인터는 다른 것이다. int main(void) { char c='a'; int n=7; double d=3.14;. 포인터란 ?. 포인터와 포인터 변수 변수의 위치를 가리키는 하나의 변수. int main(void) { int n=7; int * pN = & n;

unity
Download Presentation

Pointer & Linked List

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pointer & Linked List

  2. 1. Pointer

  3. 포인터란? • 포인터와 포인터 변수 • 메모리의 주소 값을 저장하기 위한 변수 • "포인터"를 흔히 "포인터 변수"라 한다. • 주소 값과 포인터는 다른 것이다. int main(void) { char c='a'; int n=7; double d=3.14; . . . . .

  4. 포인터란? • 포인터와 포인터 변수 • 변수의 위치를 가리키는 하나의 변수 int main(void) { intn=7; int *pN = &n; . . . . .

  5. 포인터란? • 포인터의 타입과 선언 • 포인터 선언 시 사용되는 연산자 : * • A형 포인터(A*) : A형 변수의 주소 값을 저장 int main(void) { int *a;// a라는 이름의 int형 포인터 char *b;// b라는 이름의 char형 포인터 double *c;// c라는 이름의 double형 포인터 . . . . .

  6. 포인터란? • 주소 관련 연산자 • & 연산자 : 변수의 주소 값 반환 • * 연산자 : 포인터가 가리키는 메모리 참조 int main(void) { int a=2005; int *pA=&a; printf(“%d”, a); //직접 접근 printf(“%d”, *pA); // 간접 접근 . . . . .

  7. 포인터의 타입 • 포인터에 다양한 타입이 존재하는 이유 • 포인터 타입은 참조할 메모리의 크기 정보를 제공 #include <stdio.h> int main(void) { int a=10; int *pA = &a;  double e=3.14; double *pE=&e; printf(“%d %f”, *pA, *pE); return 0; }

  8. Q1. 포인터의 사용 • Question 1-1 • Question 1-2 int main(void) { int *pA; *pA=10; return 0; } int main(void) { int* pA=100; *pA=10; return 0; }

  9. Assignment #1 해설 • 배열의 이름 • 배열 이름은 첫 번째 요소의 주소 값을 나타낸다. int a[5]={0, 1, 2, 3, 4}

  10. Assignment #1 해설 • 배열 이름의 포인터 활용 • 배열 이름을 포인터처럼, 포인터를 배열 이름처럼 활용 하는 것이 가능하다. #include <stdio.h> int main(void) { intarr[3]={0, 1, 2}; int *ptr; ptr=arr; printf("%d, %d, %d \n", ptr[0], ptr[1], ptr[2]); return 0; }

  11. Assignment #1 해설 • Question 2. #include <stdio.h> int main(void) { int a[2][2] = { {1,2},{3,4}}; int**ptr=a; printf("%d\n", ptr[0][0]); return 0; }

  12. Assignment #1 해설 • 2차원 배열의 포인터 활용 #include <stdio.h> int main(void) { intarr[3][3]={{0, 1, 2},{2, 3, 4},{5, 6, 7} }; int(*ptr)[3]=arr; printf("%d, %d, %d \n", ptr[0][0], ptr[1][0], ptr[2][0]); return 0; } arr arr[0] arr[1] arr[2] ptr arr[1][0] arr[2][0] arr[0][0] 0 2 5 1 3 6 2 4 7

  13. Call by Value & Call by Reference • 값의 복사에 의한 전달 • 해당 변수를 직접 인자로 넘긴다. • 참조를 인자로 전달 • 해당 변수를 가리키는 주소를 인자로 넘긴다.

  14. Call by Value • 기본적인 인자의 전달 방식 • 값의 복사에 의한 전달

  15. Call by Value-SWAP int main(void) { int val1=10; int val2=20;  swap(val1, val2); printf("val1 : %d \n", val1); printf("val2 : %d \n", val2);  return 0; }  void swap(int a, int b) { int temp=a; a=b; b=temp; printf("a : %d \n", a); printf("b : %d \n", b); }

  16. Call by Reference(1) • Call-By-Reference • 참조(참조를 가능케 하는 주소 값)를 인자로 전달하는 형태의 함수 호출

  17. Call by Reference(2) • 배열의 함수 인자 전달 방식 • 배열 이름(배열 주소, 포인터)에 의한 전달 #include <stdio.h>  void fct(int *arr2); int main(void) { int arr1[2]={1, 2}; fct(arr1); printf("%d \n", arr1[0]);  return 0; }  void fct(int *arr2) { printf("%d \n", arr2[0]); arr2[0]=3; }

  18. Call by Reference-SWAP • Call-By-Reference에 의한 swap int main(void) { int val1=10; int val2=20;  printf("Before val1 : %d \n", val1); printf("Before val2 : %d \n", val2);  swap(&val1, &val2); //val1, val2 주소 전달 printf("After val1 : %d \n", val1); printf("After val2 : %d \n", val2);  return 0; }  void swap(int* a, int* b) { int temp=*a; *a=*b; *b=temp; }

  19. & Operator • scanf함수에서 &연산자를 사용하는 이유 int main(void) { intval; scanf("%d", &val); . . . . .

  20. 2. Linked List

  21. 연결 리스트 기본 • typedefstructnode{ int Data;              노드 내부의 실제 데이터 또는 레코드 node* Next;      Next가 가리키는 것은 node 타입 } node;                  구조체에 node라는 새로운 타입명 부여 typedef node* Nptr;    Nptr타입이 가리키는 것은 node 타입 Nptr p, q;               Nptr타입 변수 p, q를 선언

  22. 연결 리스트-노드만들기 • 노드 만들기, 이어 붙이기 p = (node *)malloc(sizeof(node));  p->Data = 33;                    p->Next = (node *)malloc(sizeof(node)); p->Next->Data = 22; p->Next->Next = NULL;

  23. 연결 리스트-노드삽입 • 간단한 삽입 p = (node *)malloc(sizeof(node));             p->Data = 8;                                p->Next = Temp->Next;                     Temp->Next = p;

  24. 연결 리스트-노드 삭제 • 간단한 삭제 p = Temp->Next; Temp->Next = Temp->Next->Next; delete p;

  25. 연결 리스트-노드디스플레이 • 디스플레이 Temp = Head; While (Temp != NULL)   {    cout<<“ Temp->Data=“<< Temp->Data<<endl ;       Temp = Temp->Next;   }

  26. Assignment #3 해설 • 단일 연결 리스트의 역순

  27. Assignment #3 해설

More Related