:se enc=utf8 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> const int NAME_SPACE = 20; int cnt = 0; typedef struct _node { char *name; struct _node *next; }linkedList; linkedList *tail = NULL; typedef struct { linkedList *head; }linkedList_h; linkedList_h *createListHead(); void addNode(linkedList_h *L); void deleteNode(linkedList_h *L); void freeLinkedList(linkedList_h *L); void printList(linkedList_h *L); linkedList_h *createListHead() { linkedList_h *r = NULL; // ì~C~H í~W¤ë~S~\ ì~C~]ì~D± r=(linkedList_h*)malloc(sizeof(linkedList_h)); // ë©~T모리 í~U| ë~K¹ r->head=NULL; return r; // 주ì~F~L ë°~Xí~Y~X } void addNode(linkedList_h *L) { char str[NAME_SPACE] = {'\0'}; int idx = 0; printf("ì~B½ì~^~Eí~U| ë~E¸ë~S~\ì~]~X ë~M°ì~]´í~D° ì~^~Eë| ¥ : "); scanf("%s",&str); printf("ì~B½ì~^~Eí~U| ì~\~Dì¹~X ì~D| í~C~] : "); scanf("%d",&idx); ++cnt; linkedList *newNode = NULL; linkedList *p = L->head; newNode=(linkedList*)malloc(sizeof(linkedList)); newNode->name=(char*)malloc(sizeof(char)*NAME_SPACE); strcpy(newNode->name,str); newNode->next=NULL; if(L->head==NULL){ L->head=newNode; newNode->next=L->head; tail=newNode; return; } if(idx == 0){ newNode->next=p; L->head=newNode; return; } while(idx--){ p=p->next; } newNode->next=p->next; p->next=newNode; } void deleteNode(linkedList_h *L) { char str[NAME_SPACE] = {'\0'}; printf("ì~Bì| ~\í~U| ë~M°ì~]´í~D° ì~^~Eë| ¥ :"); scanf("%s",&str); --cnt; linkedList *p = L->head; linkedList *pre = NULL; if(!strcmp(p->name, str)){ L->head=p->next; free(p); return; } while(p != NULL){ pre=p; p=p->next; if(!strcmp(p->name, str)){ pre->next=p->next; free(p); return; } } } void freeLinkedList(linkedList_h *L) { linkedList *p = NULL; while(cnt--){ p=L->head; L->head=L->head->next; free(p); p=NULL; } } void printList(linkedList_h *L) { int pcnt = 0; int tcnt = cnt; linkedList *p = L->head; printf("리ì~J¤í~J¸ ì¶~\ë| ¥(%d) : ",cnt); while(p != NULL){ printf("(%d)%s ",pcnt++,p->name); p=p->next; if(!--tcnt){puts("");return;} } puts(""); } int main(void) { int slct = 0; linkedList_h *L = createListHead(); while(slct!=4) { puts("\në~K¨ì~H~\ ì~[~Pí~X~U 리ì~J¤í~J¸ ë©~Të~I´"); // ë©~Të~I´ puts("================="); puts("1. ë~E¸ë~S~\ ì~B½ì~^~E"); puts("2. ë~E¸ë~S~\ ì~Bì| ~\"); puts("3. 리ì~J¤í~J¸ ì¶~\ë| ¥"); puts("4. í~T~Dë¡~\ê·¸ë~^¨ ì¢~Eë£~L"); puts("================="); printf("ë©~Të~I´ ì~D| í~C~] : "); scanf("%d",&slct); switch(slct){ case 1: addNode(L); // 1. ë~E¸ë~S~\ ì~B½ì~^~E break; case 2: deleteNode(L); // 2. ë~E¸ë~S~\ ì~Bì| ~\ break; case 3: printList(L); // 3. 리ì~J¤í~J¸ ì¶~\ë| ¥ break; case 4: break; // 4. ì¢~Eë£~L default: puts("ì~^~X못ë~P~\ ëª~Eë| ¹ì~^~Eë~K~Hë~K¤."); break; } } // freeLinkedList(L); // ë§~Aí~A¬ë~S~\ 리ì~J¤í~J¸ L í~U´ì| ~\ return 0; }