Study1

529 views
503 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
529
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Study1

  1. 1. [자료구조]<br />쏭치<br />
  2. 2. 스터디 필수 사항<br />스터디에한번이라도 빠지면 영영스터디에서 빠져주세요.<br />과제가 좀 많을 꺼애요<br />과제 못하면 벌금이 있을꺼애요~<br />
  3. 3. 오늘의 Topic<br />포인터<br />구조체<br />Linked List<br />
  4. 4. 포인터<br />왜 쓸까??<br />모든 자료형의 포인터는 4byte<br />메모리에 있는 주소를 가리킨다<br />주소연산자 ‘&’<br />참조연산자 ‘*’<br />메모리 할당 malloc<br />메모리 할당 해제 free<br />
  5. 5. 출력 결과는??<br />charc[100];<br />double d[100];<br />char *ptr_c=c;<br />double *ptr_d=d;<br />printf(“%d %dn”, sizeof(c), sizeof(ptr_c));<br />printf(“%d %dn”, sizeof(d), sizeof(ptr_d));<br />
  6. 6. 구조체<br />같거나 다른 자료형을 모아서 새로운 자료형처럼 사용<br />멤버 변수에 접근 방법<br />일반변수로 선언했을 경우 "." (직접참조)<br />포인터로 선언했을 경우 "->" (간접참조)<br />
  7. 7. 구조체 사용의 예<br />typedefstruct{<br />int age;<br />char name[10];<br />}node;<br />node v, *ptr_v=(node*)malloc(sizeof(node));<br />v.age = 100;<br />ptr_v->age = 100;<br />
  8. 8. 이런 경우 어떻게 접근하나요?<br />typedefstruct{<br />int parameter;<br />}item;<br />typedefstruct{<br />char name[10];<br /> item t1, *t2;<br />}node;<br />node obj1, *obj2=(node*)malloc(sizeof(node));<br />obj1으로 t1의 parameter에 접근?<br />obj1으로 t2의 parameter에 접근?<br />obj2으로 t1의 parameter에 접근?<br />obj2으로 t2의 parameter에 접근?<br />
  9. 9. Linked List<br />자료를 중간에 삽입, 삭제 시 용이함<br />첫 Node를 가리키는 ”head”<br />마지막 Node를 가리키는 “tail”<br />단순 연결 리스트, 원형 연결 리스트, 이중 연결 리스트 등이 존재<br />Pointer에 대한 이해가 필수<br />스터디에서 할 건 단순 연결 리스트<br />
  10. 10. 단순 연결 리스트 그림<br />*<br />*<br />*<br />*<br />*<br />NULL<br />
  11. 11. 단순 연결 리스트 구현<br />typedefstruct_node{<br />int item;<br />struct node *next;<br />}node;<br />typedefstruct{<br />int item;<br />struct node *next;<br />}node;<br />
  12. 12. 단순 연결 리스트 구현<br />int main(){<br /> node *head = NULL;<br /> // … 삽입 루틴<br />if(head == NULL){<br /> head = (node_ptr)malloc(sizeof(node));<br /> head->next = NULL;<br /> head->item = 1;<br /> }<br />else insert(head, 2);<br /> return 0;<br />}<br />
  13. 13. 단순 연결 리스트 구현<br />void insert(node_ptr head, int item){<br />node_ptrnewItem = (node_ptr)malloc(sizeof(node));<br />newItem->item = item;<br />newItem->next = NULL;<br />while(head->next != NULL){<br /> head=head->next;<br /> }<br /> head->next = newItem;<br />}<br />
  14. 14. 단순 연결 리스트에서의 삭제<br />*<br />*<br />*<br />*<br />*<br />NULL<br />
  15. 15. 단순 연결 리스트에서의 삭제<br />void del(node_ptr head, int item){<br />while(head->next != NULL && head->next->item != item){<br /> head=head->next;<br /> }<br />if(head->next->item == item){node_ptr temp = head->next;<br /> head->next=head->next->next;<br />freetemp;}<br />}<br />

×