이름: 정명훈
과목: 자료구조
주제: 연결 리스트를 이용한 학생 데이터 정렬
이 프로그램은 연결 리스트(Linked List)를 사용하여 학생 정보를 저장하고,
총점, 학번, 이름 기준으로 정렬하여 출력하는 기능을 수행합니다.
학생 데이터는 외부 파일(data.txt)로부터 입력받습니다.
- 형식:
학번 이름 총점
typedef struct student {
int number; // 학번
char name[10]; // 이름
float total; // 총점
} stu;
typedef struct NODE {
stu data;
struct NODE* link;
} node;
## 🔧 주요 기능
### 📁 파일 처리
- `data.txt` 파일에서 학생 정보를 읽어옴
- 파일의 끝을 정확히 처리하기 위한 `feof()` 사용
- `fopen()` 실패 시 예외 처리
### 🔗 연결 리스트 구성
- 구조체를 기반으로 한 연결 리스트(Linked List) 생성
- 입력받은 학생 정보를 노드로 변환 후 리스트에 삽입
### 🔄 정렬 기능
- `total_change()`
→ **총점 기준 오름차순 정렬**
- `number_change()`
→ **학번 기준 오름차순 정렬**
- `name_change()`
→ **이름 기준 오름차순 정렬**
### 🖨️ 출력 기능
- 정렬된 결과를 학번, 이름, 총점 형식으로 출력
### 🧠 학습 및 구현 포인트
- 연결 리스트 구현 및 노드 삽입 로직 설계
- 구조체 기반 정렬 알고리즘 직접 구현
- 파일 입출력 처리: `fopen`, `fscanf`, `feof`
- 메모리 동적 할당 및 해제: `malloc`, `free`
- 예외 상황에 대한 처리:
- 파일 열기 실패 시 오류 출력
- 동적 메모리 해제를 통한 메모리 누수 방지