반응형

개요

 

이번에는 자료구조에서 가장 중요하다고 할 수 있는 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;
			}
		}
	}

 


다음에는 이 만들어 놓은 연결리스트에 데이터를 삽입해보는 과정을 알아보도록 하겠습니다.

 


 

반응형

+ Recent posts