5.3.1. 예제1 ¶
#include <stdio.h> #include <stdlib.h> typedef struct bank{ int money; int num; char * name; }bank; typedef struct node{ bank val; struct node* next; }node; void push(node *); void pop(node *); int main() { node head; int i; head.next=NULL; for(i=0;i<10;i++) push(&head); for(i=0;i<10;i++) pop(&head); return 0; } void push(node * target) { node * newnode=(node *)malloc(sizeof(node)); node * temp=target->next; int tmoney,tnum; char * tname=(char *)malloc(sizeof(char)*100); scanf("%s %d %d",tname,&tnum,&tmoney); newnode->val.name=tname; newnode->val.num=tnum; newnode->val.money=tmoney; target->next=newnode; newnode->next=temp; } void pop(node * target) { node * kill=(node *)malloc(sizeof(node)); if(target==NULL) abort(); if(target->next->next==NULL) { printf("%s %d %d\n",target->next->val.name,target->next->val.num,target->next->val.money); kill=target->next; target->next=NULL; free(kill); } else pop(target->next); }
5.3.2. 예제2 ¶
#include <stdio.h> #include <stdlib.h> typedef struct bank{ int money; int num; char * name; }bank; typedef struct node{ bank val; struct node* next; }node; void push(node *); void pop(node *); int main() { node head; int i; head.next=NULL; for(i=0;i<10;i++) push(&head); for(i=0;i<10;i++) pop(&head); return 0; } void push(node * target) { node * newnode=(node *)malloc(sizeof(node)); node * temp=target->next; int tmoney,tnum; char * tname=(char *)malloc(sizeof(char)*100); scanf("%s %d %d",tname,&tnum,&tmoney); newnode->val.name=tname; newnode->val.num=tnum; newnode->val.money=tmoney; target->next=newnode; newnode->next=temp; } void pop(node * target) { node * kill = target->next; printf("%s %d %d\n",target->next->val.name,target->next->val.num,target->next->val.money); if(target->next==NULL) abort(); target->next=target->next->next; free(kill); }
5.5.1. 큐로 짬 ¶
(free따윈없다!)
- 그러다 정말로 자유가 없어짐 - 박인서
#include<stdio.h> #include<stdlib.h> typedef struct node{ char v; struct node* next; }node; typedef struct account{ node namehd; node anumhd; struct account* next; }account; void push(node*, char*); account* acpush(account* hd); void freeAll(node*); int l = 10; //고객수 void main(){ account ac = { NULL }; account* tmp = ∾ account* pt = (account*)malloc(sizeof(account)); char a; pt = ∾ for (int i = 0; i < l; i++) { printf("이름입력하3\n"); for (int j = 0; 1; j++){ a = fgetc(stdin); if (a == '\n') break; push(&(pt->namehd), &a); } printf("번호입력하3\n"); for (int j = 0; 1; j++){ a = fgetc(stdin); if (a == '\n') break; push(&(pt->anumhd), &a); } printf("\n"); pt = acpush(pt); pt->anumhd.next = NULL; pt->namehd.next = NULL; pt->next = NULL; } pt = ∾ printf("----출력----\n"); for (int i = 0; i < l; i++){ printf("이름\n"); freeAll(&(pt->namehd)); printf("\n"); printf("계좌\n"); freeAll(&(pt->anumhd)); printf("\n"); printf("\n"); pt = pt->next; } } void push(node* hd, char* val){ node* tmp = (node*)malloc(sizeof(node)); node* pt = (node*)malloc(sizeof(node)); pt = hd; while (pt->next != NULL) { pt = pt->next; } tmp->next = NULL; tmp->v = *val; pt->next = tmp; pt = pt->next; } account* acpush(account* ac){ account* tmp = (account*)malloc(sizeof(account)); tmp->next = NULL; ac->next = tmp; return ac->next; } void freeAll(node* hd){ node* ntp; node* tmp = hd; while (hd->next != NULL){ ntp = hd->next; printf("%c", ntp->v); ntp = ntp->next; hd->next = ntp; } hd = tmp; }