데이터 구조 - 순차 테이블에 대한 삽입, 삭제 및 검색 알고리즘

//라이브러리 함수 참조
#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];     반환 확인 ; } }





추천

출처blog.csdn.net/m0_61105833/article/details/120816589