''다시 부활'' [[TableOfContents]] = 참여자 명단 = || 함장 || 장용운 || 11학번 || 지각 || ||<|7> 선원 || 천준현 ||<|7> 15학번 || 결석 || || 최지혁 || 출석 || || 박인서 || 출석 || || 이정재 || 고향 || || 이원준 || 출석 || || 조종현 || 출석 || || 남헌 || 숙면 || = 수업 = == 진행 == 1. 장소 : 6층 PC실 2. 시간 : ~~함장님 지각으로 인하여~~ 14시 30분 ~ 17시 == 내용 == ~~기억 속에서 사라진~~ '''기존 내용 복습''' * 구조체 * 동적 메모리 할당 * 연결 리스트 '''수심 1000m. 스택''' * 스택 만들기 * 문제해결 = 코드 = == 예제1 == {{{ #include #include typedef struct _node{ int value; struct _node * next; } node; void freeAll(node*); int main(void) { node* head; head = (node*)malloc(sizeof(node)); node* temp = head; for (int i = 0; i < 50; i++) { temp->next = (node*)malloc(sizeof node); temp->value = i; temp = temp->next; } temp->next = NULL; temp->value = 50; freeAll(head); return 0; } void freeAll(node* hd) { node* t; while (hd != NULL) { t = hd->next; printf("%d ", hd->value); free(hd); hd = t; } } }}} == 예제2 == {{{ #include #include #include typedef struct _node{ int value; struct _node* next; } node; void push(node**, int); int pop(node**); int main(void) { node* head = NULL; push(&head, 3); return 0; } void push(node** target, int val) { node* newnode = (node*)malloc(sizeof node); newnode->value = val; newnode->next = *target; *target = newnode; } int pop(node** target) { if (*target == NULL) abort(); int res = (*target)->value; node* kill = *target; *target = (*target)->next; free(kill); return res; } }}} = 숙제 = 1. 복습하기 2. 복습하기 3. 복습하기 ---- = 숙제 제출 = == 천준현 == == 최지혁 == == 박인서 == * 연결 리스트 {{{ #include #include typedef struct node{ int value; struct node * next; }node; void freeall(node * hd) { node * t=hd->next; while(hd!=NULL) { t=hd->next; printf("%d\n",hd->value); free(hd); hd=t; } } int main() { node * head; node * temp; int i; head = (node *)malloc(sizeof(node)); head->value=0; head->next=(node *)malloc(sizeof(node)); temp=head; for(i=0;i<50;i++) { temp->next=(node *)malloc(sizeof(node)); temp->value=i; temp=temp->next; } temp->next=NULL; temp->value=50; freeall(head); return 0; } }}} * 스택 1 {{{ #include #include typedef struct node{ int val; struct node* next; }node; void push(node **, int); int pop(node **); int main() { node * head=NULL; push(&head,3); push(&head,4); printf("%d ",pop(&head)); printf("%d ",pop(&head)); return 0; } void push(node ** target, int val) { node * newnode=(node *)malloc(sizeof(node)); newnode->val=val; newnode->next=*target; *target=newnode; } int pop(node ** target) { int res=(*target)->val; node * kill = *target; if(*target==NULL) abort(); *target=(*target)->next; free(kill); return res; } }}} * 스택 2 {{{ #include #include typedef struct node{ int val; struct node* next; }node; void push(node *, int); int pop(node *); int main() { node head; head.next=NULL; push(&head,1); push(&head,2); push(&head,3); push(&head,4); printf("%d ",pop(&head)); printf("%d ",pop(&head)); printf("%d ",pop(&head)); printf("%d ",pop(&head)); return 0; } void push(node * target, int val) { node * newnode=(node *)malloc(sizeof(node)); node * temp=target->next; newnode->val=val; target->next=newnode; newnode->next=temp; } int pop(node * target) { int res=target->next->val; node * kill = target->next; if(target->next==NULL) abort(); target->next=target->next->next; free(kill); return res; } }}} == 이정재 == == 이원준 == * 연결 리스트 {{{ #include typedef struct node{ int v; struct node* next; }node; void freeAll(node* hd); //값을 출력하면서 구조체를 free int fNum(node* hd); //마지막 구조체의 값을 반환 void main(){ node* head; head = (node*)malloc(sizeof(node)); node* temp = head; for (int i = 0; i < 50; i++){ temp->next = (node*)malloc(sizeof(node)); temp->v = i; temp = temp->next; } temp->next = NULL; temp->v = 50; printf("%d\n", fNum(head)); freeAll(head); printf("\n"); } void freeAll(node* hd){ node* ntp; while (hd != NULL){ ntp = hd->next; printf("%d ", hd->v); free(hd); hd = ntp; } } int fNum(node* hd){ int i; node* tp; while (hd != NULL){ i = hd->v; hd = hd->next; } return i; } }}} * 스택 1 {{{ #include typedef struct node{ int v; struct node* next; }node; void push(node*, int); int pop(node *); void freeAll(node*); void main(){ node* head = NULL; push(&head, 3); push(&head, 4); push(&head, 9); printf("%d\n",pop(&head)); printf("%d\n", pop(&head)); printf("%d\n", pop(&head)); freeAll(head); } void push(node** tar, int val){ node* newn = (node*)malloc(sizeof(node)); newn->v = val; newn->next = *tar; *tar = newn; } int pop(node** tar){ if (*tar == NULL) abort(); int res = (*tar)->v; node* kill = *tar; *tar = (*tar)->next; free(kill); return res; } void freeAll(node* hd){ node* ntp; while (hd != NULL){ ntp = hd->next; printf("%d ", hd->v); free(hd); hd = ntp; } } }}} * 스택2 {{{ #include #include typedef struct node{ int v; struct node* next; }node; void push(node*, int); int pop(node*); void freeAll(node*); void main(){ node head; head.next = NULL; push(&head, 1); push(&head, 2); push(&head, 3); push(&head, 4); printf("%d\n",pop(&head)); printf("%d\n", pop(&head)); printf("---freeAll----\n"); freeAll(&head); printf("\n"); } void push(node* hd, int val){ node* tmp = (node*)malloc(sizeof(node)); tmp->next = hd->next; tmp->v = val; hd->next = tmp; } int pop(node* hd){ if (hd->next != NULL) printf("없는데 뽑다니!!! 프로그램끌거임\n"); abort; node* tmp = (node*)malloc(sizeof(node)); int val; tmp = hd->next; val = tmp->v; hd->next = tmp->next; free(tmp); return val; } void freeAll(node* hd){ node* ntp; while (hd->next != NULL){ ntp = hd->next; printf("%d ", ntp->v); ntp = ntp->next; free(hd->next); hd->next = ntp; } } }}} == 조종현 == == 남헌 == ---- ----------------------------------- [활동지도/2015] [자료구족발보쌈]