//라이브러리 함수 참조
#include <stdio.h>
#include <stdlib.h>
//기호 상수 정의
#define MAXSIZE 100 //예상 시퀀스 테이블 용량
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//데이터 유형의 이름 변경 및 정의
typedef int Status;
typedef int ElemType;
typedef struct{ ElemType *elem; int length; }SqList;
//커스텀 함수 선언
Status InitList(SqList &L);
Status ListInsert(SqList &L,int i ,ElemType e);
Status ListDelete(SqList &L,int i);
Status GetElem(SqList L, int i, ElemType &e);
//메인 함수
int main(int argc, char *argv[]) { SqList L; int choice,z = 1; int i; ElemType e; if(!InitList( L )) { exit(0); } // 출력 메뉴 while(z) { printf("-------선형 테이블 데이터 저장 구조---\n"); printf("|\t\t1.Insert\t\t|\n"); printf("|\t\t2. 삭제\t\t|\n"); printf("|\t\t3. 찾기\t\t|\n"); printf("|\t\t0.Exit \t\t|\n"); printf("선택할 프로그램을 입력하세요\n"); scanf("%d",&choice); switch(choice){ case 1://insert //for 이미 알고 있는 L(알려진), i, e printf("삽입 위치를 입력하세요: "); scanf("%d",&i);
printf("삽입 요소를 입력하세요:");
scanf("%d",&e);
// 호출
if(OK == ListInsert(L , i , e))
{ printf("삽입 성공!\n\n" ); } else { printf("삽입 실패!\n\n"); } break; case 2://Delete printf("삭제할 위치를 입력하세요\n"); scanf("%d",&i ) ; if(OK == ListDelete(L,i)) { printf("삭제 성공\n\n"); } else { printf("삭제 실패\n\n"); }
break;
case 3://search
printf("찾고자 하는 요소의 일련번호를 입력하세요\n");
scanf("%d",&i);
//call
if(OK == GetElem(L , i , e))
{ printf("찾고 있는 요소: \n"); } else { printf("입력한 일련 번호가 잘못되었습니다\n"); } break;
case 0:z = 0;
printf("다음에 또 오세요!");
break;
default:printf("입력 오류!\n");
}
}
return 0;
}
//——————커스텀 function (From "Data Structure")
//초기화
상태 InitList(SqList &L){ //빈 시퀀스 테이블 구성
L.elem = new ElemType[MAXSIZE]; //시퀀스 테이블을 위한 공간 할당
if(!L.elem) exit (OVERFLOW); //스토리지 할당 실패
L.length = 0; //빈 테이블 길이는 0
return OK;
}
//삽입 알고리즘
Status ListInsert(SqList &L,int i ,ElemType e){ int j;
if(i<1 || i>L.length+1) return ERROR; //i 값이 잘못되었습니다.
if(L.length==MAXSIZE) return ERROR; //현재 저장 공간이 가득 찼습니다
. for(j=L.length -1;j >= i-1;j--) L.elem[j+1]=L.elem[j]; //위치를 삽입하고 후속 요소를 뒤로 이동
L.elem[i-1]=e ; //새로운 요소 e를 i번째 위치에 배치
L.length ++; //테이블 길이를 1씩 증가
return OK;
}
//알고리즘 삭제
Status ListDelete(SqList &L,int i)
{ int j; if( (i <1)||(i>L.length)) return ERROR; //i 값은 (j=i ; j<=L.length-1 ; j++) L.elem[j-1]= 에 대해 유효하지 않습니다. L.elem[j];//삭제된 요소 이후의 요소를 앞으로 이동 --L.length; //테이블 길이가 1씩 줄어듬
반환 확인 ;
} // 상태
반환 GetElem ( SqList L , int i , ElemType &e ) { if ( i < 1 || i > L .length ) return ERROR ; e = L.요소[i-1]; 반환 확인 ; } }