배열을 이용한 삽입, 삭제, 추가 Sort 프로그램 (Made by C) Programing





#include <stdio.h>
#define MAX 10
#define T  1
#define F  0
#define NULLs 0   //0으로 초기화를 하기 위해 전처리함

int count_list;
void clear(int *list );
int in_empty(int *list );
int is_full(int *list);
void display(int *list);
int get_length(int *list);
int is_in_list(int *list, int item);
int add(int *list, int item);
int delete_item(int *list, int item);

void main()
{
 int list[MAX];
 int item, menu, result;

 clear(list);
 while(menu != 6)    //quit 를 입력할때까지 반복
 { 
  printf("=====================MENU=================\n");
  printf("1. add\t\t");
  printf("2. delete\t");
  printf("3. clear\n");
  printf("4. display\t");
  printf("5. find\t\t");
  printf("6. quit\n");
  printf("==========================================\n");
  printf("input menu number : ");
  scanf("%d", &menu);

  switch(menu)
  {
  case 1:
   printf("삽입하고 싶은 수를 입력하세요 : ");
   scanf("%d", &item);
   result = add(list, item);
   if(result == F)      // is_list or is_full return
    puts("같은 값이 있거나 꽉 차 있습니다");
   else
    puts("삽입에 성공하였습니다");  
   break;
  case 2:
   printf("지우고 싶은 수를 입력하세요 : ");
   scanf("%d", &item);
   result = delete_item(list, item);
   if(result == F)      // is_empty or is_list return
    puts("list 가 비어있거나 값이 존재하지 않습니다.");
   else
    puts("삭제에 성공하였습니다.");  
   break;  
  case 3:
   puts("리스트를 모두 지웁니다!"); //list 모두 삭제 (0으로 초기화)
   clear(list);
   break;
  case 4:
   display(list);      //list 출력
   break;
  case 5:
   printf("확인하고 싶은 수를 입력하세요 : ");
   scanf("%d", &item);     //list에 값이 있는지 출력
   result = is_in_list(list,item);
   if(result == T)
    printf("%d 가 list 에 존재합니다\n", item);
   else
    printf("%d 가 list 에 존재하지 않습니다\n", item);
   break;
  case 6:         //프로그램 종료(while 조건)
   puts("프로그램을 종료합니다");
   break;
  default:        //메뉴 이외의 선택을 할때 출력
   puts("잘못된 수를 입력하였습니다");
   break;
  }
 }
}


void clear(int *list)
{
 int i;  
 for(i = 0; i < MAX; i++)
 {
  list[i] = NULLs;  //초기화
 }
}

int is_empty(int *list)
{
 if(list[0] != NULLs)
  return F;
 else
  return T;   //Empty 임
}

int is_full(int *list)
{

 int Max_temp;

 Max_temp = MAX-1;

 if(list[Max_temp] == NULLs)
  return F;   //Full 이 아님
 else
  return T;
}

void display( int *list)  //list 의 length 를 구하고 그 길이까지 출력
{
 int length, i, full, empty;

 length = get_length(list);
 full = is_full(list);
 empty = is_empty(list);
 if(full == T)      //가득차 있을때 마지막 값이 출력되지 않아서
  length = MAX;     //full일때 길이를 배열 최대 길이로 초기화

 if(empty == T)      //비어있다면 리스트 출력 불필요
  puts("=======list 가 비어있습니다========");
 else
 {
  puts("===출력!====");
  for(i = 0; i<length; i++)
  printf(" list[%d] = %d\n", i+1, list[i]);
  puts("===출력끝!==");
 }
}

int get_length(int *list)
{
 int count, Max_temp;
 count = 0;
 Max_temp = MAX - 1;

 while(list[count] != NULLs ) // list[count]값이 NULLs 일때까지 길이를 잼
 {
  if(count == Max_temp)  // 배열 길이의 최대값이라면 브레이크
   break;
  else
   count++;
 }
 return count;
}

int is_in_list(int *list, int item)
{
 int length, i;
 length = get_length(list);

 for(i=0; i<length; i++)
 {
  if(item == list[i])   //list 에 값이 있는지 확인
   return T;
 }
 return F;
}

int add(int *list, int item)
{
 int full, length, is_in, i, j, temp;
 is_in = is_in_list(list, item);
 full = is_full(list);
 if(full == T)
 {
  return F;
 }
 else if(is_in == T)
 {
  return F;
 } 
 else
 {
  length = get_length(list);
  list[length] = item;

  for(i = 1; i<=length; i++)   //삽입정렬
  {
   temp = list[i];
   j = i;
   while( (j>0) && (list[j-1] > temp))
   {
    list[j] = list[j-1];
    j = j -1;
   }
   list[j] = temp;
  }


  return T;
 }
}


int delete_item(int *list, int item)

{

 int empty, length, is_in, i, j;
 empty = is_empty(list);
 length = get_length(list);
 is_in = is_in_list(list, item);

 if(empty == T)
 {
  puts("list가 비어 있습니다");
  return F;
 }
 else if(is_in == F)
 {
  printf("%d 가 list 에서 존재하지 않습니다\n", item);
  return F;
 }
 else
 {
  for(i=0 ; i <= length ; i++)    //삭제 후 값을 정렬
  {
   if(list[i] == item)
   {
    for(j=i ; j <=length ; j++)
    {
     list[j] = list[j+1];
    }
    list[length] = NULLs;    //마지막 값 0으로 초기화
   }
  }
  return T;
 }
}


---------------------------------------------------------------------------------------------



약 1년전 자료구조 시간에 했던 과제 프로그램

입니다만 묘하게 이건 주석이 달려 있네요 제가 성실해서(뻥)

제출을 위해 주석을 달은 모양입니다

.......

자료를 뒤지다 보니 이런것도 있네요

기억이 새록새록

도움이 되셨으면 좋겠습니다

공유하기 버튼

 

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://VisualC.egloos.com/tb/4015941 [도움말]

덧글

댓글 입력 영역