반응형
개요
이번에는 자료구조에서 가장 중요하다고 할 수 있는 Linked-list를 저번 포스팅에는
심도 있게 다루어 보지 못한 것 같아서 C언어의 파일 입출력 기능과 함께 사용하는 방법을 알아보도록 하겠습니다.
우선 파일입출력을 하기 위해서는 C파일과 txt 파일이 같은 설루션 폴더에 위치해 있어야 합니다.
mydata.txt 파일
조항준 265342 4.2 010-3542-6538 경남
서문길 763563 4.3 010-6451-3876 경기
장미진 201415 3.1 011-4653-2552 충북
이해인 201425 3.7 017-6453-1263 경기
남인영 201431 2.8 019-7867-0923 강원
성진명 201418 3.5 011-9872-2542 서울
박정아 201678 3.8 070-7689-3257 강원
이재영 206789 3.6 080-5234-7862 경남
신영석 205689 3.5 011-8764-2341 충북
문성민 207625 3.2 018-8952-3651 전남
조민지 201852 3.5 010-4562-4762 제주
김춘미 201738 3.6 010-3977-7852 충남
김동섭 201789 3.0 010-5634-0923 전북
현정화 201687 2.9 010-4762-4890 경기
정영진 201467 2.8 010-4523-8976 서울
박갑조 201424 3.3 011-6534-3452 경기
정선종 201419 3.1 019-9087-3562 강원
조성미 201429 3.8 017-7363-9378 경남
주성영 201493 2.6 010-8976-7363 전남
김영신 201459 3.9 018-5636-8987 서울
node 구조체
typedef struct _node {
char name[50];
int sno;
float gpa;
char phone[20];
char province[30];
struct node* link;
}node;
search_ins_position(정렬하기 위해사용되는 함수)
node* search_ins_position(node* head, char* d_name) {
node* cmp, * before;
int re = 0;
cmp = (node*)malloc(sizeof(node));
before = NULL;
cmp = head;
while (1) {
re = strcmp(d_name, cmp->name);
if (re > 0) {
before = cmp;
cmp = cmp->link;
if (cmp == NULL)
return before;
}
else if (re <= 0) {
return before;
}
}
}
main( 파일을 마지막 까지 읽어서 이름순으로 정렬)
int main() {
node* head, * curnode, * prev;
char d_name[50], d_phone[20], d_province[30]; //temporary storage
int d_sno, count; //temporary storage
float d_gpa; //temporary storage
int i, in_sno = 0; //input student number
float in_gpa = 0; //input gpa
char input[200], * token, data[6][50], in_name[2][50], in_phone[20], in_province[30]; //input name, phone, province
//Open 'mydata.txt' from the project directory
FILE* fp;
fp = fopen("mydata.txt", "r");
head = NULL;
prev = NULL;
while (1) {
//This procedure makes rotation not to work infinitely.
count = fscanf(fp, "%s", d_name);
if (count != 1)
break;
fscanf(fp, "%d %f %s %s", &d_sno, &d_gpa, &d_phone, &d_province);
//Copy data from temporary storage to current node
curnode = (node*)malloc(sizeof(node));
strcpy(curnode->name, d_name);
curnode->sno = d_sno;
curnode->gpa = d_gpa;
strcpy(curnode->phone, d_phone);
strcpy(curnode->province, d_province);
if (!head) {
head = curnode;
curnode->link = NULL;
}
else {
prev = search_ins_position(head, d_name);
if (!prev) {
curnode->link = head;
head = curnode;
}
else {
curnode->link = prev->link;
prev->link = curnode;
}
}
}
다음에는 이 만들어 놓은 연결리스트에 데이터를 삽입해보는 과정을 알아보도록 하겠습니다.
반응형
'알고리즘 & 자료구조 > 자료구조' 카테고리의 다른 글
C언어 자료구조 (심화 연결리스트 Linked_list 데이터 검색, 삭제) (0) | 2020.04.30 |
---|---|
C언어 자료구조 (심화 연결리스트 Linked_list 데이터 삽입) (0) | 2020.04.29 |
자료구조 C언어 (Recursion 함수 와 동적할당) (0) | 2020.04.15 |
자료구조 (이진트리 Binary Tree 순회 , 이진순회) (0) | 2019.12.02 |
자료구조 (이진트리 Binary Tree 검색 삽입) (0) | 2019.12.02 |