#include <stdio.h>

typedef struct list_node *list_pointer;
struct list_node
{
 long id;
 int score;
 list_pointer link;
};

void sort(list_pointer ptr);
void sort2(list_pointer ptr);
list_pointer find_max(list_pointer ptr);
void print_list(list_pointer ptr);
int main(int argc, char *argv[])
{
 int i, dat;
 list_pointer ptr = NULL, temp, high_score;
 FILE *input;
 

 if ((input = fopen(argv[1], "r")) == NULL) {
  printf("입력한 파일을 열 수 없습니다.\n");
  exit(1);
 }
 temp = (list_pointer)malloc(sizeof(struct list_node));

 while (fscanf(input, "%ld %d", &(temp->id), &(temp->score)) != EOF)
 {
  
  if (ptr)
   temp->link = ptr;
  else
   temp->link = NULL;
  ptr = temp;
  temp = (list_pointer)malloc(sizeof(struct list_node));
  //--> 이부분에서 temp가 ptr을 가르키면 ptr이 먼저 받아서 앞쪽에 위치해야하는게 아닌가요?
 }
 
 print_list(ptr);
 high_score = find_max(ptr);
 printf("최대 성적을 가진 학생 아이디:%ld:성적:%d\n", high_score->id, high_score->score);
}

void print_list(list_pointer ptr)

  
  list_pointer temp, s, m, i;
  


  int n;
  printf("학번순 정렬(1),성적순 정렬(2)");
  scanf("%d", &n);
  if (n == 1)
  {
   sort(ptr);
  }
  else if (n == 2)
  {
   sort2(ptr);
  }
  else
  {
   printf("잘못입력하셨습니다.");
  }


 for (; ptr; ptr = ptr->link)
 {
  printf("%ld==%d\n", ptr->id, ptr->score);
 }
}

list_pointer find_max(list_pointer ptr)
{
 int iid;
 list_pointer max=ptr;

 for (; ptr; ptr = ptr->link)
 {
  if (max->score < ptr->score)
  {
   max = ptr;
  }
 }

 return max;
 
}


void sort(list_pointer ptr)

{

 list_pointer p, q, r;
 long tmp,tmp2;



 for (p = ptr; p; p = p->link)

  for (q = p->link; q; q = q->link)

   if (p->id > q->id)

   {

    tmp = p->id;
    tmp2 = p->score;

    p->id = q->id;
    p->score = q->score;

    q->id = tmp;
    q->score = tmp2;
   }

}


void sort2(list_pointer ptr)

{

 list_pointer p, q, r;
 long tmp, tmp2;



 for (p = ptr; p; p = p->link)

  for (q = p->link; q; q = q->link)

   if (p->score> q->score)

   {

    tmp = p->id;
    tmp2 = p->score;

    p->id = q->id;
    p->score = q->score;

    q->id = tmp;
    q->score = tmp2;
   }

}