이중연결리스트 이용해서 데이터입력/검색/출력/삭제하는겁니다.
근데 삭제가안되요...
좀 봐주시면안될까요..ㅠㅠ


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

struct EMP {
 int hakbun;
 char name[20];
 int age;
 char address[40];
 struct EMP *rnext, *lnext;
} *ptr;

struct EMP *head=NULL, *x=NULL, *prev;
int del_hakbun;

void insert(void);
void del(void);
void prt(void);
void maximum(void);
void minimum(void);
void sumave(void);

main()
{
 int sel;
 while(1) {
  printf("1. 레코드 추가/삽입\n2. 레코드 삭제\n3. 최연장자 출력\n4. 최연소자 출력\n5. 나이 합계/평균 출력\n6. 출력\n7. 종료\n원하시는 작업은 ? ");
  scanf("%d", &sel);

  switch(sel) {
   case 1 : insert();
      break;
   case 2 : if(head==NULL)
      printf("삭제할 레코드가 없습니다. 다시 입력해주세요.\n");
      else {
      del();
      }
      break;
   case 3 : if(head==NULL) //레코드에 값이 없다면 다시 입력하도록 출력
      printf("레코드가 추가되어 있지 않습니다. 다시 입력해주세요.\n");
      else  {
      maximum();
      }
      break;
   case 4 : if(head==NULL) //레코드에 값이 없다면 다시 입력하도록 출력
      printf("레코드가 추가되어 있지 않습니다. 다시 입력해주세요.\n");
      else  {
      minimum();
      }
      break;
   case 5 : if(head==NULL) //레코드에 값이 없다면 다시 입력하도록 출력
      printf("레코드가 추가되어 있지 않습니다. 다시 입력해주세요.\n");
      else  {
      sumave();
      }
      break;
   case 6 : prt();
      break;
   case 7 : exit(1);
   default : printf("입력이 잘못되었습니다.\n\n");
  }
 }
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
void insert(void)

  
 
 ptr=(struct EMP*)malloc(sizeof(struct EMP));
  if(ptr==NULL) {
   printf("Heap영역할당오류 \n");
   exit(1);
  }

  printf("학번 ? ");
  scanf("%d", &ptr->hakbun);
  fflush(stdin);
  printf("성명 ? ");
  gets(ptr->name);
  printf("나이 ? ");
  scanf("%d", &ptr->age);
  fflush(stdin);
  printf("주소 ? ");
  gets(ptr->address);
  
  ptr->rnext = NULL;
  
  if(head == NULL)     //첫번째 영역(헤드)에 값이 없다면
   head=x=ptr;      //입력받은 값을 헤드에 넣기
  else       //두번째 입력부터는 아래것을 적용
  {
   while(x != NULL)   
   {
    if(x->hakbun == ptr->hakbun) {  //x(헤드)의 학번과 입력받은 학번이 같을경우 중복메시지후 리턴
     printf("학번이 중복되었습니다. 다시 입력하세요.\n\n");
     break;
    }
    if(x->hakbun > ptr->hakbun)   //x(헤드)의 학번이 입력받은 학번보다 클 경우
    {
     if(x == head)     //x(헤드)와 헤드의 값이 같을 경우
     {
      ptr->lnext=head;
      ptr->rnext=head->rnext;
      head->rnext=ptr->lnext;
      head->rnext=ptr;
      
     } //if종료
     else            //아니면
     {
      x->lnext=ptr;
      x->rnext=ptr->rnext;
      ptr->rnext=x->lnext;
      ptr->rnext=x;
      prev->rnext=ptr;
     } //if종료
     break;
    } //if종료
   
    else if(x->rnext == NULL)    //다음주소의 값이 없을경우
    {
     ptr->lnext=x;
     ptr->rnext=x->rnext;
     x->rnext=ptr->lnext;
     x->rnext = ptr;
     break;
    } //if종료
    prev=x;
    x = x->rnext;
   }  
  }
  
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void del(void)
{
 printf("삭제할 내용을 입력하세요");
 scanf("%d", &del_hakbun);

 ptr=head;
 while(ptr) {
 if(del_hakbun == ptr->hakbun)
 {
  if(ptr == head){
   ptr->lnext->rnext = ptr->rnext;
   ptr->rnext->lnext = ptr->lnext;
  }
  else {
   prev->lnext->rnext = prev->rnext;
   prev->rnext->lnext = prev->rnext;
  }
  free(ptr);
  break;
 }
 ptr=ptr->rnext;
 }
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void maximum(void) //최대나이구하기
{
 int max=0;
 max = head->age;
 ptr=head;
 while(ptr != NULL) {
  if(max < ptr->age)
   max=ptr->age;
   ptr=ptr->rnext;
 }
 printf("최연장자는 %d세입니다.\n\n", max);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void minimum(void) //최소나이구하기
{
 int min=0;
 min = head->age;
 ptr=head;
 while(ptr != NULL) {
  if(min > ptr->age)
   min=ptr->age;
   ptr=ptr->rnext;
 }
 printf("최연소자는 %d세입니다.\n\n", min);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void sumave(void) //나이합계구하기
{
 int sum = 0, count = 0;
 float aver = 0.0;
 ptr=head;
 while(ptr != NULL) {
  sum = sum + ptr->age;
  count++;
  ptr = ptr->rnext;
 }

 aver = (float)sum / count;

 printf("나이의 합은 %d이고, 나이의 평균은 %.1f입니다.\n\n", sum, aver);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void prt(void) //출력하기
{
 ptr=head;
 while(ptr)
 {
  printf("학번 : %d 이름 : %s 나이 : %d 주소 : %s\n", ptr->hakbun, ptr->name, ptr->age, ptr->address);
  ptr=ptr->rnext;
 }
}