#include < stdio.h > #include < process.h > #include < stdlib.h >
typedef struct node { char data; struct node *next; }NODE;
NODE *insert( char item, NODE *list); NODE *append( NODE *list, NODE *temp); NODE *deletef( char item, NODE *list); void print_list(NODE *head);
int main() { FILE *fp; NODE *temp = NULL; NODE *list = NULL; char ch;
if( (fp = fopen("d10-7.txt","r")) == NULL ) { printf("파일을 열수없습니다!"); exit(-1); }
// 데이타 파일을 읽고 연결리스트를 생성 fscanf(fp, "%c", &ch); while( 0 == feof(fp) ) { temp = (NODE *)malloc(sizeof(NODE)); temp->data = ch; temp->next = NULL; list = append(list, temp); fscanf(fp, "%c", &ch); } fclose(fp);
// 데이터 파일로부터 생성된 연결리스트의 출력 print_list(list); printf("\n");
list = insert('c',list); list = insert('h',list); list = insert('m',list); // 결과 연결리스트의 출력 print_list(list); printf("\n"); list = deletef('f',list); list = deletef('e',list); list = deletef('k',list); list = deletef('m',list);
print_list(list); printf("\n");
return 0; }
NODE *append( NODE *list, NODE *temp) { NODE *current = list; if(list == NULL ) { list = temp; } else { while(current->next != NULL) { current = current->next; } current->next = temp; } return(list); }
void print_list(NODE *head) { if( head == NULL ) { printf("NULL"); } else { printf("%c==>",head->data); print_list(head->next); } }
NODE *insert( char item, NODE *list ) { NODE *current; NODE *follow; NODE *newnode = NULL; current = follow = list; // 새로운 노드의 생성 if(( newnode = (NODE *)malloc(sizeof(NODE))) == NULL ) { printf("메모리 생성이 안됨\n"); return NULL; } newnode->data = item; // 삽입 위치로 이동 while((current != NULL) && ( current->data < item)) // current != NULL '연결리스트 끝까지 갔는가' { // current->data < item '삽입할 위치를 찾아서' follow = current; // current 를 따라가는 연결리스트 current = current->next; // 다음 노드로 이동하는 연결리스트 }
// 삽입 newnode->next = current; if(current == list) // 연결리스트의 제일 앞부분 { list = newnode; } else // 제일 앞이 아닌 경우, 중간이나 끝부분 { follow->next = newnode; } return list; }
NODE *deletef( char item, NODE *list ) { NODE *current; NODE *follow; NODE *newnode; current = follow = list; while((current != NULL) && (current->data != item)) { follow = current; current = current->next; } if(current == NULL ) { printf("항목을 찾지 못하였습니다..\n"); return list; } if(list == current) { list = current->next; } else if( current->next == NULL ) { follow->next = NULL; } else { follow->next = current->next; } free(current); return list; } | |